1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <numeric> 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "iota.h" 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass SearchTest : public CPPUNIT_NS::TestCase 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(SearchTest); 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(search0); 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(search1); 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(search2); 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void search0(); 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void search1(); 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void search2(); 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static bool str_equal(const char* a_, const char* b_) 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return strcmp(a_, b_) == 0 ? 1 : 0; 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(SearchTest); 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SearchTest::search0() 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int v1[6] = { 1, 1, 2, 3, 5, 8 }; 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int v2[6] = { 0, 1, 2, 3, 4, 5 }; 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int v3[2] = { 3, 4 }; 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int* location; 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott location = search((int*)v1, (int*)v1 + 6, (int*)v3, (int*)v3 + 2); 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location == v1 + 6); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott location = search((int*)v2, (int*)v2 + 6, (int*)v3, (int*)v3 + 2); 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location != v2 + 6); 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location - v2 == 3); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SearchTest::search1() 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef vector <int> IntVec; 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott IntVec v1(10); 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __iota(v1.begin(), v1.end(), 0); 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott IntVec v2(3); 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __iota(v2.begin(), v2.end(), 50); 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott IntVec::iterator location; 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott location = search(v1.begin(), v1.end(), v2.begin(), v2.end()); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location == v1.end()); 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __iota(v2.begin(), v2.end(), 4); 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott location = search(v1.begin(), v1.end(), v2.begin(), v2.end()); 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location != v1.end()); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location - v1.begin() == 4); 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SearchTest::search2() 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char const* grades[] = { "A", "B", "C", "D", "F" }; 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char const* letters[] = { "Q", "E", "D" }; 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const unsigned gradeCount = sizeof(grades) / sizeof(grades[0]); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const unsigned letterCount = sizeof(letters) / sizeof(letters[0]); 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char const** location = search((char const**)grades, (char const**)grades + gradeCount, (char const**)letters, (char const**)letters + letterCount, str_equal); 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location == grades + gradeCount); 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott copy((char const**)grades + 1, (char const**)grades + 1 + letterCount, (char const**)letters); 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott location = search((char const**)grades, (char const**)grades + gradeCount, (char const**)letters, (char const**)letters + letterCount, str_equal); 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location != grades + gradeCount); 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(location - grades == 1); 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 90