如何在Catch框架中使用浮点容差?

R. *_*des 27 c++ unit-testing catch-unit-test

我正在使用Catch测试框架.

介绍性博客文章中,作者提到了以下功能:

  • 以易于使用的方式支持浮点公差

我找不到任何关于如何做到这一点的文档.怎么在Catch完成?

R. *_*des 32

这很简单.有一个叫做的类Approx让你以一种非常易读的方式进行测试:

#include <limits>
TEST_CASE("demo/approx", "Approx demo") {
    double a = 1.0;
    double b = a + std::numeric_limits<double>::epsilon();
    REQUIRE_FALSE(b == a);
    REQUIRE(b == Approx(a));
}
Run Code Online (Sandbox Code Playgroud)

公差可以通过使用成员函数来改变epsilon()scale()所述的Approx物体,像这样:Approx(a).epsilon(e).

  • 如果你打算投票解释原因.对我来说这很好看. (5认同)

mar*_*cin 14

公差自2011年4月起可定制.Approx有两个成员函数:epsilon()scale().例如:

REQUIRE(a == Approx(b).epsilon(my_eps));
Run Code Online (Sandbox Code Playgroud)

公差为ε×(scale + max(| a |,| b |)),其中scale默认为1,因此这将通过:

REQUIRE((2+2) == Approx(5).epsilon(0.17));
Run Code Online (Sandbox Code Playgroud)