#include <list>
#include <testsuite_hooks.h>
-typedef __gnu_test::copy_tracker T;
-
-bool test __attribute__((unused)) = true;
-
// range and fill insert/erase + clear
// missing: o fill insert disguised as a range insert in all its variants
// o exception effects
+template<typename _Tp>
void
-test03()
+modifiers1()
{
- std::list<T> list0301;
- T::reset();
+ bool test __attribute__((unused)) = true;
+ typedef _Tp list_type;
+ typedef typename list_type::iterator iterator;
+ typedef typename list_type::value_type value_type;
+
+ list_type list0301;
+ value_type::reset();
// fill insert at beginning of list / empty list
- list0301.insert(list0301.begin(), 3, T(11)); // should be [11 11 11]
+ list0301.insert(list0301.begin(), 3, value_type(11)); // should be [11 11 11]
VERIFY(list0301.size() == 3);
- VERIFY(T::copyCount() == 3);
+ VERIFY(value_type::copyCount() == 3);
// save iterators to verify post-insert validity
- std::list<T>::iterator b = list0301.begin();
- std::list<T>::iterator m = list0301.end(); --m;
- std::list<T>::iterator e = list0301.end();
+ iterator b = list0301.begin();
+ iterator m = list0301.end(); --m;
+ iterator e = list0301.end();
// fill insert at end of list
- T::reset();
- list0301.insert(list0301.end(), 3, T(13)); // should be [11 11 11 13 13 13]
+ value_type::reset();
+ list0301.insert(list0301.end(), 3, value_type(13)); // should be [11 11 11 13 13 13]
VERIFY(list0301.size() == 6);
- VERIFY(T::copyCount() == 3);
+ VERIFY(value_type::copyCount() == 3);
VERIFY(b == list0301.begin() && b->id() == 11);
VERIFY(e == list0301.end());
VERIFY(m->id() == 11);
// fill insert in the middle of list
++m;
- T::reset();
- list0301.insert(m, 3, T(12)); // should be [11 11 11 12 12 12 13 13 13]
+ value_type::reset();
+ list0301.insert(m, 3, value_type(12)); // should be [11 11 11 12 12 12 13 13 13]
VERIFY(list0301.size() == 9);
- VERIFY(T::copyCount() == 3);
+ VERIFY(value_type::copyCount() == 3);
VERIFY(b == list0301.begin() && b->id() == 11);
VERIFY(e == list0301.end());
VERIFY(m->id() == 13);
// single erase
- T::reset();
+ value_type::reset();
m = list0301.erase(m); // should be [11 11 11 12 12 12 13 13]
VERIFY(list0301.size() == 8);
- VERIFY(T::dtorCount() == 1);
+ VERIFY(value_type::dtorCount() == 1);
VERIFY(b == list0301.begin() && b->id() == 11);
VERIFY(e == list0301.end());
VERIFY(m->id() == 13);
// range erase
- T::reset();
+ value_type::reset();
m = list0301.erase(list0301.begin(), m); // should be [13 13]
VERIFY(list0301.size() == 2);
- VERIFY(T::dtorCount() == 6);
+ VERIFY(value_type::dtorCount() == 6);
VERIFY(m->id() == 13);
// range fill at beginning
const int A[] = {321, 322, 333};
const int N = sizeof(A) / sizeof(int);
- T::reset();
- b = list0301.begin();
+ value_type::reset();
+ b = list0301.begin();
list0301.insert(b, A, A + N); // should be [321 322 333 13 13]
VERIFY(list0301.size() == 5);
- VERIFY(T::copyCount() == 3);
+ VERIFY(value_type::copyCount() == 3);
VERIFY(m->id() == 13);
-
+
// range fill at end
- T::reset();
+ value_type::reset();
list0301.insert(e, A, A + N); // should be [321 322 333 13 13 321 322 333]
VERIFY(list0301.size() == 8);
- VERIFY(T::copyCount() == 3);
+ VERIFY(value_type::copyCount() == 3);
VERIFY(e == list0301.end());
VERIFY(m->id() == 13);
-
+
// range fill in middle
- T::reset();
- list0301.insert(m, A, A + N);
+ value_type::reset();
+ list0301.insert(m, A, A + N);
VERIFY(list0301.size() == 11);
- VERIFY(T::copyCount() == 3);
+ VERIFY(value_type::copyCount() == 3);
VERIFY(e == list0301.end());
VERIFY(m->id() == 13);
- T::reset();
+ value_type::reset();
list0301.clear();
VERIFY(list0301.size() == 0);
- VERIFY(T::dtorCount() == 11);
+ VERIFY(value_type::dtorCount() == 11);
VERIFY(e == list0301.end());
}
int main()
{
- test03();
+ modifiers1<std::list<__gnu_test::copy_tracker> >();
return 0;
}