c ++和gtest,需要帮助理解为什么看似简单的测试失败

时间:2016-05-31 07:29:27

标签: c++ tdd googletest clang++

我最近开始使用 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

我不明白测试失败的原因,并且非常感谢帮助找出可能导致测试失败的原因。

2 个答案:

答案 0 :(得分:2)

正如您在googletest-AdvancedGuide中所读到的那样,建议您使用ASSERT_FLOAT_EQ / ASSERT_DOUBLE_EQ ...

出于合理原因 - 请阅读此SO帖子:Floating point inaccuracy examples

答案 1 :(得分:1)

不要将浮点数与相等性进行比较,请使用间隔。阅读有关浮点编程的指南。这是一个开始:http://lec.inf.ethz.ch/ifmp/2014/ex_class_materials/week05/Floating_Point_Guidelines%20(EN).pdf