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