1a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//Has to be first for StackAllocator swap overload to be taken
2a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//into account (at least using GCC 4.0.1)
3a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "stack_allocator.h"
4a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
5a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <set>
6a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <algorithm>
7a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
8a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "cppunit/cppunit_proxy.h"
9a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
10a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
11a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std;
12a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
13a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
14a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
15a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// TestCase class
16a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
17a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass SetTest : public CPPUNIT_NS::TestCase
18a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
19a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST_SUITE(SetTest);
20a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(set1);
21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(set2);
22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(erase);
23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(insert);
24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(find);
25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(bounds);
26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(specialized_less);
27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(implementation_check);
28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(allocator_with_state);
29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(reverse_iterator_test);
30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_USE_CONTAINERS_EXTENSION)
31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_IGNORE;
32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(template_methods);
34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST_SUITE_END();
35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprotected:
37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void set1();
38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void set2();
39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void erase();
40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void insert();
41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void find();
42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void bounds();
43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void specialized_less();
44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void implementation_check();
45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void allocator_with_state();
46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void reverse_iterator_test();
47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void template_methods();
48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(SetTest);
51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// tests implementation
55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::set1()
57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int, less<int> > s;
59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (s.count(42) == 0);
60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(42);
61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (s.count(42) == 1);
62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(42);
63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (s.count(42) == 1);
64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  size_t count = s.erase(42);
65a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (count == 1);
66a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
67a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
68a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::set2()
69a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
70a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef set<int, less<int> > int_set;
71a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int_set s;
72a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pair<int_set::iterator, bool> p = s.insert(42);
73a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (p.second == true);
74a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  p = s.insert(42);
75a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (p.second == false);
76a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
77a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int array1 [] = { 1, 3, 6, 7 };
78a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(array1, array1 + 4);
79a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 5);
80a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
81a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int_set s2;
82a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s2.swap(s);
83a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 5);
84a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0);
85a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
86a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int_set s3;
87a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s3.swap(s);
88a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s3.swap(s2);
89a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0);
90a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 0);
91a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT (distance(s3.begin(), s3.end()) == 5);
92a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
93a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
94a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::erase()
95a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
96a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int, less<int> > s;
97a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(1);
98a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.erase(s.begin());
99a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( s.empty() );
100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  size_t nb = s.erase(1);
102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT(nb == 0);
103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::insert()
106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int> s;
108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int>::iterator i = s.insert( s.end(), 0 );
109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *i == 0 );
110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::find()
113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int> s;
115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( s.find(0) == s.end() );
117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int> const& crs = s;
119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( crs.find(0) == crs.end() );
121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::bounds()
124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int array1 [] = { 1, 3, 6, 7 };
126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int> s(array1, array1 + sizeof(array1) / sizeof(array1[0]));
127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int> const& crs = s;
128a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
129a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int>::iterator sit;
130a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int>::const_iterator scit;
131a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pair<set<int>::iterator, set<int>::iterator> pit;
132a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pair<set<int>::const_iterator, set<int>::const_iterator> pcit;
133a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
134a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //Check iterator on mutable set
135a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  sit = s.lower_bound(2);
136a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( sit != s.end() );
137a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *sit == 3 );
138a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
139a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  sit = s.upper_bound(5);
140a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( sit != s.end() );
141a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *sit == 6 );
142a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
143a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pit = s.equal_range(6);
144a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pit.first != pit.second );
145a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pit.first != s.end() );
146a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pit.first == 6 );
147a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pit.second != s.end() );
148a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pit.second == 7 );
149a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
150a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pit = s.equal_range(4);
151a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pit.first == pit.second );
152a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pit.first != s.end() );
153a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pit.first == 6 );
154a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pit.second != s.end() );
155a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pit.second == 6 );
156a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
157a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //Check const_iterator on mutable set
158a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  scit = s.lower_bound(2);
159a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( scit != s.end() );
160a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *scit == 3 );
161a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
162a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  scit = s.upper_bound(5);
163a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( scit != s.end() );
164a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *scit == 6 );
165a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
166a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#ifdef _STLP_MEMBER_TEMPLATES
167a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pcit = s.equal_range(6);
168a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pcit.first != pcit.second );
169a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pcit.first != s.end() );
170a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pcit.first == 6 );
171a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pcit.second != s.end() );
172a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pcit.second == 7 );
173a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
174a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
175a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //Check const_iterator on const set
176a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  scit = crs.lower_bound(2);
177a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( scit != crs.end() );
178a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *scit == 3 );
179a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
180a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  scit = crs.upper_bound(5);
181a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( scit != crs.end() );
182a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *scit == 6 );
183a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
184a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pcit = crs.equal_range(6);
185a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pcit.first != pcit.second );
186a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pcit.first != crs.end() );
187a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pcit.first == 6 );
188a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pcit.second != crs.end() );
189a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *pcit.second == 7 );
190a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
191a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
192a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
193a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass SetTestClass {
194a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerpublic:
195a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  SetTestClass (int data) : _data(data)
196a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {}
197a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
198a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int data() const {
199a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    return _data;
200a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
201a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
202a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprivate:
203a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int _data;
204a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
205a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
206a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
207a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnernamespace std {
208a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
209a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT)
210a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
211a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#else
212a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  template <>
213a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
214a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct less<SetTestClass> {
215a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    bool operator () (SetTestClass const& lhs, SetTestClass const& rhs) const {
216a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      return lhs.data() < rhs.data();
217a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    }
218a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
219a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
220a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
221a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
222a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
223a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::specialized_less()
224a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
225a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<SetTestClass> s;
226a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(SetTestClass(1));
227a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(SetTestClass(3));
228a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(SetTestClass(2));
229a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  s.insert(SetTestClass(0));
230a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
231a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<SetTestClass>::iterator sit(s.begin()), sitEnd(s.end());
232a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int i = 0;
233a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  for (; sit != sitEnd; ++sit, ++i) {
234a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sit->data() == i );
235a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
236a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
237a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
238a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::implementation_check()
239a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
240a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int> tree;
241a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  tree.insert(1);
242a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int>::iterator it = tree.begin();
243a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int const& int_ref = *it++;
244a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( int_ref == 1 );
245a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
246a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( it == tree.end() );
247a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( it != tree.begin() );
248a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
249a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int>::const_iterator cit = tree.begin();
250a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int const& int_cref = *cit++;
251a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( int_cref == 1 );
252a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
253a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
254a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::reverse_iterator_test()
255a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
256a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<int> tree;
257a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  tree.insert(1);
258a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  tree.insert(2);
259a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
260a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
261a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    set<int>::reverse_iterator rit(tree.rbegin());
262a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( *(rit++) == 2 );
263a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( *(rit++) == 1 );
264a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( rit == tree.rend() );
265a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
266a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
267a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
268a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    set<int> const& ctree = tree;
269a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    set<int>::const_reverse_iterator rit(ctree.rbegin());
270a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( *(rit++) == 2 );
271a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( *(rit++) == 1 );
272a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( rit == ctree.rend() );
273a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
274a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
275a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
276a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::allocator_with_state()
277a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
278a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  char buf1[1024];
279a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));
280a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
281a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  char buf2[1024];
282a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));
283a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
284a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int i;
285a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef set<int, less<int>, StackAllocator<int> > SetInt;
286a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  less<int> intLess;
287a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
288a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
289a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint1(intLess, stack1);
290a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    for (i = 0; i < 5; ++i)
291a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      sint1.insert(i);
292a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint1Cpy(sint1);
293a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
294a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint2(intLess, stack2);
295a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    for (; i < 10; ++i)
296a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      sint2.insert(i);
297a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint2Cpy(sint2);
298a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
299a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    sint1.swap(sint2);
300a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
301a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1.get_allocator().swaped() );
302a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2.get_allocator().swaped() );
303a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
304a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1 == sint2Cpy );
305a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2 == sint1Cpy );
306a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );
307a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );
308a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
309a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( stack1.ok() );
310a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( stack2.ok() );
311a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  stack1.reset(); stack2.reset();
312a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
313a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
314a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint1(intLess, stack1);
315a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint1Cpy(sint1);
316a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
317a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint2(intLess, stack2);
318a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    for (i = 0; i < 10; ++i)
319a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      sint2.insert(i);
320a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint2Cpy(sint2);
321a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
322a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    sint1.swap(sint2);
323a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
324a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1.get_allocator().swaped() );
325a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2.get_allocator().swaped() );
326a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
327a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1 == sint2Cpy );
328a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2 == sint1Cpy );
329a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );
330a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );
331a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
332a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( stack1.ok() );
333a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( stack2.ok() );
334a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  stack1.reset(); stack2.reset();
335a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
336a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
337a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint1(intLess, stack1);
338a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    for (i = 0; i < 10; ++i)
339a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      sint1.insert(i);
340a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint1Cpy(sint1);
341a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
342a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint2(intLess, stack2);
343a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    SetInt sint2Cpy(sint2);
344a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
345a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    sint1.swap(sint2);
346a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
347a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1.get_allocator().swaped() );
348a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2.get_allocator().swaped() );
349a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
350a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1 == sint2Cpy );
351a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2 == sint1Cpy );
352a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint1.get_allocator() == stack2 );
353a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( sint2.get_allocator() == stack1 );
354a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
355a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( stack1.ok() );
356a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( stack2.ok() );
357a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  stack1.reset(); stack2.reset();
358a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
359a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
360a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct Key
361a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
362a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  Key() : m_data(0) {}
363a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  explicit Key(int data) : m_data(data) {}
364a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
365a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int m_data;
366a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
367a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
368a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct KeyCmp
369a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
370a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator () (Key lhs, Key rhs) const
371a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  { return lhs.m_data < rhs.m_data; }
372a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
373a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator () (Key lhs, int rhs) const
374a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  { return lhs.m_data < rhs; }
375a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
376a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator () (int lhs, Key rhs) const
377a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  { return lhs < rhs.m_data; }
378a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
379a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
380a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct KeyCmpPtr
381a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
382a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator () (Key const volatile *lhs, Key const volatile *rhs) const
383a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  { return (*lhs).m_data < (*rhs).m_data; }
384a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
385a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator () (Key const volatile *lhs, int rhs) const
386a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  { return (*lhs).m_data < rhs; }
387a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
388a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator () (int lhs, Key const volatile *rhs) const
389a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  { return lhs < (*rhs).m_data; }
390a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
391a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
392a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid SetTest::template_methods()
393a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
394a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && defined (_STLP_USE_CONTAINERS_EXTENSION)
395a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
396a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef set<Key, KeyCmp> KeySet;
397a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet keySet;
398a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(1));
399a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(2));
400a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(3));
401a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(4));
402a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
403a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 );
404a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(1) == 1 );
405a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(5) == 0 );
406a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
407a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
408a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
409a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
410a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
411a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
412a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet const& ckeySet = keySet;
413a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
414a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
415a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
416a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
417a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
418a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
419a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
420a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef set<Key*, KeyCmpPtr> KeySet;
421a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet keySet;
422a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    Key key1(1), key2(2), key3(3), key4(4);
423a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key1);
424a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key2);
425a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key3);
426a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key4);
427a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
428a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(1) == 1 );
429a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(5) == 0 );
430a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
431a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
432a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
433a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
434a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
435a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
436a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet const& ckeySet = keySet;
437a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
438a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
439a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
440a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
441a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
442a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
443a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef multiset<Key, KeyCmp> KeySet;
444a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet keySet;
445a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(1));
446a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(2));
447a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(3));
448a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(Key(4));
449a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
450a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 );
451a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(1) == 1 );
452a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(5) == 0 );
453a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
454a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
455a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
456a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
457a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
458a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
459a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet const& ckeySet = keySet;
460a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
461a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
462a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
463a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
464a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
465a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
466a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
467a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef multiset<Key const volatile*, KeyCmpPtr> KeySet;
468a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet keySet;
469a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    Key key1(1), key2(2), key3(3), key4(4);
470a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key1);
471a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key2);
472a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key3);
473a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    keySet.insert(&key4);
474a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
475a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(1) == 1 );
476a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.count(5) == 0 );
477a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
478a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.find(2) != keySet.end() );
479a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() );
480a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() );
481a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) );
482a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
483a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    KeySet const& ckeySet = keySet;
484a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() );
485a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() );
486a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() );
487a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) );
488a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
489a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
490a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
491a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
492a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || \
493a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
494a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if !defined (__DMC__)
495a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner/* Simple compilation test: Check that nested types like iterator
496a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * can be access even if type used to instanciate container is not
497a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * yet completely defined.
498a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */
499a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass IncompleteClass
500a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
501a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  set<IncompleteClass> instances;
502a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef set<IncompleteClass>::iterator it;
503a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  multiset<IncompleteClass> minstances;
504a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef multiset<IncompleteClass>::iterator mit;
505a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
506a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
507a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
508