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