是否可以在 googletest 的 Predicate Formatter 中使用 ASSERT_NEAR
Is it possible to use ASSERT_NEAR in Predicate Formatter in googletest
我们如何使用 ASSERT_NEAR 或 ASSERT_DOUBLE_EQ 浮动比较而不使用谓词格式化程序函数中的 googletest 内部内容?
template<typename A, typename B>
::testing::AssertionResult assertNearArrays(const char * a_expr,
const char * b_expr,
const A & a,
const B & b,
PREC absError = 1e-6){
test each value of a with b
using ASSERT_NEAR(a[i],b[i], 1e-6)
}
我认为这行不通,我需要编写自己的比较并返回 AssertionResult
或 AssertionFailure
。
但是依靠googletest而不是我自己的浮点数比较会很好...?
只需几行C++代码就可以写出这样的测试:
template<typename T>
bool is_near(T val1, T val2, T abs_error) {
const T diff = std::abs(val1 - val2);
return diff <= abs_error:
}
您真的需要完全按照 gtest ASSERT_NEAR 的要求去做吗?您可能想提供有关失败的其他信息,而不是 ASSERT_NEAR 会做的事情,例如:
if (!is_near(a[i], b[i], absError))
return AssertionFailure()
<< "The difference between a[i] and b[i]"
<< " is " << (a[i] - b[i]) << ", which exceeds absError, where\n"
<< "a[i] evaluates to " << a[i] << ",\n"
<< "b[i] evaluates to " << b[i]<< ", and\n"
<< "absError evaluates to " << absError << ", and\n"
<< "i evaluates to " << i << ".";
和return AssertionSuccess();在 assertNearArrays
的末尾
我们如何使用 ASSERT_NEAR 或 ASSERT_DOUBLE_EQ 浮动比较而不使用谓词格式化程序函数中的 googletest 内部内容?
template<typename A, typename B>
::testing::AssertionResult assertNearArrays(const char * a_expr,
const char * b_expr,
const A & a,
const B & b,
PREC absError = 1e-6){
test each value of a with b
using ASSERT_NEAR(a[i],b[i], 1e-6)
}
我认为这行不通,我需要编写自己的比较并返回 AssertionResult
或 AssertionFailure
。
但是依靠googletest而不是我自己的浮点数比较会很好...?
只需几行C++代码就可以写出这样的测试:
template<typename T>
bool is_near(T val1, T val2, T abs_error) {
const T diff = std::abs(val1 - val2);
return diff <= abs_error:
}
您真的需要完全按照 gtest ASSERT_NEAR 的要求去做吗?您可能想提供有关失败的其他信息,而不是 ASSERT_NEAR 会做的事情,例如:
if (!is_near(a[i], b[i], absError))
return AssertionFailure()
<< "The difference between a[i] and b[i]"
<< " is " << (a[i] - b[i]) << ", which exceeds absError, where\n"
<< "a[i] evaluates to " << a[i] << ",\n"
<< "b[i] evaluates to " << b[i]<< ", and\n"
<< "absError evaluates to " << absError << ", and\n"
<< "i evaluates to " << i << ".";
和return AssertionSuccess();在 assertNearArrays
的末尾