c++ 和 gtest,需要帮助理解为什么看似简单的测试失败
c++ and gtest, need help understanding why seemingly simple test fails
我最近开始使用 googletest 来设置一些单元测试和 运行 到我不明白的情况。测试失败,但一切看起来都会通过。
我有一个类似这样的小结构:
struct vec2 { float x, y; }
一个函数:
vec2 vec2_add_scalar (vec2 v, float scalar) {
return {v.x + scalar, v.y + scalar};
}
和测试:
TEST (math_test, add_scalar) {
vec2 v {4.0f, -4.0f};
float s = 3.14f;
vec2 r = vec2_add_scalar(v, s);
EXPECT_EQ (7.14f, r.x);
EXPECT_EQ (-0.86f, r.y);
}
当运行测试时,这是我得到的:
[ RUN ] vector2_test.add_scalar
vec2_test.cpp: Failure
Expected: 7.14
To be equal to: r.x
Which is: 7.14
我不明白测试失败的原因,希望能帮助找出导致测试失败的原因。
不要比较浮点数是否相等,使用区间。阅读浮点编程指南。这是一个开始:http://lec.inf.ethz.ch/ifmp/2014/ex_class_materials/week05/Floating_Point_Guidelines%20(EN).pdf
正如您可能在 googletest-AdvancedGuide 中看到的,建议使用 ASSERT_FLOAT_EQ
/ASSERT_DOUBLE_EQ
...
原因 - 请阅读此 SO post:Floating point inaccuracy examples
我最近开始使用 googletest 来设置一些单元测试和 运行 到我不明白的情况。测试失败,但一切看起来都会通过。
我有一个类似这样的小结构:
struct vec2 { float x, y; }
一个函数:
vec2 vec2_add_scalar (vec2 v, float scalar) {
return {v.x + scalar, v.y + scalar};
}
和测试:
TEST (math_test, add_scalar) {
vec2 v {4.0f, -4.0f};
float s = 3.14f;
vec2 r = vec2_add_scalar(v, s);
EXPECT_EQ (7.14f, r.x);
EXPECT_EQ (-0.86f, r.y);
}
当运行测试时,这是我得到的:
[ RUN ] vector2_test.add_scalar
vec2_test.cpp: Failure
Expected: 7.14
To be equal to: r.x
Which is: 7.14
我不明白测试失败的原因,希望能帮助找出导致测试失败的原因。
不要比较浮点数是否相等,使用区间。阅读浮点编程指南。这是一个开始:http://lec.inf.ethz.ch/ifmp/2014/ex_class_materials/week05/Floating_Point_Guidelines%20(EN).pdf
正如您可能在 googletest-AdvancedGuide 中看到的,建议使用 ASSERT_FLOAT_EQ
/ASSERT_DOUBLE_EQ
...
原因 - 请阅读此 SO post:Floating point inaccuracy examples