177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <vector> 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <algorithm> 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <string> 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <slist> 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <list> 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <deque> 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <set> 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <unordered_set> 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "mvctor_test.h" 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing namespace std; 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (STLPORT) 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing namespace std::tr1; 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(MoveConstructorTest); 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// tests implementation 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MoveConstructorTest::move_construct_test() 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //cout << "vector<vector<int>>"; 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int> const ref_vec(10, 0); 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > v_v_ints(1, ref_vec); 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int *pint = &(v_v_ints.front().front()); 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t cur_capacity = v_v_ints.capacity(); 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (v_v_ints.capacity() <= cur_capacity) { 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner v_v_ints.push_back(ref_vec); 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //v_v_ints has been resized 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((pint == &v_v_ints.front().front())); 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //cout << "vector<vector<int>>::erase"; 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //We need at least 3 elements: 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (v_v_ints.size() < 3) { 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner v_v_ints.push_back(ref_vec); 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //We erase the 2nd 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pint = &v_v_ints[2].front(); 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner v_v_ints.erase(v_v_ints.begin() + 1); 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((pint == &v_v_ints[1].front())); 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //cout << "vector<string>"; 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string const ref_str("ref string, big enough to be a dynamic one"); 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> vec_strs(1, ref_str); 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char const* pstr = vec_strs.front().c_str(); 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner cur_capacity = vec_strs.capacity(); 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (vec_strs.capacity() <= cur_capacity) { 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vec_strs.push_back(ref_str); 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //vec_str has been resized 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((pstr == vec_strs.front().c_str())); 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //cout << "vector<string>::erase"; 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //We need at least 3 elements: 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (vec_strs.size() < 3) { 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vec_strs.push_back(ref_str); 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //We erase the 2nd 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pstr = vec_strs[2].c_str(); 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vec_strs.erase(vec_strs.begin() + 1); 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((pstr == vec_strs[1].c_str())); 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //cout << "swap(vector<int>, vector<int>)"; 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int> elem1(10, 0), elem2(10, 0); 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int *p1 = &elem1.front(); 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int *p2 = &elem2.front(); 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner swap(elem1, elem2); 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(((p1 == &elem2.front()) && (p2 == &elem1.front()))); 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<bool> bit_vec(5, true); 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bit_vec.insert(bit_vec.end(), 5, false); 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<bool> > v_v_bits(1, bit_vec); 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This is a STLport specific test as we are using internal implementation 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * details to check that the move has been correctly handled. For other 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * STL implementation it is only a compile check. 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_DEBUG) 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner unsigned int *punit = v_v_bits.front().begin()._M_iterator._M_p; 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner unsigned int *punit = v_v_bits.front().begin()._M_p; 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner cur_capacity = v_v_bits.capacity(); 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (v_v_bits.capacity() <= cur_capacity) { 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner v_v_bits.push_back(bit_vec); 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //v_v_bits has been resized 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_DEBUG) 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( punit == v_v_bits.front().begin()._M_iterator._M_p ); 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( punit == v_v_bits.front().begin()._M_p ); 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // zero: don't like this kind of tests 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // because of template test function 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // we should find another way to provide 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // move constructor testing... 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner standard_test1(list<int>(10)); 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner standard_test1(slist<int>(10)); 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner standard_test1(deque<int>(10)); 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner*/ 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int int_values[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner set<int> int_set(int_values, int_values + sizeof(in_values) / sizeof(int)); 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner standard_test1(int_set); 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner multiset<int> int_multiset(int_values, int_values + sizeof(in_values) / sizeof(int)); 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner standard_test1(int_multiset); 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CheckFullMoveSupport(string()); 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CheckFullMoveSupport(vector<int>()); 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CheckFullMoveSupport(deque<int>()); 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CheckFullMoveSupport(list<int>()); 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CheckFullMoveSupport(slist<int>()); 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MoveConstructorTest::deque_test() 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Check the insert range method. 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //To the front: 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || !defined (_STLP_DEBUG) || !defined (_STLP_NO_MEMBER_TEMPLATES) 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> > vect_deque; 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.assign(3, vector<int>(10)); 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_deque[0].front()); 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_deque[1].front()); 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_deque[2].front()); 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_insert = 5; 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Initialize to 1 to generate a front insertion: 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int pos = 1; 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (nb_insert--) { 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vect(2, vector<int>(10)); 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.insert(vect_deque.begin() + pos, vect_vect.begin(), vect_vect.end()); 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos, &vect_deque[pos].front()); 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos + 1, &vect_deque[pos + 1].front()); 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ++pos; 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 13 ); 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (int i = 0; i < 5; ++i) { 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &vect_deque[i].front() ); 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[11 - i] == &vect_deque[11 - i].front() ); 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //To the back 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || !defined (_STLP_DEBUG) || !defined (_STLP_NO_MEMBER_TEMPLATES) 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> > vect_deque; 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.assign(3, vector<int>(10)); 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_deque[0].front()); 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_deque[1].front()); 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_deque[2].front()); 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_insert = 5; 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Initialize to 2 to generate a back insertion: 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int pos = 2; 21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (nb_insert--) { 21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vect(2, vector<int>(10)); 22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.insert(vect_deque.begin() + pos, vect_vect.begin(), vect_vect.end()); 22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos, &vect_deque[pos].front()); 22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos + 1, &vect_deque[pos + 1].front()); 22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ++pos; 22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 13 ); 22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (int i = 0; i < 5; ++i) { 22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i + 1] == &vect_deque[i + 1].front() ); 22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[12 - i] == &vect_deque[12 - i].front() ); 23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Check the different erase methods. 23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> > vect_deque; 23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.assign(20, vector<int>(10)); 23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator vdit(vect_deque.begin()), vditEnd(vect_deque.end()); 24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; vdit != vditEnd; ++vdit) { 24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vdit->front()); 24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // This check, repeated after each operation, check the deque consistency: 24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator it = vect_deque.end() - 5; 24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_deque.end() && nb_incr <= 6; ++nb_incr, ++it) {} 25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //erase in front: 25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.erase(vect_deque.begin() + 2); 25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.begin() + 2); 25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 19 ); 25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator it = vect_deque.end() - 5; 26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_deque.end() && nb_incr <= 6; ++nb_incr, ++it) {} 27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //erase in the back: 27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.erase(vect_deque.end() - 2); 27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.end() - 2); 27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 18 ); 27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator it = vect_deque.end() - 5; 28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_deque.end() && nb_incr < 6; ++nb_incr, ++it) {} 29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //range erase in front 29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.erase(vect_deque.begin() + 3, vect_deque.begin() + 5); 29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.begin() + 3, bufs.begin() + 5); 29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 16 ); 29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator it = vect_deque.end() - 5; 30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_deque.end() && nb_incr <= 6; ++nb_incr, ++it) {} 31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //range erase in back 31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.erase(vect_deque.end() - 5, vect_deque.end() - 3); 31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.end() - 5, bufs.end() - 3); 31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 14 ); 31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Check the insert value(s) 32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> > vect_deque; 33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.assign(20, vector<int>(10)); 33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator vdit(vect_deque.begin()), vditEnd(vect_deque.end()); 33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; vdit != vditEnd; ++vdit) { 33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vdit->front()); 33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //2 values in front: 33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.insert(vect_deque.begin() + 2, 2, vector<int>(10)); 34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + 2, &vect_deque[2].front()); 34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + 3, &vect_deque[3].front()); 34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 22 ); 34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //2 values in back: 35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_deque.insert(vect_deque.end() - 2, 2, vector<int>(10)); 35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.end() - 2, &vect_deque[20].front()); 35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.end() - 2, &vect_deque[21].front()); 35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 24 ); 35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //1 value in front: 36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator ret; 36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ret = vect_deque.insert(vect_deque.begin() + 2, vector<int>(10)); 36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + 2, &vect_deque[2].front()); 37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 25 ); 37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( &ret->front() == bufs[2] ); 37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //1 value in back: 38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator ret; 38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ret = vect_deque.insert(vect_deque.end() - 2, vector<int>(10)); 38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.end() - 2, &vect_deque[23].front()); 38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_deque.size() == 26 ); 38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( &ret->front() == bufs[23] ); 38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<vector<int> >::iterator dit(vect_deque.begin()), ditEnd(vect_deque.end()); 38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MoveConstructorTest::vector_test() 39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Check the insert range method. 40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //To the front: 40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vector; 40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.assign(3, vector<int>(10)); 40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_vector[0].front()); 40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_vector[1].front()); 40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_vector[2].front()); 40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_insert = 5; 41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int pos = 1; 41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (nb_insert--) { 41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vect(2, vector<int>(10)); 41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.insert(vect_vector.begin() + pos, vect_vect.begin(), vect_vect.end()); 41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos, &vect_vector[pos].front()); 41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos + 1, &vect_vector[pos + 1].front()); 41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ++pos; 41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 13 ); 41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (int i = 0; i < 5; ++i) { 42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &vect_vector[i].front() ); 42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[11 - i] == &vect_vector[11 - i].front() ); 42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //To the back 42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vector; 43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.assign(3, vector<int>(10)); 43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_vector[0].front()); 43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_vector[1].front()); 43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vect_vector[2].front()); 43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_insert = 5; 43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Initialize to 2 to generate a back insertion: 43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int pos = 2; 43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (nb_insert--) { 44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vect(2, vector<int>(10)); 44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.insert(vect_vector.begin() + pos, vect_vect.begin(), vect_vect.end()); 44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos, &vect_vector[pos].front()); 44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + pos + 1, &vect_vector[pos + 1].front()); 44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ++pos; 44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 13 ); 44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (int i = 0; i < 5; ++i) { 44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i + 1] == &vect_vector[i + 1].front() ); 45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[12 - i] == &vect_vector[12 - i].front() ); 45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Check the different erase methods. 45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vector; 45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.assign(20, vector<int>(10)); 45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator vdit(vect_vector.begin()), vditEnd(vect_vector.end()); 46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; vdit != vditEnd; ++vdit) { 46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vdit->front()); 46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // This check, repeated after each operation, check the vector consistency: 46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator it = vect_vector.end() - 5; 46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {} 47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //erase in front: 47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.erase(vect_vector.begin() + 2); 47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.begin() + 2); 47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 19 ); 47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator it = vect_vector.end() - 5; 48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {} 49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //erase in the back: 49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.erase(vect_vector.end() - 2); 49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.end() - 2); 49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 18 ); 49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator it = vect_vector.end() - 5; 50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_vector.end() && nb_incr < 6; ++nb_incr, ++it) {} 51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //range erase in front 51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.erase(vect_vector.begin() + 3, vect_vector.begin() + 5); 51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.begin() + 3, bufs.begin() + 5); 51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 16 ); 51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 52177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 52277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 52377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 52477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 52577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 52677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 52777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator it = vect_vector.end() - 5; 52877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int nb_incr = 0; 52977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != vect_vector.end() && nb_incr <= 6; ++nb_incr, ++it) {} 53077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( nb_incr == 5 ); 53177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 53277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 53377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 53477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //range erase in back 53577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.erase(vect_vector.end() - 5, vect_vector.end() - 3); 53677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.erase(bufs.end() - 5, bufs.end() - 3); 53777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 14 ); 53877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 53977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 54077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 54177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 54277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 54377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 54477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 54577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 54677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 54777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Check the insert value(s) 54877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 54977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> > vect_vector; 55077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.assign(20, vector<int>(10)); 55177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator vdit(vect_vector.begin()), vditEnd(vect_vector.end()); 55277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int*> bufs; 55377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; vdit != vditEnd; ++vdit) { 55477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.push_back(&vdit->front()); 55577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 55677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 55777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 55877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //2 values in front: 55977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.insert(vect_vector.begin() + 2, 2, vector<int>(10)); 56077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + 2, &vect_vector[2].front()); 56177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + 3, &vect_vector[3].front()); 56277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 22 ); 56377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 56477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 56577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 56677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 56777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 56877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 56977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 57077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 57177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 57277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //2 values in back: 57377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.insert(vect_vector.end() - 2, 2, vector<int>(10)); 57477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.end() - 2, &vect_vector[20].front()); 57577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.end() - 2, &vect_vector[21].front()); 57677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 24 ); 57777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 57877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 57977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 58077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 58177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 58277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 58377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 58477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 58577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 58677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //1 value in front: 58777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 58877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator ret = 58977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 59077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.insert(vect_vector.begin() + 2, vector<int>(10)); 59177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.begin() + 2, &vect_vector[2].front()); 59277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 25 ); 59377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 59477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( &ret->front() == bufs[2] ); 59577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 59677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 59777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 59877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 59977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 60077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 60177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 60277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 60377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //1 value in back: 60477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 60577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator ret = 60677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 60777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect_vector.insert(vect_vector.end() - 2, vector<int>(10)); 60877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bufs.insert(bufs.end() - 2, &vect_vector[23].front()); 60977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( vect_vector.size() == 26 ); 61077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC) 61177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( &ret->front() == bufs[23] ); 61277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<int> >::iterator dit(vect_vector.begin()), ditEnd(vect_vector.end()); 61377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; dit != ditEnd; ++dit, ++i) { 61477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( bufs[i] == &dit->front() ); 61577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 61677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 61777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 61877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 61977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 62077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //The following tests are checking move contructor implementations: 62177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const string long_str("long enough string to force dynamic allocation"); 62277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 62377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //vector move contructor: 62477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<string> > vect(10, vector<string>(10, long_str)); 62577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> strs; 62677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t index = 0; 62777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (;;) { 62877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<vector<string> >::iterator it(vect.begin()); 62977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner advance(it, index % vect.size()); 63077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner strs.push_back(it->front()); 63177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner it->erase(it->begin()); 63277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (it->empty()) { 63377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect.erase(it); 63477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (vect.empty()) 63577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 63677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 63777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner index += 3; 63877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 63977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strs.size() == 10 * 10 ); 64077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string>::iterator it(strs.begin()), itEnd(strs.end()); 64177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != itEnd; ++it) { 64277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *it == long_str ); 64377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 64477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 64577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 64677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 64777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //deque move contructor: 64877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (__DMC__) 64977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<deque<string> > vect(10, deque<string>(10, long_str)); 65077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 65177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<string> deq_str = deque<string>(10, long_str); 65277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<deque<string> > vect(10, deq_str); 65377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 65477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> strs; 65577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t index = 0; 65677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (;;) { 65777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<deque<string> >::iterator it(vect.begin()); 65877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner advance(it, index % vect.size()); 65977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner strs.push_back(it->front()); 66077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner it->pop_front(); 66177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (it->empty()) { 66277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect.erase(it); 66377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (vect.empty()) 66477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 66577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 66677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner index += 3; 66777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 66877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strs.size() == 10 * 10 ); 66977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string>::iterator it(strs.begin()), itEnd(strs.end()); 67077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != itEnd; ++it) { 67177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *it == long_str ); 67277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 67377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 67477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 67577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 67677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //list move contructor: 67777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<list<string> > vect(10, list<string>(10, long_str)); 67877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> strs; 67977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t index = 0; 68077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (;;) { 68177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<list<string> >::iterator it(vect.begin()); 68277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner advance(it, index % vect.size()); 68377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner strs.push_back(it->front()); 68477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner it->pop_front(); 68577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (it->empty()) { 68677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect.erase(it); 68777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (vect.empty()) 68877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 68977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 69077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner index += 3; 69177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 69277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strs.size() == 10 * 10 ); 69377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string>::iterator it(strs.begin()), itEnd(strs.end()); 69477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != itEnd; ++it) { 69577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *it == long_str ); 69677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 69777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 69877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 69977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 70077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 70177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //slist move contructor: 70277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<slist<string> > vect(10, slist<string>(10, long_str)); 70377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> strs; 70477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t index = 0; 70577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (true) { 70677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<slist<string> >::iterator it(vect.begin()); 70777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner advance(it, index % vect.size()); 70877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner strs.push_back(it->front()); 70977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner it->pop_front(); 71077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (it->empty()) { 71177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect.erase(it); 71277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (vect.empty()) 71377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 71477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 71577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner index += 3; 71677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 71777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strs.size() == 10 * 10 ); 71877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string>::iterator it(strs.begin()), itEnd(strs.end()); 71977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != itEnd; ++it) { 72077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *it == long_str ); 72177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 72277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 72377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 72477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 72577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 72677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //binary tree move contructor: 72777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner multiset<string> ref; 72877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; i < 10; ++i) { 72977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ref.insert(long_str); 73077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 73177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<multiset<string> > vect(10, ref); 73277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> strs; 73377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t index = 0; 73477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (;;) { 73577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<multiset<string> >::iterator it(vect.begin()); 73677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner advance(it, index % vect.size()); 73777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner strs.push_back(*it->begin()); 73877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner it->erase(it->begin()); 73977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (it->empty()) { 74077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect.erase(it); 74177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (vect.empty()) 74277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 74377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 74477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner index += 3; 74577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 74677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strs.size() == 10 * 10 ); 74777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string>::iterator it(strs.begin()), itEnd(strs.end()); 74877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != itEnd; ++it) { 74977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *it == long_str ); 75077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 75177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 75277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 75377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) 75477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (__DMC__) 75577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 75677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //hash container move contructor: 75777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner unordered_multiset<string> ref; 75877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (size_t i = 0; i < 10; ++i) { 75977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ref.insert(long_str); 76077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 76177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<unordered_multiset<string> > vect(10, ref); 76277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> strs; 76377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t index = 0; 76477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner while (true) { 76577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<unordered_multiset<string> >::iterator it(vect.begin()); 76677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner advance(it, index % vect.size()); 76777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner strs.push_back(*it->begin()); 76877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner it->erase(it->begin()); 76977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (it->empty()) { 77077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vect.erase(it); 77177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (vect.empty()) 77277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 77377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 77477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner index += 3; 77577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 77677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strs.size() == 10 * 10 ); 77777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string>::iterator it(strs.begin()), itEnd(strs.end()); 77877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (; it != itEnd; ++it) { 77977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *it == long_str ); 78077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 78177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 78277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 78377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 78477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 78577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 78677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__BORLANDC__) 78777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* Specific Borland test case to show a really weird compiler behavior. 78877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 78977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass Standalone 79077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 79177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic: 79277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Uncomment following to pass the test 79377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Standalone() {} 79477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~Standalone() {} 79577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 79677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner MovableStruct movableStruct; 79777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int> intVector; 79877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 79977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 80077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MoveConstructorTest::nb_destructor_calls() 80177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 80277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner MovableStruct::reset(); 80377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 80477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try 80577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 80677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner Standalone standalone; 80777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner throw "some exception"; 80877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner MovableStruct movableStruct; 80977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 81077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (const char*) 81177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 81277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 1 ); 81377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 ); 81477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 81577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 81677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 817