Проверьте, что два std::vectors равны с использованием схемы CATCH С++ unit test

Я новичок в использовании 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}; Это хорошо, если из-за этого два вектора не считаются равными.

Ответ 1

Вы можете использовать operator ==:

REQUIRE(vec_1 == vec_2)

Приятно то, что Catch дает фантастический результат, когда утверждение терпит неудачу, а не просто провал/провал:

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