在谷歌测试框架中断言两个 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 ,包括 DoubleEq
和 DoubleNear
。您可以在这样的数组匹配器中使用它们:
ASSERT_THAT(vec, ElementsAre(DoubleEq(0.1), DoubleEq(0.2)));