gpt4 book ai didi

c++ - 使用 Catch 比较 double vector

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:05 24 4
gpt4 key购买 nike

我正在使用 Catch单元测试框架,我想比较一个 double vector 。这other answer建议使用 Approx 比较浮点/ double 值,但这不适用于它们的 vector 。有什么方便的方法可以做到这一点吗?

编辑:一个例子

使用以下代码:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"

TEST_CASE("Compare Vectors", "[vector]") {
std::vector<int> vec1 = {0, 1, 2, 3};
std::vector<int> vec2 = {0, 1, 2, 4};
REQUIRE(vec1 == vec2);
}

测试失败,报告如下:

-------------------------------------------------------------------------------
Compare Vectors
-------------------------------------------------------------------------------
test/UnitTests/test_Example/example.cc:4
...............................................................................

test/UnitTests/test_Example/example.cc:7: FAILED:
REQUIRE( vec1 == vec2 )
with expansion:
{ 0, 1, 2, 3 } == { 0, 1, 2, 4 }

===============================================================================
test cases: 1 | 1 failed
assertions: 1 | 1 failed

但如果我按如下方式更改代码,我希望测试通过,但显然没有。

#define CATCH_CONFIG_MAIN
#include "catch.hpp"

TEST_CASE("Compare Vectors", "[vector]") {
std::vector<double> vec1 = {0, 1, 2, 3};
std::vector<double> vec2 = {0, 1, 2, 3.000001};
REQUIRE(vec1 == vec2);
}

我可以遍历元素并逐一比较它们,但如果出现差异,将更难确定错误的来源。

最佳答案

虽然已经过去 4 年了,但自 Catch 2.7.2 ,用户现在可以使用 Approx 比较 vector :

REQUIRE_THAT(vec1, Catch::Approx(vec2).margin(0.0001));

这将比较误差在±0.0001 以内的两个 vector 。更多详情 here .

关于c++ - 使用 Catch 比较 double vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41863505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com