slist_test.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//Has to be first for StackAllocator swap overload to be taken 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//into account (at least using GCC 4.0.1) 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "stack_allocator.h" 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm> 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <slist> 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_USE_NO_IOSTREAMS) 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <sstream> 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <iterator> 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <functional> 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) && defined(__GNUC__) 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace __gnu_cxx; 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass SlistTest : public CPPUNIT_NS::TestCase 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(SlistTest); 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS) || defined (_STLP_USE_NO_IOSTREAMS) 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_IGNORE; 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(slist1); 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS) 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_STOP_IGNORE; 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(erase); 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(insert); 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(splice); 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(allocator_with_state); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void slist1(); 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void erase(); 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void insert(); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void splice(); 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void allocator_with_state(); 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(SlistTest); 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SlistTest::slist1() 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_USE_NO_IOSTREAMS) && !defined (_STLP_NO_EXTENSIONS) 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottoriginal: xlxtss 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottreversed: sstxlx 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottremoved: sstl 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottuniqued: stl 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsorted: lst 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott*/ 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char array [] = { 'x', 'l', 'x', 't', 's', 's' }; 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ostringstream os; 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ostream_iterator<char> o(os,""); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<char> str(array+0, array + 6); 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<char>::iterator i; 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //Check const_iterator construction from iterator 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<char>::const_iterator ci(i); 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<char>::const_iterator ci2(ci); 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// cout << "reversed: "; 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott str.reverse(); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for(i = str.begin(); i != str.end(); i++) 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott os << *i; 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stringbuf* buff=os.rdbuf(); 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott string result=buff->str(); 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(!strcmp(result.c_str(),"sstxlx")); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //cout << "removed: "; 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott str.remove('x'); 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ostringstream os2; 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for(i = str.begin(); i != str.end(); i++) 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott os2 << *i; 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buff=os2.rdbuf(); 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott result=buff->str(); 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(!strcmp(result.c_str(),"sstl")); 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //cout << "uniqued: "; 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott str.unique(); 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ostringstream os3; 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for(i = str.begin(); i != str.end(); i++) 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott os3 << *i; 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buff=os3.rdbuf(); 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott result=buff->str(); 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(!strcmp(result.c_str(),"stl")); 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //cout << "sorted: "; 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott str.sort(); 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ostringstream os4; 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for(i = str.begin(); i != str.end(); i++) 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott os4 << *i; 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buff = os4.rdbuf(); 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott result = buff->str(); 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT(!strcmp(result.c_str(),"lst")); 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //A small compilation time check to be activated from time to time: 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if 0 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<char>::iterator sl_char_ite; 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator sl_int_ite; 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl_char_ite != sl_int_ite ); 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SlistTest::erase() 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int array[] = { 0, 1, 2, 3, 4 }; 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> sl(array, array + 5); 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator slit; 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl.erase(sl.begin()); 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 1); 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ++slit++; ++slit; 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl.erase(sl.begin(), slit); 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 3 ); 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl.assign(array, array + 5); 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl.erase_after(sl.begin()); 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 2 ); 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl.begin(); ++slit; ++slit; 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl.erase_after(sl.begin(), slit); 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 3 ); 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl.erase_after(sl.before_begin()); 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl.front() == 3 ); 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SlistTest::insert() 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int array[] = { 0, 1, 2, 3, 4 }; 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //insert 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> sl; 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl.insert(sl.begin(), 5); 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl.front() == 5 ); 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl.size() == 1 ); 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //debug mode check: 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //sl.insert(sl.before_begin(), array, array + 5); 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl.insert(sl.begin(), array, array + 5); 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl.size() == 6 ); 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int i; 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator slit(sl.begin()); 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (i = 0; slit != sl.end(); ++slit, ++i) { 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == i ); 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //insert_after 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> sl; 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //debug check: 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //sl.insert_after(sl.begin(), 5); 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl.insert_after(sl.before_begin(), 5); 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl.front() == 5 ); 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl.size() == 1 ); 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl.insert_after(sl.before_begin(), array, array + 5); 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl.size() == 6 ); 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int i; 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator slit(sl.begin()); 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (i = 0; slit != sl.end(); ++slit, ++i) { 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == i ); 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SlistTest::splice() 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int array[] = { 0, 1, 2, 3, 4 }; 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> sl1(array, array + 5); 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> sl2(array, array + 5); 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator slit; 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //a no op: 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice(sl1.begin(), sl1, sl1.begin()); 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl1 == sl2 ); 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); ++slit; 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //a no op: 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice(slit, sl1, sl1.begin()); 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl1 == sl2 ); 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice(sl1.end(), sl1, sl1.begin()); 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 1 ); 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 2 ); 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 3 ); 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 4 ); 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 0 ); 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice(sl1.begin(), sl1, slit); 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl1 == sl2 ); 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice(sl1.begin(), sl2); 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t i; 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (i = 0, slit = sl1.begin(); slit != sl1.end(); ++slit, ++i) { 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (i == 5) i = 0; 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == array[i] ); 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott advance(slit, 5); 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 0 ); 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl2.splice(sl2.begin(), sl1, sl1.begin(), slit); 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl1 == sl2 ); 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); ++slit; 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice(sl1.begin(), sl1, slit, sl1.end()); 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 1 ); 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 2 ); 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 3 ); 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 4 ); 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 0 ); 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a no op 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl2.splice(sl2.end(), sl2, sl2.begin(), sl2.end()); 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (i = 0, slit = sl2.begin(); slit != sl2.end(); ++slit, ++i) { 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( i < 5 ); 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == array[i] ); 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl2.begin(); 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott advance(slit, 3); 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl2.splice(sl2.end(), sl2, sl2.begin(), slit); 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl2.begin(); 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 3 ); 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 4 ); 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 0 ); 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 1 ); 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 2 ); 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice_after 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> sl1(array, array + 5); 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int> sl2(array, array + 5); 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<int>::iterator slit; 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //a no op: 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice_after(sl1.begin(), sl1, sl1.begin()); 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl1 == sl2 ); 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice_after(sl1.before_begin(), sl1, sl1.begin()); 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 1 ); 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 0 ); 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 2 ); 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 3 ); 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 4 ); 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice_after(sl1.before_begin(), sl1, sl1.begin()); 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl1 == sl2 ); 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice_after(sl1.before_begin(), sl2); 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t i; 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (i = 0, slit = sl1.begin(); slit != sl1.end(); ++slit, ++i) { 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (i == 5) i = 0; 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == array[i] ); 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott advance(slit, 4); 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 4 ); 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl2.splice_after(sl2.before_begin(), sl1, sl1.before_begin(), slit); 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( sl1 == sl2 ); 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl1.splice_after(sl1.before_begin(), sl1, sl1.begin(), sl1.previous(sl1.end())); 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl1.begin(); 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 1 ); 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 2 ); 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 3 ); 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 4 ); 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 0 ); 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // a no op 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl2.splice_after(sl2.before_begin(), sl2, sl2.before_begin(), sl2.previous(sl2.end())); 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (i = 0, slit = sl2.begin(); slit != sl2.end(); ++slit, ++i) { 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( i < 5 ); 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == array[i] ); 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl2.begin(); 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott advance(slit, 2); 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott sl2.splice_after(sl2.previous(sl2.end()), sl2, sl2.before_begin(), slit); 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slit = sl2.begin(); 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 3 ); 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 4 ); 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 0 ); 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *(slit++) == 1 ); 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 2 ); 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SlistTest::allocator_with_state() 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf1[1024]; 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1)); 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf2[1024]; 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2)); 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef slist<int, StackAllocator<int> > SlistInt; 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1Cpy(slint1); 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2Cpy(slint2); 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.swap(slint2); 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.get_allocator().swaped() ); 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.get_allocator().swaped() ); 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1 == slint2Cpy ); 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2 == slint1Cpy ); 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.get_allocator() == stack2 ); 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.get_allocator() == stack1 ); 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(stack1); 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1Cpy(slint1); 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2Cpy(slint2); 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.swap(slint2); 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.get_allocator().swaped() ); 371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.get_allocator().swaped() ); 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1 == slint2Cpy ); 374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2 == slint1Cpy ); 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.get_allocator() == stack2 ); 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.get_allocator() == stack1 ); 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1Cpy(slint1); 385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(stack2); 387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2Cpy(slint2); 388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.swap(slint2); 390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.get_allocator().swaped() ); 392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.get_allocator().swaped() ); 393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1 == slint2Cpy ); 395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2 == slint1Cpy ); 396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.get_allocator() == stack2 ); 397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.get_allocator() == stack1 ); 398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice(iterator, slist) 404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.splice(slint1.begin(), slint2); 409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 20 ); 410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.empty() ); 411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice(iterator, slist, iterator) 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.splice(slint1.begin(), slint2, slint2.begin()); 422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 11 ); 423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.size() == 9 ); 424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice(iterator, slist, iterator, iterator) 430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt::iterator lit(slint2.begin()); 435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott advance(lit, 5); 436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.splice(slint1.begin(), slint2, slint2.begin(), lit); 437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 15 ); 438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.size() == 5 ); 439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice_after(iterator, slist) 445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.splice_after(slint1.before_begin(), slint2); 450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 20 ); 451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.empty() ); 452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice_after(iterator, slist, iterator) 458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.splice_after(slint1.before_begin(), slint2, slint2.before_begin()); 463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 11 ); 464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.size() == 9 ); 465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //splice_after(iterator, slist, iterator, iterator) 471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt::iterator lit(slint2.begin()); 476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott advance(lit, 4); 477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.splice_after(slint1.before_begin(), slint2, slint2.before_begin(), lit); 478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 15 ); 479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.size() == 5 ); 480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott stack1.reset(); stack2.reset(); 484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //merge(slist) 486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slintref(stack2); 491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slintref.insert_after(slintref.before_begin(), 10, 1); 492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slintref.insert_after(slintref.before_begin(), 10, 0); 493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.merge(slint2); 495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 20 ); 496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1 == slintref ); 497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.empty() ); 498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //merge(slist, predicate) 503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if (!defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)) && \ 504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (!defined (_MSC_VER) || (_MSC_VER >= 1300)) 505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(10, 0, stack1); 507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint2(10, 1, stack2); 508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slintref(stack2); 510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slintref.insert_after(slintref.before_begin(), 10, 0); 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slintref.insert_after(slintref.before_begin(), 10, 1); 512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.merge(slint2, greater<int>()); 514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.size() == 20 ); 515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1 == slintref ); 516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint2.empty() ); 517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack1.ok() ); 519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( stack2.ok() ); 520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //sort 522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //This is rather a compile time test. 524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //We check that sort implementation is correct when list is instanciated 525e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //with an allocator that do not have a default constructor. 526e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt slint1(stack1); 527e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.push_front(1); 528e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.insert_after(slint1.before_begin(), 10, 0); 529e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott greater<int> gt; 530e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.sort(gt); 531e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( slint1.front() == 1 ); 532e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slint1.sort(); 533e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SlistInt::iterator slit(slint1.begin()); 534e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott advance(slit, 10); 535e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_ASSERT( *slit == 1 ); 536e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 537e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 540e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) && \ 542e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (!defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)) 543e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (__DMC__) 544e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Simple compilation test: Check that nested types like iterator 545e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * can be access even if type used to instanciate container is not 546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * yet completely defined. 547e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 548e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass IncompleteClass 549e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott slist<IncompleteClass> instances; 551e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef slist<IncompleteClass>::iterator it; 552e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 553e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 554e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 555