Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较C++;有黄金参考的模型? 我写了一个C++模型,它有输入、输出和内部变量。在这种情况下,输入是样本流x[n]。输出和内部变量也是样本流。我把这个版本的代码称为“黄金参考”_C++_Testing - Fatal编程技术网

如何比较C++;有黄金参考的模型? 我写了一个C++模型,它有输入、输出和内部变量。在这种情况下,输入是样本流x[n]。输出和内部变量也是样本流。我把这个版本的代码称为“黄金参考”

如何比较C++;有黄金参考的模型? 我写了一个C++模型,它有输入、输出和内部变量。在这种情况下,输入是样本流x[n]。输出和内部变量也是样本流。我把这个版本的代码称为“黄金参考”,c++,testing,C++,Testing,我还想到了一些我想尝试的代码优化。我把这个版本的代码称为“实验性的”。但我想确保任何更改都不会破坏代码。也就是说,实验代码的输入、输出和一些内部变量与黄金参考相匹配 因此,对于示例流输入,我想检查实验代码输入、输出和内部变量是否与黄金参考匹配 但我正在尝试考虑一种代码/构建结构,它允许我同时运行两个版本,而对文件名、类名等的更改最少 到目前为止,我认为最简单的解决方案似乎是编辑实验代码库中的每个文件,并重命名名称空间和#include路径。有没有更好的解决方案不需要大量重命名 由于模板等原因,大

我还想到了一些我想尝试的代码优化。我把这个版本的代码称为“实验性的”。但我想确保任何更改都不会破坏代码。也就是说,实验代码的输入、输出和一些内部变量与黄金参考相匹配

因此,对于示例流输入,我想检查实验代码输入、输出和内部变量是否与黄金参考匹配

但我正在尝试考虑一种代码/构建结构,它允许我同时运行两个版本,而对文件名、类名等的更改最少

到目前为止,我认为最简单的解决方案似乎是编辑实验代码库中的每个文件,并重命名名称空间和#include路径。有没有更好的解决方案不需要大量重命名

由于模板等原因,大多数代码驻留在头文件中

//Golden src/top.h
#包括“src/sub1.h”
#包括“src/sub2.h”
名称空间模型{
一流{
公众:
Sub1 Sub1;
Sub2-Sub2;
Var;
Var过程(Var x){
var=sub1.过程(x);
返回子2.过程(var);
}
};
}
//实验src_expr/top.h
#包含“src_expr/sub1.h”//必须编辑包含路径!
#包括“src_expr/sub2.h”
名称空间模型_expr{//必须重命名名称空间!
一流{
公众:
Sub1 Sub1;
Sub2-Sub2;
Var;
Var过程(Var x){
var=sub1.过程(x);
返回子2.过程(var);
}
};
}
//test.cpp
#包括“src/top.h”//golden
#包括“src_expr/top.h”//experional
无效测试(标准::矢量xvec){
型号:顶级黄金;
型号:Top Top expr;
用于(常数自动&x:xvec){
Var y_gold=顶部黄金加工(x);
Var y_expr=顶部expr.过程(x);
断言(y_gold==y_expr);
断言(top_gold.var==top_expr.var);
}
}

一种方法是使代码可模拟

这意味着您提供了一个接口,并且只与之交互。methid尽可能的纯净(包括作为输入和输出的对象)。通过可模拟的工厂对象创建实例

然后编写一个接口实现,创建两个版本,比较它们的输出、错误(如果它们不同),并在外部表现出与其中一个类似的行为


不幸的是,这可能需要进行重大的重构;理想情况下,您在编写第一个版本之前就可以这样做。

一种方法是使代码可以模拟

这意味着您提供了一个接口,并且只与之交互。methid尽可能的纯净(包括作为输入和输出的对象)。通过可模拟的工厂对象创建实例

然后编写一个接口实现,创建两个版本,比较它们的输出、错误(如果它们不同),并在外部表现出与其中一个类似的行为


不幸的是,这可能需要进行重大的重构;理想情况下,您在编写第一个版本之前就应该这样做。

您使用的是什么库?听起来您需要一个更正式的单元测试工具,比如它。定义明确实现A行为的测试,然后编写B以通过相同的测试。如果可以为类定义一个抽象接口(即,将类与调用代码之间的交互减少为只调用一组方法),则可以编写一个实现该接口的“Decorator”类,将两个类中的每个类的实例作为子对象保存,并将对其任何方法的每次调用传递给两个子类的同名方法,并比较它们的结果。然后,您的调用代码可以只保留一个指向接口的指针,而不需要修改以启用测试。您使用的是什么库?听起来您需要一个更正式的单元测试工具之类的工具。定义明确实现A行为的测试,然后编写B以通过相同的测试。如果可以为类定义一个抽象接口(即,将类与调用代码之间的交互减少为只调用一组方法),则可以编写一个实现该接口的“Decorator”类,将两个类中的每个类的实例作为子对象保存,并将对其任何方法的每次调用传递给两个子类的同名方法,并比较它们的结果。然后,您的调用代码可以只保留一个指向接口的指针,而不需要修改以启用测试。