【发布时间】:2017-01-25 23:21:08
【问题描述】:
我正在使用Catch 单元测试框架,我想比较一个双精度向量。这个other answer 建议使用 Approx 来比较浮点/双精度值,但这不适用于它们的向量。有什么方便的方法可以实现吗?
编辑:一个例子
使用以下代码:
#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);
}
我可以遍历元素并逐一比较它们,但如果出现差异,将更难以确定错误的来源。
【问题讨论】:
-
遍历向量并逐元素比较怎么样?另见this question。
-
@vso 我认为问题不在于如何遍历向量,而是如何在这样做的同时比较浮点数。
标签: c++ unit-testing catch-unit-test