OSDN Git Service

2009-05-19 Benjamin Kosnik <bkoz@redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / 23_containers / list / modifiers / 1.cc
index d250db8..b1c85f0 100644 (file)
 #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;
 }