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 <map>
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm>
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h"
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass MapTest : public CPPUNIT_NS::TestCase
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE(MapTest);
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(map1);
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(mmap1);
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(mmap2);
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(iterators);
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(equal_range);
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(allocator_with_state);
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_USE_CONTAINERS_EXTENSION)
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_IGNORE;
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(template_methods);
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE_END();
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected:
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void map1();
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void mmap1();
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void mmap2();
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void iterators();
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void equal_range();
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void allocator_with_state();
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void template_methods();
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(MapTest);
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MapTest::map1()
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef map<char, int, less<char> > maptype;
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  maptype m;
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Store mappings between roman numerals and decimals.
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m['l'] = 50;
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m['x'] = 20; // Deliberate mistake.
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m['v'] = 5;
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m['i'] = 1;
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//  cout << "m['x'] = " << m['x'] << endl;
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( m['x']== 20 );
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m['x'] = 10; // Correct mistake.
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( m['x']== 10 );
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( m['z']== 0 );
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //cout << "m['z'] = " << m['z'] << endl; // Note default value is added.
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( m.count('z') == 1 );
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //cout << "m.count('z') = " << m.count('z') << endl;
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair<maptype::iterator, bool> p = m.insert(pair<const char, int>('c', 100));
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( p.second );
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( p.first != m.end() );
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*p.first).first == 'c' );
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*p.first).second == 100 );
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  p = m.insert(pair<const char, int>('c', 100));
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !p.second ); // already existing pair
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( p.first != m.end() );
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*p.first).first == 'c' );
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*p.first).second == 100 );
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MapTest::mmap1()
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef multimap<char, int, less<char> > mmap;
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap m;
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(m.count('X')==0);
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m.insert(pair<const char, int>('X', 10)); // Standard way.
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(m.count('X')==1);
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m.insert(pair<const char, int>('X', 20)); // jbuck: standard way
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(m.count('X')==2);
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  m.insert(pair<const char, int>('Y', 32)); // jbuck: standard way
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap::iterator i = m.find('X'); // Find first match.
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_CONST
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define _STLP_CONST const
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair<_STLP_CONST char, int> p('X', 10);
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(*i == p);
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).first == 'X');
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).second == 10);
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  i++;
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).first == 'X');
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).second == 20);
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  i++;
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).first == 'Y');
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).second == 32);
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  i++;
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(i == m.end());
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  size_t count = m.erase('X');
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(count==2);
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MapTest::mmap2()
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef pair<const int, char> pair_type;
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p1(3, 'c');
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p2(6, 'f');
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p3(1, 'a');
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p4(2, 'b');
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p5(3, 'x');
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p6(6, 'f');
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef multimap<int, char, less<int> > mmap;
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type array [] = {
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p1,
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p2,
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p3,
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p4,
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p5,
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p6
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap m(array + 0, array + 6);
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap::iterator i;
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  i = m.lower_bound(3);
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).first==3);
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).second=='c');
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  i = m.upper_bound(3);
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).first==6);
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((*i).second=='f');
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MapTest::iterators()
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef map<int, char, less<int> > int_map;
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int_map imap;
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int_map::iterator ite(imap.begin());
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int_map::const_iterator cite(imap.begin());
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ite == cite );
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(ite != cite) );
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cite == ite );
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(cite != ite) );
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef multimap<int, char, less<int> > mmap;
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef mmap::value_type pair_type;
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p1(3, 'c');
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p2(6, 'f');
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p3(1, 'a');
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p4(2, 'b');
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p5(3, 'x');
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type p6(6, 'f');
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  pair_type array [] = {
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p1,
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p2,
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p3,
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p4,
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p5,
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    p6
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap m(array+0, array + 6);
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    mmap::iterator ite(m.begin());
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    mmap::const_iterator cite(m.begin());
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //test compare between const_iterator and iterator
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ite == cite );
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(ite != cite) );
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cite == ite );
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(cite != ite) );
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if 0
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /*
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * A check that map and multimap iterators are NOT comparable
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * the following code should generate a compile time error
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   */
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int_map::iterator mite(imap.begin());
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int_map::const_iterator mcite(imap.begin());
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    mmap::iterator mmite(m.begin());
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    mmap::const_iterator mmcite(m.begin());
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(mite == mmite) );
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(mcite == mmcite) );
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mite != mmite );
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mcite != mmcite );
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(mite == mmcite) );
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !(mite == mmcite) );
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mite != mmcite );
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mite != mmcite );
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap::reverse_iterator ri = m.rbegin();
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( ri != m.rend() );
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( ri == m.rbegin() );
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*ri).first == 6 );
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*ri++).second == 'f' );
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*ri).first == 6 );
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*ri).second == 'f' );
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap const& cm = m;
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mmap::const_reverse_iterator rci = cm.rbegin();
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( rci != cm.rend() );
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*rci).first == 6 );
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*rci++).second == 'f' );
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*rci).first == 6 );
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( (*rci).second == 'f' );
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MapTest::equal_range()
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef map<char, int, less<char> > maptype;
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    maptype m;
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    m['x'] = 10;
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    pair<maptype::iterator, maptype::iterator> ret;
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ret = m.equal_range('x');
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ret.first != ret.second );
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (*(ret.first)).first == 'x' );
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( (*(ret.first)).second == 10 );
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ++(ret.first) == ret.second );
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      maptype m;
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      maptype::iterator i = m.lower_bound( 'x' );
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( i == m.end() );
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      i = m.upper_bound( 'x' );
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( i == m.end() );
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      pair<maptype::iterator, maptype::iterator> ret;
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ret = m.equal_range('x');
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( ret.first == ret.second );
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( ret.first == m.end() );
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      const maptype m;
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      pair<maptype::const_iterator, maptype::const_iterator> ret;
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ret = m.equal_range('x');
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( ret.first == ret.second );
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( ret.first == m.end() );
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MapTest::allocator_with_state()
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char buf1[1024];
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  StackAllocator<pair<const int, int> > stack1(buf1, buf1 + sizeof(buf1));
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char buf2[1024];
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  StackAllocator<pair<const int, int> > stack2(buf2, buf2 + sizeof(buf2));
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef map<int, int, less<int>, StackAllocator<pair<const int, int> > > MapInt;
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    less<int> intLess;
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    MapInt mint1(intLess, stack1);
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int i;
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    for (i = 0; i < 5; ++i)
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      mint1.insert(MapInt::value_type(i, i));
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    MapInt mint1Cpy(mint1);
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    MapInt mint2(intLess, stack2);
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    for (; i < 10; ++i)
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      mint2.insert(MapInt::value_type(i, i));
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    MapInt mint2Cpy(mint2);
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    mint1.swap(mint2);
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mint1.get_allocator().swaped() );
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mint2.get_allocator().swaped() );
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mint1 == mint2Cpy );
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mint2 == mint1Cpy );
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mint1.get_allocator() == stack2 );
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( mint2.get_allocator() == stack1 );
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( stack1.ok() );
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( stack2.ok() );
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct Key
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  Key() : m_data(0) {}
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit Key(int data) : m_data(data) {}
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int m_data;
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct KeyCmp
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator () (Key lhs, Key rhs) const
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { return lhs.m_data < rhs.m_data; }
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator () (Key lhs, int rhs) const
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { return lhs.m_data < rhs; }
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator () (int lhs, Key rhs) const
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { return lhs < rhs.m_data; }
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct KeyCmpPtr
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator () (Key const volatile *lhs, Key const volatile *rhs) const
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { return (*lhs).m_data < (*rhs).m_data; }
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator () (Key const volatile *lhs, int rhs) const
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { return (*lhs).m_data < rhs; }
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator () (int lhs, Key const volatile *rhs) const
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { return lhs < (*rhs).m_data; }
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid MapTest::template_methods()
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && defined (_STLP_USE_CONTAINERS_EXTENSION)
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef map<Key, int, KeyCmp> Container;
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef Container::value_type value;
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container cont;
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(1), 1));
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(2), 2));
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(3), 3));
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(4), 4));
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(Key(1)) == 1 );
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(1) == 1 );
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(5) == 0 );
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.find(2) != cont.end() );
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container const& ccont = cont;
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.end(), ccont.end()) );
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef map<Key*, int, KeyCmpPtr> Container;
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef Container::value_type value;
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container cont;
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Key key1(1), key2(2), key3(3), key4(4);
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key1, 1));
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key2, 2));
370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key3, 3));
371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key4, 4));
372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(1) == 1 );
374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(5) == 0 );
375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.find(2) != cont.end() );
377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );
378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container const& ccont = cont;
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );
383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );
384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );
385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.begin(), ccont.end()) );
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef multimap<Key, int, KeyCmp> Container;
389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef Container::value_type value;
390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container cont;
391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(1), 1));
392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(2), 2));
393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(3), 3));
394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(Key(4), 4));
395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(Key(1)) == 1 );
397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(1) == 1 );
398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(5) == 0 );
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.find(2) != cont.end() );
401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );
402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );
403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container const& ccont = cont;
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.end(), ccont.end()) );
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef multimap<Key const volatile*, int, KeyCmpPtr> Container;
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef Container::value_type value;
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container cont;
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Key key1(1), key2(2), key3(3), key4(4);
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key1, 1));
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key2, 2));
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key3, 3));
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cont.insert(value(&key4, 4));
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(1) == 1 );
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.count(5) == 0 );
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.find(2) != cont.end() );
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.lower_bound(2) != cont.end() );
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.upper_bound(2) != cont.end() );
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( cont.equal_range(2) != make_pair(cont.begin(), cont.end()) );
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    Container const& ccont = cont;
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.find(2) != ccont.end() );
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.lower_bound(2) != ccont.end() );
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.upper_bound(2) != ccont.end() );
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ccont.equal_range(2) != make_pair(ccont.begin(), ccont.end()) );
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || \
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (__DMC__)
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Simple compilation test: Check that nested types like iterator
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * can be access even if type used to instanciate container is not
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * yet completely defined.
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass IncompleteClass
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  map<IncompleteClass, IncompleteClass> instances;
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef map<IncompleteClass, IncompleteClass>::iterator it;
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  multimap<IncompleteClass, IncompleteClass> minstances;
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  typedef multimap<IncompleteClass, IncompleteClass>::iterator mit;
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
455