提升单元测试:BOOST_CHECK_CLOSE returns 1.#INF%
Boost unittest: BOOST_CHECK_CLOSE returns 1.#INF%
我正在使用 Boost 单元测试框架来相互比较双打。结果符合预期,但我猜 BOOST_CHECK_CLOSE 没有正确识别它们。代码实质如下:
BOOST_AUTO_TEST_CASE(FooBarTest)
{
double foo = 2.2500000047015632e-006;
double bar = 0.0;
double tolerance = 90.0;
BOOST_CHECK_CLOSE(foo, bar, tolerance);
}
失败并显示以下消息:
error in [...]: difference{1.#INF%} between foo{2.2500000047015632e-006} and bar{0} exceeds 90%
我在 VC100(Visual Studio 10 编译器)中使用 Boost 1.55。我正在编译 Win32 Release。
这是我应该期待的结果吗?我想这些值彼此足够接近并且应该 return 成功。 Boost 内部除以 0.0 吗?
那是因为 bar
为零。 BOOST_CHECK_CLOSE 检查这两个值是否为 'close',也就是说,在您的情况下,彼此的值为 90%。为此,您使用除法,并且不能除以 0。
或者,正如 this answer 如此简洁地解释的那样 - 零不接近任何东西。
您可以使用 BOOST_CHECK_SMALL 检查接近于零的程度。
有关更多背景信息,请参阅:Boost UTF documentation, article on floating-point comparison algorithms.
我正在使用 Boost 单元测试框架来相互比较双打。结果符合预期,但我猜 BOOST_CHECK_CLOSE 没有正确识别它们。代码实质如下:
BOOST_AUTO_TEST_CASE(FooBarTest)
{
double foo = 2.2500000047015632e-006;
double bar = 0.0;
double tolerance = 90.0;
BOOST_CHECK_CLOSE(foo, bar, tolerance);
}
失败并显示以下消息:
error in [...]: difference{1.#INF%} between foo{2.2500000047015632e-006} and bar{0} exceeds 90%
我在 VC100(Visual Studio 10 编译器)中使用 Boost 1.55。我正在编译 Win32 Release。
这是我应该期待的结果吗?我想这些值彼此足够接近并且应该 return 成功。 Boost 内部除以 0.0 吗?
那是因为 bar
为零。 BOOST_CHECK_CLOSE 检查这两个值是否为 'close',也就是说,在您的情况下,彼此的值为 90%。为此,您使用除法,并且不能除以 0。
或者,正如 this answer 如此简洁地解释的那样 - 零不接近任何东西。
您可以使用 BOOST_CHECK_SMALL 检查接近于零的程度。 有关更多背景信息,请参阅:Boost UTF documentation, article on floating-point comparison algorithms.