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