Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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++ GTest浮动较小或接近绝对误差_C++_Unit Testing_Floating Point_Googletest - Fatal编程技术网

C++ GTest浮动较小或接近绝对误差

C++ GTest浮动较小或接近绝对误差,c++,unit-testing,floating-point,googletest,C++,Unit Testing,Floating Point,Googletest,googletest的断言宏非常棒,因为它们在失败时提供了很好的消息。我正在寻找一种更复杂的浮点比较方法: “小于或接近后者的给定精度” 因此,根据模型,这至少是可能的,而不会给出浮动的最大绝对误差: EXPECT_PRED_FORMAT2(::testing::FloatLE, val1, val2); 就在上面,他们说“以给定错误关闭”是如何工作的: 所以我认为组合也必须有效。看看源代码,EXPECT_NEAR是如何扩展的,我发现有像这样的高阶宏 EXPECT_PRED_FORMAT3

googletest的断言宏非常棒,因为它们在失败时提供了很好的消息。我正在寻找一种更复杂的浮点比较方法: “小于或接近后者的给定精度” 因此,根据模型,这至少是可能的,而不会给出浮动的最大绝对误差:

EXPECT_PRED_FORMAT2(::testing::FloatLE, val1, val2);
就在上面,他们说“以给定错误关闭”是如何工作的:

所以我认为组合也必须有效。看看源代码,EXPECT_NEAR是如何扩展的,我发现有像这样的高阶宏

EXPECT_PRED_FORMAT3
再次接受另一个值。然而,我无法让这种组合以一种直接的方式工作

所以问题是:这到底有可能吗?如何实现


当然,我们可以做一些变通,对比较进行编码,然后只比较一个布尔值。但是,在出现故障时,这缺乏良好的gtest输出。

您可以使用
EXPECT_PRED3(pred,val1,val2,val3)
但是您必须编写自己的pred函数,它接受3个参数并返回
true
false


如果您想要好消息,您应该编写自己的函数,该函数接受3个参数并返回
::testing::AssertionResult
,如Google测试文档中所述。然后,您可以将该函数与
EXPECT\u TRUE

一起使用,为什么不以简单的顺序对相同的数字逐个使用两个期望值?如果这样做,您可以确保其中一个始终为false,并且测试失败-这将使它变得无用。一般来说,对于gtest,不可能说“这个或那个”。如果我错了,我会很高兴了解这一点:-)因此我编写了一个函数断言result FloatSmallerOrNear(float a,float b,float absErr),它与EXPECT_TRUE一起工作。但是我认为以下内容也应该是可能的,但是它不能编译(太多的参数,应该是3):EXPECT_PRED_FORMAT3(FloatSmallerOrNear,a,b,0.1)你明白为什么吗?显然我在这一点上误解了文档。您应该使用
EXPECT\u PRED3
而不是
EXPECT\u PRED\u FORMAT3
。另外,当您使用
EXPECT\u PRED3
时,您的pred函数应该返回一个布尔值,而不是断言结果。谢谢!仍然想知道为什么它在github页面上用_格式说,但应该是这样。我马上就去试试!作品非常感谢你!
EXPECT_PRED_FORMAT3