mismatch_test.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <numeric> 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <vector> 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <algorithm> 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "iota.h" 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "cppunit/cppunit_proxy.h" 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesusing namespace std; 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#endif 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// TestCase class 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass MismatchTest : public CPPUNIT_NS::TestCase 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_TEST_SUITE(MismatchTest); 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_TEST(mismatch0); 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines CPPUNIT_TEST(mismatch1); 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines CPPUNIT_TEST(mismatch2); 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_TEST_SUITE_END(); 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesprotected: 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void mismatch0(); 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void mismatch1(); 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void mismatch2(); 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 29651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesCPPUNIT_TEST_SUITE_REGISTRATION(MismatchTest); 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// tests implementation 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesbool str_equal(const char* a_, const char* b_) 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return strcmp(a_, b_) == 0 ? 1 : 0; 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid MismatchTest::mismatch0() 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int n1[5] = { 1, 2, 3, 4, 5 }; 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int n2[5] = { 1, 2, 3, 4, 5 }; 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int n3[5] = { 1, 2, 3, 2, 1 }; 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines pair <int*, int*> result = mismatch((int*)n1, (int*)n1 + 5, (int*)n2); 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT(result.first ==(n1 + 5) && result.second ==(n2 + 5)); 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines result = mismatch((int*)n1, (int*)n1 + 5, (int*)n3); 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT(!(result.first ==(n1 + 5) && result.second ==(n3 + 5))); 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT((result.first - n1)==3); 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid MismatchTest::mismatch1() 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines typedef vector<int> IntVec; 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines IntVec v1(10); 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines __iota(v1.begin(), v1.end(), 0); 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines IntVec v2(v1); 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines pair <IntVec::iterator, IntVec::iterator> result = mismatch(v1.begin(), v1.end(), v2.begin()); 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT(result.first == v1.end() && result.second == v2.end()); 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines v2[v2.size()/2] = 42; 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines result = mismatch(v1.begin(), v1.end(), v2.begin()); 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT(!(result.first == v1.end() && result.second == v2.end())); 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT((result.first - v1.begin())==5); 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid MismatchTest::mismatch2() 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines{ 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const unsigned size = 5; 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char const* n1[size] = { "Brett", "Graham", "Jack", "Mike", "Todd" }; 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char const* n2[size]; 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines copy(n1, n1 + 5, (char const**)n2); 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines pair <char const**, char const**> result = mismatch((char const**)n1, (char const**)n1 + size, (char const**)n2, str_equal); 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT(result.first == n1 + size && result.second == n2 + size); 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines n2[2] = "QED"; 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines result = mismatch((char const**)n1, (char const**)n1 + size, (char const**)n2, str_equal); 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT(!(result.first == n2 + size && result.second == n2 + size)); 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines CPPUNIT_ASSERT((result.first - n1)==2); 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines