在谷歌测试框架中断言两个 double 相等我们可以使用:

ASSERT_DOUBLE_EQ(val1, val2);

代替
ASSERT_EQ(val1, val2);

避免精度问题。为了比较 vector 的元素,谷歌模拟框架有一个很好的宏叫做 ElementsAre ,这是一个例子:
std::vector<double> vec{0.1,0.2};
ASSERT_THAT(vec, ElementsAre(0.1, 0.2));

在使用 ASSERT_DOUBLE_EQ 时,有没有办法使用类似于 ASSERT_THAT 的匹配器来避免精度相关问题?

最佳答案

Google mock 有许多用于 double 比较的 floating point matchers ,包括 DoubleEqDoubleNear 。您可以在这样的数组匹配器中使用它们:

ASSERT_THAT(vec, ElementsAre(DoubleEq(0.1), DoubleEq(0.2)));

10-07 12:16