Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparison of arrays in google test?

I am looking to compare two arrays in google test. In UnitTest++ this is done through CHECK_ARRAY_EQUAL. How do you do it in google test?

like image 904
Tobias Furuholm Avatar asked Sep 22 '09 15:09

Tobias Furuholm


2 Answers

I would really suggest looking at Google C++ Mocking Framework. Even if you don't want to mock anything, it allows you to write rather complicated assertions with ease.

For example

//checks that vector v is {5, 10, 15} ASSERT_THAT(v, ElementsAre(5, 10, 15));  //checks that map m only have elements 1 => 10, 2 => 20 ASSERT_THAT(m, ElementsAre(Pair(1, 10), Pair(2, 20)));  //checks that in vector v all the elements are greater than 10 and less than 20 ASSERT_THAT(v, Each(AllOf(Gt(10), Lt(20))));  //checks that vector v consist of  //   5, number greater than 10, anything. ASSERT_THAT(v, ElementsAre(5, Gt(10), _)); 

There's plenty of matchers for every possible situations, and you can combine them to achieve almost anything.

Did I tell you that ElementsAre needs only iterators and size() method on a class to work? So it not only works with any container from STL but with custom containers also.

Google Mock claims to be almost as portable as Google Test and frankly I don't see why you wouldn't use it. It is just purely awesome.

like image 164
vava Avatar answered Oct 22 '22 14:10

vava


If you just need to check if the arrays are equal, then the brute force also works :

int arr1[10]; int arr2[10];  // initialize arr1 and arr2  EXPECT_TRUE( 0 == std::memcmp( arr1, arr2, sizeof( arr1 ) ) ); 

However, this doesn't tell you which element differs.

like image 43
BЈовић Avatar answered Oct 22 '22 12:10

BЈовић