在 Google 测试框架中,我们可以使用断言两个双精度数相等:
ASSERT_DOUBLE_EQ(val1, val2);
而不是
ASSERT_EQ(val1, val2);
避免精度问题。为了比较向量的元素,Google 模拟框架有一个很好的宏,称为
ElementsAre
,这是一个示例:
std::vector<double> vec{0.1,0.2};
ASSERT_THAT(vec, ElementsAre(0.1, 0.2));
有没有办法使用类似于
ASSERT_DOUBLE_EQ
的匹配器来避免使用ASSERT_THAT
时出现精度相关问题?
Google模拟有许多用于双精度比较的浮点匹配器,包括
DoubleEq
和DoubleNear
。您可以在数组匹配器中使用它们,如下所示:
ASSERT_THAT(vec, ElementsAre(DoubleEq(0.1), DoubleEq(0.2)));