c ++ 11 — Проверка того, что два std :: vectors равны, с использованием среды модульного тестирования CATCH C ++

Я новичок в использовании CATCH, и мне интересно, как можно было бы проверить, два ли std::vectors равны.

Моя очень наивная попытка заключается в следующем:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"#include <vector>

TEST_CASE( "are vectors equal", "vectors")
{
std::vector<int> vec_1 = {1,2,3};
std::vector<int> vec_2 = {1,2,3};

REQUIRE (vec_1.size() == vec_2.size());

for (int i = 0; i < vec_1.size(); ++i)
REQUIRE (vec_1[i] == vec_2[i]);
}

Есть лучший способ сделать это? Что-то вроде магии REQUIRE_VECTOR_EQUAL?

Кроме того, мое решение выше, проходит, если один массив содержал удваивается {1.0, 2.0, 3.0}; Хорошо, если из-за этого два вектора не считаются равными.

10

Решение

Ты можешь использовать оператор ==:

REQUIRE(vec_1 == vec_2)

Круто то, что Catch выдает фантастический результат при неудачном утверждении, а не просто проход / неудачу:

../test/Array_Vector_Test.cpp:90: FAILED:
CHECK( x == y )
with expansion:
{ "foo", "bar" }
==
{ "foo", "quux", "baz" }
11

Другие решения