我的老板告诉我为我写的小c文件(foo.c)编写单元测试.我在网上看了很多关于单元测试的背景知识,比如只测试一个函数并使测试完全自动化,但我没有找到任何关于如何实现实际单元测试的教程.我尝试了以下方法,但失败了.
/*foo.c*/
#include foo.h
#if UNIT_TESTING
#define main example_main
#endif
int foo1(...){...}
int foo2(...){...}
int main(int argc,char **argv) {
foo1(...);
foo2(...);
}
/*test_foo.c*/
#include "foo.h"
void main(int argc,char **argv) {
int i = example_main(argc,argv);
return;
}
/*foo.h*/
int example_main(int argc,char **argv);
Run Code Online (Sandbox Code Playgroud)
作为cmd,我使用:
gcc -Wall -pedantic foo.c test_foo.c -DUNIT_TEST=1 -o test_foo.out
Run Code Online (Sandbox Code Playgroud)
我得到以下错误:
test_foo.c: warning: return type of ‘main’ is not ‘int’
test_foo.c: In function ‘main’:
test_foo.c warning: unused variable ‘i’
/tmp/ccbnW95J.o: In function `main':
test_foo.c: multiple definition of `main'
/tmp/ccIeuSor.o:foo.c:(.text+0x538b): first …Run Code Online (Sandbox Code Playgroud) 当我写作
$("#new_lang").click(function(e)
{
alert("something");
e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)
什么是Ë这里,为什么没有功能的工作没有它?为什么我可以写任何东西而不是e?
是否可以为git或svn制作一个可以拒绝未在特定编码中提交的文件的预提交挂钩?
我曾经在几个项目上工作,坚持某种文件编码似乎是一个问题(例如UTF-8)
是否有可能在linux中以某种方式读取另一个进程的输出(来自stdout和stderr)而不知道它?所以假设我有一个进程A在后台运行而进程B想要读取它的输出 - 这可能吗?我不能使用管道或屏幕程序.我尝试从/ proc/xxx/fd或/ pts/x控制台等读取,但到目前为止没有任何工作.
我想捕捉Android触控手机上的手指移动方向.如果用户向上/向下/向左/向右滑动手指,我想捕获此方向.我怎么能找到这个?谢谢.
我正在尝试使用相同的名称进行多个文本框.
这是我的代码.
HTML Email 1:<input name="email" type="text"><br> Email 2:<input name="email" type="text"><br> Email 3:<input name="email" type="text"><br> PHP $email = $_POST['email']; echo $email;
我希望得到这样的结果:
email1 @ email.com,email2 @ email.com,email3 @email.com
我该怎么做?那可能吗?
我习惯于在PHP中使用多维数组,在那里我可以通过分配和初始化哈希
unset($a); // just to show that there is no variable $a
$a['settings']['system']['memory'] = '1 Gb';
$a['settings']['system']['disk space'] = '100 Gb';
Run Code Online (Sandbox Code Playgroud)
有没有办法在Ruby中做类似的事情?或者我需要先初始化所有维度,然后分配值.是否可以定义一个高级Hash,它可以满足我的需求?你会怎么做?
更新
除了道格拉斯提出的解决方案(见下文)之外,我还找到了一个主题,其中BrianSchröäer提出了该Hash课程的扩展:
class AutoHash < Hash
def initialize(*args)
super()
@update, @update_index = args[0][:update], args[0][:update_key] unless args.empty?
end
def [](k)
if self.has_key?k
super(k)
else
AutoHash.new(:update => self, :update_key => k)
end
end
def []=(k, v)
@update[@update_index] = self if @update and @update_index
super
end
end
Run Code Online (Sandbox Code Playgroud)
当仅仅请求项目值时,例如,当不期望地创建丢失的散列项时,它允许解决该问题a['key'].
一些额外的参考
我有一个方法,可以在DB(SQL Server)中添加或更新记录,并将RecordID作为(Int32)输出参数返回,成功/失败结果返回为(Int32)返回值.
鉴于我正在指定这些参数的类型,为什么我必须在返回它们时将它们强制转换?
我希望使用以下内容:
enquiryID = cmd.Parameters["@EnquiryID"].Value;
Run Code Online (Sandbox Code Playgroud)
...但我不得不跳过几个额外的篮球:
enquiryID = Int32.Parse(cmd.Parameters["@EnquiryID"].Value.ToString());
Run Code Online (Sandbox Code Playgroud)
这不是世界末日,但它似乎只是一个漫长的解决方案.为什么Parameters.Value返回SqlParameters.Value对象而不是Int32?
更新:
好吧,我确信 - 直接铸造FTW: (int)cmd.Parameters["@EnquiryID"].Value
我使用相当大的数据集(它们仍然适合内存)使用机器学习,我在R中编写了一些计算,我觉得它太慢了.因此,我想用我将从R调用的编译代码替换程序的"关键部分".我手头的一个示例问题是实现前向 - 后向算法.
我的问题是我是否应该学习Fortran或C++来做到这一点?我只需要使用数字向量或矩阵.我主要感兴趣的是哪种语言更容易学习和R界面,我真的不关心哪一个在我的简历上看起来更好.
我已经阅读了R扩展手册,并使用内联包使用一些简单的Fortran和C++代码.我目前的印象是Fortran95会更容易学习,虽然Rcpp包看起来也很有趣.我目前知道R,Python和Matlab.
c# ×2
linux ×2
php ×2
android ×1
arrays ×1
c ×1
c++ ×1
casting ×1
fortran ×1
git ×1
hash ×1
javascript ×1
jquery ×1
parameters ×1
process ×1
r ×1
return-value ×1
ruby ×1
sorting ×1
sql-server ×1
svn ×1
tty ×1
unit-testing ×1