如何在 C++ 的 google 测试中匹配双向量的元素?

How to match the element of a double vector in google test in C++?

在 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 mock有多个floating point matchers用于双精度比较,包括DoubleEqDoubleNear。您可以像这样在数组匹配器中使用它们:

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