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 <vector>
6a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <algorithm>
7a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
8a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# include <stdexcept>
9a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
10a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
11a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "cppunit/cppunit_proxy.h"
12a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
13a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
14a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std;
15a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
16a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
17a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
18a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// TestCase class
19a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
20a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass VectorTest : public CPPUNIT_NS::TestCase
21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST_SUITE(VectorTest);
23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(vec_test_1);
24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(vec_test_2);
25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(vec_test_3);
26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(vec_test_4);
27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(vec_test_5);
28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(vec_test_6);
29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(vec_test_7);
30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(capacity);
31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(at);
32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(pointer);
33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(auto_ref);
34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(allocator_with_state);
35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(iterators);
36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && defined (_STLP_NO_MEMBER_TEMPLATES)
37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_IGNORE;
38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(optimizations_check);
40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(assign_check);
41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_STOP_IGNORE;
42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST(ebo);
43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_TEST_SUITE_END();
44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprotected:
46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void vec_test_1();
47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void vec_test_2();
48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void vec_test_3();
49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void vec_test_4();
50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void vec_test_5();
51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void vec_test_6();
52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void vec_test_7();
53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void capacity();
54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void at();
55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void pointer();
56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void auto_ref();
57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void allocator_with_state();
58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void iterators();
59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void optimizations_check();
60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void assign_check();
61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  void ebo();
62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(VectorTest);
65a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
66a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
67a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// tests implementation
68a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//
69a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::vec_test_1()
70a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
71a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> v1; // Empty vector of integers.
72a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
73a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.empty() == true );
74a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.size() == 0 );
75a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
76a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // CPPUNIT_ASSERT( v1.max_size() == INT_MAX / sizeof(int) );
77a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // cout << "max_size = " << v1.max_size() << endl;
78a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v1.push_back(42); // Add an integer to the vector.
79a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
80a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.size() == 1 );
81a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
82a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1[0] == 42 );
83a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
84a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
85a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    vector<vector<int> > vect(10);
86a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    vector<vector<int> >::iterator it(vect.begin()), end(vect.end());
87a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    for (; it != end; ++it) {
88a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( (*it).empty() );
89a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( (*it).size() == 0 );
90a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( (*it).capacity() == 0 );
91a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( (*it).begin() == (*it).end() );
92a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    }
93a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
94a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
95a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
96a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::vec_test_2()
97a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
98a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<double> v1; // Empty vector of doubles.
99a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v1.push_back(32.1);
100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v1.push_back(40.5);
101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<double> v2; // Another empty vector of doubles.
102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v2.push_back(3.56);
103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.size() == 2 );
105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1[0] == 32.1 );
106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1[1] == 40.5 );
107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2.size() == 1 );
109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2[0] == 3.56 );
110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  size_t v1Cap = v1.capacity();
111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  size_t v2Cap = v2.capacity();
112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v1.swap(v2); // Swap the vector's contents.
114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.size() == 1 );
116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.capacity() == v2Cap );
117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1[0] == 3.56 );
118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2.size() == 2 );
120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2.capacity() == v1Cap );
121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2[0] == 32.1 );
122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2[1] == 40.5 );
123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v2 = v1; // Assign one vector to another.
125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2.size() == 1 );
127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2[0] == 3.56 );
128a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
129a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
130a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::vec_test_3()
131a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
132a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef vector<char> vec_type;
133a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
134a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vec_type v1; // Empty vector of characters.
135a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v1.push_back('h');
136a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v1.push_back('i');
137a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
138a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.size() == 2 );
139a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1[0] == 'h' );
140a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1[1] == 'i' );
141a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
142a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vec_type v2(v1.begin(), v1.end());
143a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v2[1] = 'o'; // Replace second character.
144a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
145a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2.size() == 2 );
146a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2[0] == 'h' );
147a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2[1] == 'o' );
148a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
149a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( (v1 == v2) == false );
150a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
151a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( (v1 < v2) == true );
152a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
153a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
154a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::vec_test_4()
155a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
156a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> v(4);
157a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
158a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v[0] = 1;
159a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v[1] = 4;
160a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v[2] = 9;
161a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v[3] = 16;
162a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
163a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.front() == 1 );
164a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.back() == 16 );
165a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
166a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.push_back(25);
167a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
168a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.back() == 25 );
169a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 5 );
170a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
171a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.pop_back();
172a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
173a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.back() == 16 );
174a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 4 );
175a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
176a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
177a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::vec_test_5()
178a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
179a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int array [] = { 1, 4, 9, 16 };
180a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
181a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> v(array, array + 4);
182a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
183a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 4 );
184a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
185a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 1 );
186a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 4 );
187a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[2] == 9 );
188a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[3] == 16 );
189a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
190a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
191a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::vec_test_6()
192a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
193a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int array [] = { 1, 4, 9, 16, 25, 36 };
194a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
195a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> v(array, array + 6);
196a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int>::iterator vit;
197a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
198a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 6 );
199a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 1 );
200a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 4 );
201a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[2] == 9 );
202a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[3] == 16 );
203a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[4] == 25 );
204a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[5] == 36 );
205a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
206a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vit = v.erase( v.begin() ); // Erase first element.
207a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *vit == 4 );
208a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
209a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 5 );
210a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 4 );
211a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 9 );
212a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[2] == 16 );
213a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[3] == 25 );
214a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[4] == 36 );
215a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
216a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vit = v.erase(v.end() - 1); // Erase last element.
217a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( vit == v.end() );
218a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
219a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 4 );
220a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 4 );
221a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 9 );
222a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[2] == 16 );
223a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[3] == 25 );
224a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
225a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
226a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.erase(v.begin() + 1, v.end() - 1); // Erase all but first and last.
227a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
228a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 2 );
229a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 4 );
230a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 25 );
231a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
232a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
233a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
234a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::vec_test_7()
235a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
236a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int array1 [] = { 1, 4, 25 };
237a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int array2 [] = { 9, 16 };
238a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
239a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> v(array1, array1 + 3);
240a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int>::iterator vit;
241a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vit = v.insert(v.begin(), 0); // Insert before first element.
242a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *vit == 0 );
243a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
244a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vit = v.insert(v.end(), 36);  // Insert after last element.
245a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( *vit == 36 );
246a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
247a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 5 );
248a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 0 );
249a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 1 );
250a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[2] == 4 );
251a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[3] == 25 );
252a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[4] == 36 );
253a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
254a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // Insert contents of array2 before fourth element.
255a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.insert(v.begin() + 3, array2, array2 + 2);
256a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
257a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 7 );
258a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
259a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 0 );
260a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 1 );
261a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[2] == 4 );
262a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[3] == 9 );
263a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[4] == 16 );
264a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[5] == 25 );
265a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[6] == 36 );
266a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
267a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.clear();
268a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.empty() );
269a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
270a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.insert(v.begin(), 5, 10);
271a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.size() == 5 );
272a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[0] == 10 );
273a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[1] == 10 );
274a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[2] == 10 );
275a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[3] == 10 );
276a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v[4] == 10 );
277a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
278a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  /*
279a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
280a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    vector<float> vf(2.0f, 3.0f);
281a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( vf.size() == 2 );
282a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( vf.front() == 3.0f );
283a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( vf.back() == 3.0f );
284a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
285a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  */
286a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
287a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
288a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct TestStruct
289a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
290a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  unsigned int a[3];
291a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
292a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
293a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::capacity()
294a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
295a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
296a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    vector<int> v;
297a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
298a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( v.capacity() == 0 );
299a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    v.push_back(42);
300a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( v.capacity() >= 1 );
301a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    v.reserve(5000);
302a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( v.capacity() >= 5000 );
303a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
304a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
305a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
306a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //Test that used to generate an assertion when using __debug_alloc.
307a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    vector<TestStruct> va;
308a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    va.reserve(1);
309a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    va.reserve(2);
310a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
311a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
312a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
313a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::at() {
314a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> v;
315a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> const& cv = v;
316a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
317a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.push_back(10);
318a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v.at(0) == 10 );
319a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.at(0) = 20;
320a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( cv.at(0) == 20 );
321a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
322a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
323a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  try {
324a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    v.at(1) = 20;
325a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_FAIL;
326a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
327a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  catch (out_of_range const&) {
328a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
329a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  catch (...) {
330a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_FAIL;
331a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
332a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
333a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
334a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
335a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::pointer()
336a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
337a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int *> v1;
338a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int *> v2 = v1;
339a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int *> v3;
340a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
341a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v3.insert( v3.end(), v1.begin(), v1.end() );
342a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
343a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
344a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::auto_ref()
345a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
346a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> ref;
347a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  for (int i = 0; i < 5; ++i) {
348a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    ref.push_back(i);
349a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
350a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
351a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<vector<int> > v_v_int(1, ref);
352a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v_v_int.push_back(v_v_int[0]);
353a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v_v_int.push_back(ref);
354a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v_v_int.push_back(v_v_int[0]);
355a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v_v_int.push_back(v_v_int[0]);
356a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v_v_int.push_back(ref);
357a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
358a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<vector<int> >::iterator vvit(v_v_int.begin()), vvitEnd(v_v_int.end());
359a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  for (; vvit != vvitEnd; ++vvit) {
360a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( *vvit == ref );
361a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
362a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
363a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  /*
364a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner   * Forbidden by the Standard:
365a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v_v_int.insert(v_v_int.end(), v_v_int.begin(), v_v_int.end());
366a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  for (vvit = v_v_int.begin(), vvitEnd = v_v_int.end();
367a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner       vvit != vvitEnd; ++vvit) {
368a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( *vvit == ref );
369a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
370a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner   */
371a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
372a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
373a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::allocator_with_state()
374a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
375a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    char buf1[1024];
376a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1));
377a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
378a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    char buf2[1024];
379a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2));
380a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
381a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    {
382a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      typedef vector<int, StackAllocator<int> > VectorInt;
383a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      VectorInt vint1(10, 0, stack1);
384a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      VectorInt vint1Cpy(vint1);
385a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
386a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      VectorInt vint2(10, 1, stack2);
387a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      VectorInt vint2Cpy(vint2);
388a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
389a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      vint1.swap(vint2);
390a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
391a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( vint1.get_allocator().swaped() );
392a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( vint2.get_allocator().swaped() );
393a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
394a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( vint1 == vint2Cpy );
395a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( vint2 == vint1Cpy );
396a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( vint1.get_allocator() == stack2 );
397a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      CPPUNIT_ASSERT( vint2.get_allocator() == stack1 );
398a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    }
399a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( stack1.ok() );
400a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( stack2.ok() );
401a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
402a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
403a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct Point {
404a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int x, y;
405a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
406a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
407a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct PointEx : public Point {
408a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  PointEx() : builtFromBase(false) {}
409a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  PointEx(const Point&) : builtFromBase(true) {}
410a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
411a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool builtFromBase;
412a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
413a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
414a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT)
415a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_USE_NAMESPACES)
416a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnernamespace std {
417a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
418a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
419a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __type_traits<PointEx> {
420a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type has_trivial_default_constructor;
421a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type has_trivial_copy_constructor;
422a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type has_trivial_assignment_operator;
423a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type has_trivial_destructor;
424a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type is_POD_type;
425a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
426a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_USE_NAMESPACES)
427a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
428a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
429a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
430a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
431a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//This test check that vector implementation do not over optimize
432a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//operation as PointEx copy constructor is trivial
433a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::optimizations_check()
434a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
435a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)
436a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<Point> v1(1);
437a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v1.size() == 1 );
438a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
439a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<PointEx> v2(v1.begin(), v1.end());
440a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2.size() == 1 );
441a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( v2[0].builtFromBase == true );
442a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
443a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
444a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
445a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::assign_check()
446a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
447a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)
448a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> v(3,1);
449a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  int array[] = { 1, 2, 3, 4, 5 };
450a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
451a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  v.assign( array, array + 5 );
452a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_CHECK( v[4] == 5 );
453a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_CHECK( v[0] == 1 );
454a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_CHECK( v[1] == 2 );
455a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
456a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
457a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
458a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::iterators()
459a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
460a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> vint(10, 0);
461a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<int> const& crvint = vint;
462a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
463a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( vint.begin() == vint.begin() );
464a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( crvint.begin() == vint.begin() );
465a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( vint.begin() == crvint.begin() );
466a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( crvint.begin() == crvint.begin() );
467a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
468a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( vint.begin() != vint.end() );
469a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( crvint.begin() != vint.end() );
470a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( vint.begin() != crvint.end() );
471a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( crvint.begin() != crvint.end() );
472a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
473a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( vint.rbegin() == vint.rbegin() );
474a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // Not Standard:
475a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //CPPUNIT_ASSERT( vint.rbegin() == crvint.rbegin() );
476a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //CPPUNIT_ASSERT( crvint.rbegin() == vint.rbegin() );
477a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( crvint.rbegin() == crvint.rbegin() );
478a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
479a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( vint.rbegin() != vint.rend() );
480a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // Not Standard:
481a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //CPPUNIT_ASSERT( vint.rbegin() != crvint.rend() );
482a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //CPPUNIT_ASSERT( crvint.rbegin() != vint.rend() );
483a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( crvint.rbegin() != crvint.rend() );
484a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
485a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
486a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
487a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || \
488a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    !defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
489a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner/* Simple compilation test: Check that nested types like iterator
490a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * can be access even if type used to instanciate container is not
491a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * yet completely defined.
492a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */
493a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass IncompleteClass
494a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
495a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  vector<IncompleteClass> instances;
496a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef vector<IncompleteClass>::iterator it;
497a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
498a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
499a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
500a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT)
501a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  define NOTHROW _STLP_NOTHROW
502a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#else
503a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  define NOTHROW throw()
504a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
505a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
506a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner/* This allocator implementation purpose is simply to break some
507a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * internal STLport mecanism specific to the STLport own allocator
508a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * implementation. */
509a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnertemplate <class _Tp>
510a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct NotSTLportAllocator : public allocator<_Tp> {
511a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATE_CLASSES)
512a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  template <class _Tp1> struct rebind {
513a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef NotSTLportAllocator<_Tp1> other;
514a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
515a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
516a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  NotSTLportAllocator() NOTHROW {}
517a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
518a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  template <class _Tp1> NotSTLportAllocator(const NotSTLportAllocator<_Tp1>&) NOTHROW {}
519a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
520a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  NotSTLportAllocator(const NotSTLportAllocator<_Tp>&) NOTHROW {}
521a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  ~NotSTLportAllocator() NOTHROW {}
522a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
523a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
524a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner/* This test check a potential issue with empty base class
525a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * optimization. Some compilers (VC6) do not implement it
526a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * correctly resulting ina wrong behavior. */
527a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid VectorTest::ebo()
528a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
529a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // We use heap memory as test failure can corrupt vector internal
530a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // representation making executable crash on vector destructor invocation.
531a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // We prefer a simple memory leak, internal corruption should be reveal
532a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  // by size or capacity checks.
533a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef vector<int, NotSTLportAllocator<int> > V;
534a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  V *pv1 = new V(1, 1);
535a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  V *pv2 = new V(10, 2);
536a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
537a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  size_t v1Capacity = pv1->capacity();
538a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  size_t v2Capacity = pv2->capacity();
539a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
540a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  pv1->swap(*pv2);
541a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
542a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pv1->size() == 10 );
543a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pv1->capacity() == v2Capacity );
544a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( (*pv1)[5] == 2 );
545a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
546a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pv2->size() == 1 );
547a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( pv2->capacity() == v1Capacity );
548a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  CPPUNIT_ASSERT( (*pv2)[0] == 1 );
549a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
550a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  delete pv2;
551a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  delete pv1;
552a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
553a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
554