// Copyright (C) 2001, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // 23.2.2.3 list modifiers [lib.list.modifiers] #include // range and fill insert/erase + clear // missing: o fill insert disguised as a range insert in all its variants // o exception effects template void modifiers1() { bool test __attribute__((unused)) = true; typedef _Tp list_type; typedef typename list_type::iterator iterator; typedef typename list_type::value_type value_type; using __gnu_test::copy_constructor; using __gnu_test::destructor; list_type list0301; value_type::reset(); // fill insert at beginning of list / empty list list0301.insert(list0301.begin(), 3, value_type(11)); // should be [11 11 11] VERIFY(list0301.size() == 3); VERIFY(copy_constructor::count() == 3); // save iterators to verify post-insert validity iterator b = list0301.begin(); iterator m = list0301.end(); --m; iterator e = list0301.end(); // fill insert at end of list value_type::reset(); list0301.insert(list0301.end(), 3, value_type(13)); // should be [11 11 11 13 13 13] VERIFY(list0301.size() == 6); VERIFY(copy_constructor::count() == 3); VERIFY(b == list0301.begin() && b->id() == 11); VERIFY(e == list0301.end()); VERIFY(m->id() == 11); // fill insert in the middle of list ++m; 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(copy_constructor::count() == 3); VERIFY(b == list0301.begin() && b->id() == 11); VERIFY(e == list0301.end()); VERIFY(m->id() == 13); // single erase value_type::reset(); m = list0301.erase(m); // should be [11 11 11 12 12 12 13 13] VERIFY(list0301.size() == 8); VERIFY(destructor::count() == 1); VERIFY(b == list0301.begin() && b->id() == 11); VERIFY(e == list0301.end()); VERIFY(m->id() == 13); // range erase value_type::reset(); m = list0301.erase(list0301.begin(), m); // should be [13 13] VERIFY(list0301.size() == 2); VERIFY(destructor::count() == 6); VERIFY(m->id() == 13); // range fill at beginning const int A[] = {321, 322, 333}; const int N = sizeof(A) / sizeof(int); value_type::reset(); b = list0301.begin(); list0301.insert(b, A, A + N); // should be [321 322 333 13 13] VERIFY(list0301.size() == 5); VERIFY(copy_constructor::count() == 3); VERIFY(m->id() == 13); // range fill at end value_type::reset(); list0301.insert(e, A, A + N); // should be [321 322 333 13 13 321 322 333] VERIFY(list0301.size() == 8); VERIFY(copy_constructor::count() == 3); VERIFY(e == list0301.end()); VERIFY(m->id() == 13); // range fill in middle value_type::reset(); list0301.insert(m, A, A + N); VERIFY(list0301.size() == 11); VERIFY(copy_constructor::count() == 3); VERIFY(e == list0301.end()); VERIFY(m->id() == 13); value_type::reset(); list0301.clear(); VERIFY(list0301.size() == 0); VERIFY(destructor::count() == 11); VERIFY(e == list0301.end()); }