2014-08-31 9 views
10

È un nuovo utilizzo di CATCH e mi chiedo come si possa verificare se due std::vectors sono uguali.Verificare che due std :: i vettori siano uguali utilizzando il framework di test dell'unità CATCH C++

Il mio tentativo molto ingenuo è questo:

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

Esiste un modo migliore per fare questo? Qualcosa come la magia REQUIRE_VECTOR_EQUAL?

Inoltre, la mia soluzione di cui sopra, sta passando se una matrice contenesse i doppi {1.0, 2.0, 3.0}; Va bene se due vettori non sono considerati uguali a causa di questo.

+2

Si può ancora fare ' RICHIESTA (vec_1 == vec_2); ' – Jarod42

+0

@ Jarod42 Sì, grazie, funziona. L'unica cosa è che se 'vec_1' e' vec_2' sono di diversi tipi di dati ottengo un errore, invece di dire 'false'. – Akavall

+0

@Akavall Non verrà compilato se si tratta di tipi di dati diversi. Ecco come dovrebbe funzionare un linguaggio fortemente tipizzato. –

risposta

11

È possibile utilizzare operator==:

REQUIRE(vec_1 == vec_2) 

La cosa interessante è che cattura produce un output fantastico quando l'asserzione fallisce, e non solo un semplice pass/fail:

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