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 <deque> 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 DequeTest : public CPPUNIT_NS::TestCase 21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE(DequeTest); 23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(deque1); 24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(at); 25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(insert); 26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(erase); 27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(auto_ref); 28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(allocator_with_state); 29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && defined (_STLP_NO_MEMBER_TEMPLATES) 30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_IGNORE; 31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(optimizations_check); 33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprotected: 36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void deque1(); 37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void insert(); 38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void erase(); 39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void at(); 40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void auto_ref(); 41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void allocator_with_state(); 42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void optimizations_check(); 43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(DequeTest); 46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// tests implementation 49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid DequeTest::deque1() 51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int> d; 53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_back(4); 54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_back(9); 55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_back(16); 56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_front(1); 57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[0] == 1 ); 59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[1] == 4 ); 60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[2] == 9 ); 61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[3] == 16 ); 62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.pop_front(); 64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d[2] = 25; 65a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 66a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[0] == 4 ); 67a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[1] == 9 ); 68a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[2] == 25 ); 69a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 70a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Some compile time tests: 71a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int>::iterator dit = d.begin(); 72a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int>::const_iterator cdit(d.begin()); 73a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( (dit - cdit) == 0 ); 74a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( (cdit - dit) == 0 ); 75a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( (dit - dit) == 0 ); 76a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( (cdit - cdit) == 0 ); 77a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(!((dit < cdit) || (dit > cdit) || (dit != cdit) || !(dit <= cdit) || !(dit >= cdit))); 78a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 79a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 80a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid DequeTest::insert() 81a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 82a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int> d; 83a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_back(0); 84a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_back(1); 85a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_back(2); 86a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 3 ); 87a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 88a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int>::iterator dit; 89a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 90a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion before begin: 91a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dit = d.insert(d.begin(), 3); 92a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dit != d.end() ); 93a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( *dit == 3 ); 94a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 4 ); 95a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[0] == 3 ); 96a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 97a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion after begin: 98a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dit = d.insert(d.begin() + 1, 4); 99a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dit != d.end() ); 100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( *dit == 4 ); 101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 5 ); 102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[1] == 4 ); 103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion at end: 105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dit = d.insert(d.end(), 5); 106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dit != d.end() ); 107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( *dit == 5 ); 108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 6 ); 109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[5] == 5 ); 110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion before last element: 112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dit = d.insert(d.end() - 1, 6); 113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dit != d.end() ); 114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( *dit == 6 ); 115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 7 ); 116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[5] == 6 ); 117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion of several elements before begin 119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.insert(d.begin(), 2, 7); 120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 9 ); 121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[0] == 7 ); 122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[1] == 7 ); 123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion of several elements after begin 125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //There is more elements to insert than elements before insertion position 126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.insert(d.begin() + 1, 2, 8); 127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 11 ); 128a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[1] == 8 ); 129a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[2] == 8 ); 130a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 131a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //There is less elements to insert than elements before insertion position 132a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.insert(d.begin() + 3, 2, 9); 133a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 13 ); 134a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[3] == 9 ); 135a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[4] == 9 ); 136a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 137a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion of several elements at end: 138a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.insert(d.end(), 2, 10); 139a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 15 ); 140a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[14] == 10 ); 141a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[13] == 10 ); 142a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 143a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Insertion of several elements before last: 144a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //There is more elements to insert than elements after insertion position 145a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.insert(d.end() - 1, 2, 11); 146a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 17 ); 147a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[15] == 11 ); 148a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[14] == 11 ); 149a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 150a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //There is less elements to insert than elements after insertion position 151a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.insert(d.end() - 3, 2, 12); 152a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.size() == 19 ); 153a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[15] == 12 ); 154a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d[14] == 12 ); 155a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 156a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 157a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid DequeTest::at() { 158a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int> d; 159a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int> const& cd = d; 160a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 161a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.push_back(10); 162a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d.at(0) == 10 ); 163a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.at(0) = 20; 164a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( cd.at(0) == 20 ); 165a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 166a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 167a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (;;) { 168a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner try { 169a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d.at(1) = 20; 170a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(false); 171a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 172a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (out_of_range const&) { 173a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return; 174a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 175a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (...) { 176a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(false); 177a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 178a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 179a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 180a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 181a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 182a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid DequeTest::auto_ref() 183a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 184a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int i; 185a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int> ref; 186a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (i = 0; i < 5; ++i) { 187a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ref.push_back(i); 188a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 189a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 190a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<deque<int> > d_d_int(1, ref); 191a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d_d_int.push_back(d_d_int[0]); 192a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d_d_int.push_back(ref); 193a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d_d_int.push_back(d_d_int[0]); 194a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d_d_int.push_back(d_d_int[0]); 195a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d_d_int.push_back(ref); 196a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 197a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (i = 0; i < 5; ++i) { 198a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d_d_int[i] == ref ); 199a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 200a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 201a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 202a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid DequeTest::allocator_with_state() 203a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 204a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char buf1[1024]; 205a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackAllocator<int> stack1(buf1, buf1 + sizeof(buf1)); 206a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 207a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char buf2[1024]; 208a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackAllocator<int> stack2(buf2, buf2 + sizeof(buf2)); 209a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 210a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 211a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef deque<int, StackAllocator<int> > DequeInt; 212a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner DequeInt dint1(10, 0, stack1); 213a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner DequeInt dint1Cpy(dint1); 214a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 215a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner DequeInt dint2(10, 1, stack2); 216a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner DequeInt dint2Cpy(dint2); 217a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 218a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint1.swap(dint2); 219a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 220a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dint1.get_allocator().swaped() ); 221a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dint2.get_allocator().swaped() ); 222a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 223a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dint1 == dint2Cpy ); 224a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dint2 == dint1Cpy ); 225a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dint1.get_allocator() == stack2 ); 226a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dint2.get_allocator() == stack1 ); 227a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 228a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 229a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 230a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 231a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 232a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct Point { 233a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int x, y; 234a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 235a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 236a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct PointEx : public Point { 237a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner PointEx() : builtFromBase(false) {} 238a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner PointEx(const Point&) : builtFromBase(true) {} 239a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 240a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner bool builtFromBase; 241a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 242a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 243a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) 244a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if defined (_STLP_USE_NAMESPACES) 245a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnernamespace std { 246a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 247a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner _STLP_TEMPLATE_NULL 248a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner struct __type_traits<PointEx> { 249a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef __false_type has_trivial_default_constructor; 250a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef __true_type has_trivial_copy_constructor; 251a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef __true_type has_trivial_assignment_operator; 252a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef __true_type has_trivial_destructor; 253a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef __true_type is_POD_type; 254a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner }; 255a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if defined (_STLP_USE_NAMESPACES) 256a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 257a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 258a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 259a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 260a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//This test check that deque implementation do not over optimize 261a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//operation as PointEx copy constructor is trivial 262a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid DequeTest::optimizations_check() 263a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 264a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES) 265a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<Point> d1(1); 266a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d1.size() == 1 ); 267a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 268a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<PointEx> d2(d1.begin(), d1.end()); 269a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d2.size() == 1 ); 270a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d2[0].builtFromBase == true ); 271a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 272a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner d2.insert(d2.end(), d1.begin(), d1.end()); 273a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d2.size() == 2 ); 274a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( d2[1].builtFromBase == true ); 275a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 276a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 277a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 278a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid DequeTest::erase() 279a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 280a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int> dint; 281a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_back(3); 282a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_front(2); 283a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_back(4); 284a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_front(1); 285a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_back(5); 286a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_front(0); 287a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_back(6); 288a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 289a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<int>::iterator it(dint.begin() + 1); 290a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 1 ); 291a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 292a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.erase(dint.begin()); 293a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 1 ); 294a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 295a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner it = dint.end() - 2; 296a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 5 ); 297a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 298a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.erase(dint.end() - 1); 299a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 5 ); 300a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 301a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_back(6); 302a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.push_front(0); 303a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 304a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner it = dint.begin() + 2; 305a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 2 ); 306a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 307a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.erase(dint.begin(), dint.begin() + 2); 308a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 2 ); 309a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 310a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner it = dint.end() - 3; 311a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 4 ); 312a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 313a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dint.erase(dint.end() - 2, dint.end()); 314a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *it == 4 ); 315a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 316a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 317a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if (!defined (STLPORT) || \ 318a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (!defined (_STLP_USE_PTR_SPECIALIZATIONS) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION))) && \ 319a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (!defined (_MSC_VER) || (_MSC_VER > 1400)) && \ 320a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (!defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC_MINOR__ < 3)) 321a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner/* Simple compilation test: Check that nested types like iterator 322a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * can be access even if type used to instanciate container is not 323a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * yet completely defined. 324a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 325a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass IncompleteClass 326a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 327a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<IncompleteClass> instances; 328a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef deque<IncompleteClass>::size_type size; 329a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 330a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 331