GTest Floats less 或 close with absolute error
GTest Floats less or close with absolute error
googletest 的断言宏非常棒,因为它们在失败时提供了很好的消息。我正在寻找一个更复杂的浮动比较的好可能性:
"Less than or close with given accuracy for the latter"
因此,根据 Advanced Guide on github 这至少是可能的,而无需给出浮动可能接近的最大绝对误差:
EXPECT_PRED_FORMAT2(::testing::FloatLE, val1, val2);
就在上面他们说 "close with given error" 是如何工作的:
EXPECT_NEAR(val1, val2, abs_error);
所以我认为组合也一定有效。查看源代码,EXPECT_NEAR 是如何扩展的,我看到有像
这样的高阶宏
EXPECT_PRED_FORMAT3
再次接受另一个值。但是,我无法让这个组合以直接的方式工作。
所以问题是:这是否可能以及如何实现?
当然可以做一个解决方法,编码比较并只比较一个布尔值。但是,这在失败的情况下缺少很好的 gtest 输出。
您可以使用 EXPECT_PRED3(pred, val1, val2, val3)
但您必须编写自己的 pred 函数,该函数需要 3 个参数和 returns true
或false
.
如果您想要漂亮的消息,您应该编写自己的函数,该函数接受 3 个参数和 returns ::testing::AssertionResult
,如 Google 测试文档中所述,Using a Function That Returns an AssertionResult .然后,您可以将该函数与 EXPECT_TRUE
.
一起使用
googletest 的断言宏非常棒,因为它们在失败时提供了很好的消息。我正在寻找一个更复杂的浮动比较的好可能性: "Less than or close with given accuracy for the latter" 因此,根据 Advanced Guide on github 这至少是可能的,而无需给出浮动可能接近的最大绝对误差:
EXPECT_PRED_FORMAT2(::testing::FloatLE, val1, val2);
就在上面他们说 "close with given error" 是如何工作的:
EXPECT_NEAR(val1, val2, abs_error);
所以我认为组合也一定有效。查看源代码,EXPECT_NEAR 是如何扩展的,我看到有像
这样的高阶宏EXPECT_PRED_FORMAT3
再次接受另一个值。但是,我无法让这个组合以直接的方式工作。
所以问题是:这是否可能以及如何实现?
当然可以做一个解决方法,编码比较并只比较一个布尔值。但是,这在失败的情况下缺少很好的 gtest 输出。
您可以使用 EXPECT_PRED3(pred, val1, val2, val3)
但您必须编写自己的 pred 函数,该函数需要 3 个参数和 returns true
或false
.
如果您想要漂亮的消息,您应该编写自己的函数,该函数接受 3 个参数和 returns ::testing::AssertionResult
,如 Google 测试文档中所述,Using a Function That Returns an AssertionResult .然后,您可以将该函数与 EXPECT_TRUE
.