2014-08-31 12 views
10

Ich bin neu in der Verwendung von CATCH, und ich frage mich, wie man testen würde, ob zwei std::vectors gleich sind.Testen Sie, dass zwei std :: Vektoren sind gleich mit CATCH C++ Unit-Test-Framework

Mein sehr naiver Versuch ist dies:

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

Gibt es einen besseren Weg, dies zu tun? Etwas wie Magie REQUIRE_VECTOR_EQUAL?

Auch meine obige Lösung wird übergeben, wenn ein Array enthalten verdoppelt {1.0, 2.0, 3.0}; Es ist in Ordnung, wenn zwei Vektoren nicht als gleichwertig betrachtet werden.

+2

Sie können noch tun ' REQUIRE (vec_1 == vec_2); ' – Jarod42

+0

@ Jarod42 Ja, danke, das funktioniert. Die einzige Sache ist, dass, wenn 'vec_1' und' vec_2' unterschiedliche Datentypen haben, ich einen Fehler bekomme, anstatt "false" zu sagen. – Akavall

+0

@Akavall Es wird nicht kompiliert, wenn sie von verschiedenen Datentypen sind. So soll eine stark typisierte Sprache funktionieren. –

Antwort

11

können Sie verwenden operator==:

REQUIRE(vec_1 == vec_2) 

Die kühle Sache ist, dass Fang fantastische Ausgangssignal erzeugt, wenn die Behauptung fehlschlägt, und nicht nur eine einfache Pass/Fail:

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