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