1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <list> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <slist> 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <deque> 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector> 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <functional> 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <map> 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string> 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass AlgTest : public CPPUNIT_NS::TestCase 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(AlgTest); 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(min_max); 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(count_test); 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(sort_test); 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(search_n_test); 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(find_first_of_test); 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(find_first_of_nsc_test); 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void min_max(); 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void count_test(); 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void sort_test(); 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void search_n_test(); 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void find_first_of_test(); 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void find_first_of_nsc_test(); 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(AlgTest); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AlgTest::min_max() 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int i = min(4, 7); 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( i == 4 ); 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char c = max('a', 'z'); 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( c == 'z' ); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott c = min('a', 'z', greater<char>()); 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( c == 'z' ); 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i = max(4, 7, greater<int>()); 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( i == 4 ); 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AlgTest::count_test() 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int i[] = { 1, 4, 2, 8, 2, 2 }; 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int n = count(i, i + 6, 2); 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(n==3); 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS) 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott n = 0; 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott count(i, i + 6, 2, n); 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(n==3); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> i; 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i.push_back(1); 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i.push_back(4); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i.push_back(2); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i.push_back(8); 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i.push_back(2); 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i.push_back(2); 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int n = count(i.begin(), i.end(), 2); 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(n==3); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS) 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott n = 0; 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott count(i.begin(), i.end(), 2, n); 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(n==3); 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AlgTest::sort_test() 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> years; 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(1962); 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(1992); 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(2001); 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(1999); 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sort(years.begin(), years.end()); 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[0]==1962); 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[1]==1992); 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[2]==1999); 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[3]==2001); 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott deque<int> years; 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(1962); 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(1992); 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(2001); 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott years.push_back(1999); 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sort(years.begin(), years.end()); // <-- changed! 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[0]==1962); 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[1]==1992); 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[2]==1999); 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(years[3]==2001); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define ARRAY_SIZE(arr) sizeof(arr) / sizeof(arr[0]) 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AlgTest::search_n_test() 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int ints[] = {0, 1, 2, 3, 3, 4, 4, 4, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5}; 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //search_n 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Forward iterator 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> slint(ints, ints + ARRAY_SIZE(ints)); 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator slit = search_n(slint.begin(), slint.end(), 2, 2); 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slit != slint.end() ); 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 2 ); 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 2 ); 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Bidirectionnal iterator 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott list<int> lint(ints, ints + ARRAY_SIZE(ints)); 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott list<int>::iterator lit = search_n(lint.begin(), lint.end(), 3, 3); 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( lit != lint.end() ); 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(lit++) == 3 ); 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(lit++) == 3 ); 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *lit == 3 ); 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Random access iterator 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott deque<int> dint(ints, ints + ARRAY_SIZE(ints)); 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott deque<int>::iterator dit = search_n(dint.begin(), dint.end(), 4, 4); 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( dit != dint.end() ); 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(dit++) == 4 ); 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(dit++) == 4 ); 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(dit++) == 4 ); 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *dit == 4 ); 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //search_n with predicate 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Forward iterator 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> slint(ints, ints + ARRAY_SIZE(ints)); 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator slit = search_n(slint.begin(), slint.end(), 2, 1, greater<int>()); 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slit != slint.end() ); 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) > 1 ); 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit > 2 ); 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Bidirectionnal iterator 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott list<int> lint(ints, ints + ARRAY_SIZE(ints)); 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott list<int>::iterator lit = search_n(lint.begin(), lint.end(), 3, 2, greater<int>()); 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( lit != lint.end() ); 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(lit++) > 2 ); 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(lit++) > 2 ); 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *lit > 2 ); 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Random access iterator 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott deque<int> dint(ints, ints + ARRAY_SIZE(ints)); 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott deque<int>::iterator dit = search_n(dint.begin(), dint.end(), 4, 3, greater<int>()); 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( dit != dint.end() ); 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(dit++) > 3 ); 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(dit++) > 3 ); 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(dit++) > 3 ); 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *dit > 3 ); 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // test for bug reported by Jim Xochellis 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int array[] = {0, 0, 1, 0, 1, 1}; 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int* array_end = array + sizeof(array) / sizeof(*array); 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(search_n(array, array_end, 3, 1) == array_end); 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // test for bug with counter == 1, reported by Timmie Smith 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int array[] = {0, 1, 2, 3, 4, 5}; 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int* array_end = array + sizeof(array) / sizeof(*array); 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( search_n(array, array_end, 1, 1, equal_to<int>() ) == &array[1] ); 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct MyIntComparable { 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott MyIntComparable(int val) : _val(val) {} 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator == (const MyIntComparable& other) const 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return _val == other._val; } 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int _val; 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AlgTest::find_first_of_test() 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> intsl; 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intsl.push_front(1); 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intsl.push_front(2); 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> intv; 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(0); 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1); 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(2); 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(3); 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int>::iterator first; 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), intsl.begin(), intsl.end()); 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == 1 ); 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> intv; 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(3); 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(2); 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1); 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(0); 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int>::iterator first; 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), intsl.begin(), intsl.end()); 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == 2 ); 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott list<int> intl; 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intl.push_front(1); 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intl.push_front(2); 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> intv; 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(0); 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1); 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(2); 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(3); 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int>::iterator first; 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), intl.begin(), intl.end()); 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == 1 ); 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> intv; 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(3); 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(2); 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1); 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(0); 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int>::iterator first; 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), intl.begin(), intl.end()); 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == 2 ); 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char chars[] = {1, 2}; 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> intv; 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(0); 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1); 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(2); 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(3); 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int>::iterator first; 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars)); 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == 1 ); 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott unsigned char chars[] = {1, 2, 255}; 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> intv; 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(-10); 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1029); 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(255); 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(4); 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int>::iterator first; 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars)); 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == 255 ); 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott signed char chars[] = {93, 2, -101, 13}; 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int> intv; 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(-10); 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1029); 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(-2035); 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(-101); 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(4); 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<int>::iterator first; 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars)); 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == -101 ); 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char chars[] = {1, 2}; 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<MyIntComparable> intv; 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(0); 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(1); 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(2); 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott intv.push_back(3); 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<MyIntComparable>::iterator first; 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott first = find_first_of(intv.begin(), intv.end(), chars, chars + sizeof(chars)); 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( first != intv.end() ); 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *first == 1 ); 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef pair<int, string> Pair; 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct ValueFinder : 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public binary_function<const Pair&, const string&, bool> 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator () ( const Pair &p, const string& value ) const 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return p.second == value; } 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AlgTest::find_first_of_nsc_test() 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Non-symmetrical comparator 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott map<int, string> m; 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott vector<string> values; 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott m[1] = "one"; 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott m[4] = "four"; 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott m[10] = "ten"; 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott m[20] = "twenty"; 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott values.push_back( "four" ); 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott values.push_back( "ten" ); 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott map<int, string>::iterator i = find_first_of(m.begin(), m.end(), values.begin(), values.end(), ValueFinder()); 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( i != m.end() ); 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( i->first == 4 || i->first == 10 ); 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( i->second == "four" || i->second == "ten" ); 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 365