2014-08-31 2 views
10

Я новичок в использовании CATCH, и мне интересно, как можно было бы проверить, равны ли два std::vectors.Испытайте, что два std :: вектора равны с помощью модульной тестовой среды CATCH C++

Моя очень наивная попытка это:

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

+2

Вы можете еще сделать ' REQUIRE (vec_1 == vec_2); ' – Jarod42

+0

@ Jarod42 Да, спасибо, это действительно работает. Единственное, что если 'vec_1' и' vec_2' имеют разные типы данных, я получаю ошибку, а не, скажем, 'false'. – Akavall

+0

@Akavall Это не скомпилируется, если они имеют разные типы данных. Вот как должен работать строго типизированный язык. –

ответ

11

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

REQUIRE(vec_1 == vec_2) 

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

../test/Array_Vector_Test.cpp:90: FAILED: 
    CHECK(x == y) 
with expansion: 
    { "foo", "bar" } 
    == 
    { "foo", "quux", "baz" } 
Смежные вопросы