1// { dg-options "-std=gnu++11" } 2 3// Copyright (C) 2008-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 23.2.3.n forward_list xxx [lib.forward_list.xxx] 21 22#include <forward_list> 23#include <testsuite_hooks.h> 24 25// This test verifies the following: 26// cbegin 27// erase_after one iterator 28// pos is useable and points to current element 29void 30test01() 31{ 32 bool test __attribute__((unused)) = true; 33 34 std::forward_list<int> fl({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}); 35 36 std::forward_list<int>::const_iterator pos = fl.cbegin(); 37 ++pos; 38 VERIFY( *pos == 1 ); 39 40 std::forward_list<int>::iterator pos2 = fl.erase_after(pos); 41 42 VERIFY( *pos == 1 ); 43 ++pos; 44 VERIFY( *pos == 3 ); 45 VERIFY( pos == pos2 ); 46} 47 48// This test verifies the following: 49// cbegin 50// erase_after iterator range 51// pos is useable and points to current element 52void 53test02() 54{ 55 bool test __attribute__((unused)) = true; 56 57 std::forward_list<int> fl({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}); 58 59 std::forward_list<int>::const_iterator pos = fl.cbegin(); 60 ++pos; 61 VERIFY( *pos == 1 ); 62 63 std::forward_list<int>::iterator stop = fl.begin(); 64 ++stop; 65 ++stop; 66 ++stop; 67 ++stop; 68 VERIFY( *stop == 4 ); 69 70 std::forward_list<int>::iterator pos2 = fl.erase_after(pos, stop); 71 72 VERIFY( pos2 == stop ); 73 VERIFY( *pos == 1 ); 74 ++pos; 75 VERIFY( *pos == 4 ); 76 VERIFY( std::distance(fl.begin(), fl.end()) == 8 ); 77 78 std::forward_list<int>::iterator pos3 79 = fl.erase_after(pos, fl.end()); 80 VERIFY( pos3 == fl.end() ); 81 VERIFY( ++pos == fl.end() ); 82 VERIFY( std::distance(fl.begin(), fl.end()) == 3 ); 83 84 std::forward_list<int>::iterator pos4 85 = fl.erase_after(fl.before_begin(), pos); 86 VERIFY( pos4 == pos ); 87 VERIFY( std::distance(fl.begin(), fl.end()) == 0 ); 88 VERIFY( fl.empty() ); 89} 90 91int 92main() 93{ 94 test01(); 95 test02(); 96 return 0; 97} 98