2014-08-31 10 views
10

Jestem nowym użytkownikiem CATCH i zastanawiam się, w jaki sposób można by przetestować, czy dwa std::vectors są sobie równe.Sprawdź, czy dwa std :: wektory są równe przy użyciu CATCH C++ w ramach testu jednostkowego

My bardzo naiwna próba jest taka:

#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]); 
} 

Czy istnieje lepszy sposób to zrobić? Niektóre rzeczy jak magia REQUIRE_VECTOR_EQUAL?

Również powyższe rozwiązanie przechodzi, jeśli jedna z tablic zawiera podwójne: {1.0, 2.0, 3.0}; Jest w porządku, jeśli dwa wektory nie są uważane za równe z tego powodu.

+2

Można jeszcze zrobić ' REQUIRE (vec_1 == vec_2); ' – Jarod42

+0

@ Jarod42 Tak, dziękuję, to działa. Jedyną rzeczą jest, że jeśli 'vec_1' i' vec_2' są różnych typów danych, pojawia się błąd, zamiast, powiedz 'false'. – Akavall

+0

@Akavall To nie będzie kompilacji, jeśli są one z różnych typów danych. Tak powinien działać mocno napisany język. –

Odpowiedz

11

Można użyć operator==:

REQUIRE(vec_1 == vec_2) 

Fajne jest to, że Złap produkuje fantastyczne wyjście gdy twierdzenie nie powiedzie się, a nie tylko proste Pass/Fail:

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