Home | History | Annotate | Download | only in forwardlist.modifiers
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <forward_list>
     11 
     12 // iterator erase_after(const_iterator first, const_iterator last);
     13 
     14 #include <forward_list>
     15 #include <cassert>
     16 
     17 #include "min_allocator.h"
     18 
     19 int main()
     20 {
     21     {
     22         typedef int T;
     23         typedef std::forward_list<T> C;
     24         const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     25         C c(std::begin(t), std::end(t));
     26 
     27         C::iterator i = c.erase_after(next(c.cbefore_begin(), 4), next(c.cbefore_begin(), 4));
     28         assert(i == next(c.cbefore_begin(), 4));
     29         assert(distance(c.begin(), c.end()) == 10);
     30         assert(*next(c.begin(), 0) == 0);
     31         assert(*next(c.begin(), 1) == 1);
     32         assert(*next(c.begin(), 2) == 2);
     33         assert(*next(c.begin(), 3) == 3);
     34         assert(*next(c.begin(), 4) == 4);
     35         assert(*next(c.begin(), 5) == 5);
     36         assert(*next(c.begin(), 6) == 6);
     37         assert(*next(c.begin(), 7) == 7);
     38         assert(*next(c.begin(), 8) == 8);
     39         assert(*next(c.begin(), 9) == 9);
     40 
     41         i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 5));
     42         assert(i == next(c.begin(), 2));
     43         assert(distance(c.begin(), c.end()) == 8);
     44         assert(*next(c.begin(), 0) == 0);
     45         assert(*next(c.begin(), 1) == 1);
     46         assert(*next(c.begin(), 2) == 4);
     47         assert(*next(c.begin(), 3) == 5);
     48         assert(*next(c.begin(), 4) == 6);
     49         assert(*next(c.begin(), 5) == 7);
     50         assert(*next(c.begin(), 6) == 8);
     51         assert(*next(c.begin(), 7) == 9);
     52 
     53         i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 3));
     54         assert(i == next(c.begin(), 2));
     55         assert(distance(c.begin(), c.end()) == 8);
     56         assert(*next(c.begin(), 0) == 0);
     57         assert(*next(c.begin(), 1) == 1);
     58         assert(*next(c.begin(), 2) == 4);
     59         assert(*next(c.begin(), 3) == 5);
     60         assert(*next(c.begin(), 4) == 6);
     61         assert(*next(c.begin(), 5) == 7);
     62         assert(*next(c.begin(), 6) == 8);
     63         assert(*next(c.begin(), 7) == 9);
     64 
     65         i = c.erase_after(next(c.cbefore_begin(), 5), next(c.cbefore_begin(), 9));
     66         assert(i == c.end());
     67         assert(distance(c.begin(), c.end()) == 5);
     68         assert(*next(c.begin(), 0) == 0);
     69         assert(*next(c.begin(), 1) == 1);
     70         assert(*next(c.begin(), 2) == 4);
     71         assert(*next(c.begin(), 3) == 5);
     72         assert(*next(c.begin(), 4) == 6);
     73 
     74         i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 2));
     75         assert(i == c.begin());
     76         assert(distance(c.begin(), c.end()) == 4);
     77         assert(*next(c.begin(), 0) == 1);
     78         assert(*next(c.begin(), 1) == 4);
     79         assert(*next(c.begin(), 2) == 5);
     80         assert(*next(c.begin(), 3) == 6);
     81 
     82         i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 5));
     83         assert(i == c.begin());
     84         assert(i == c.end());
     85         assert(distance(c.begin(), c.end()) == 0);
     86     }
     87 #if TEST_STD_VER >= 11
     88     {
     89         typedef int T;
     90         typedef std::forward_list<T, min_allocator<T>> C;
     91         const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     92         C c(std::begin(t), std::end(t));
     93 
     94         C::iterator i = c.erase_after(next(c.cbefore_begin(), 4), next(c.cbefore_begin(), 4));
     95         assert(i == next(c.cbefore_begin(), 4));
     96         assert(distance(c.begin(), c.end()) == 10);
     97         assert(*next(c.begin(), 0) == 0);
     98         assert(*next(c.begin(), 1) == 1);
     99         assert(*next(c.begin(), 2) == 2);
    100         assert(*next(c.begin(), 3) == 3);
    101         assert(*next(c.begin(), 4) == 4);
    102         assert(*next(c.begin(), 5) == 5);
    103         assert(*next(c.begin(), 6) == 6);
    104         assert(*next(c.begin(), 7) == 7);
    105         assert(*next(c.begin(), 8) == 8);
    106         assert(*next(c.begin(), 9) == 9);
    107 
    108         i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 5));
    109         assert(i == next(c.begin(), 2));
    110         assert(distance(c.begin(), c.end()) == 8);
    111         assert(*next(c.begin(), 0) == 0);
    112         assert(*next(c.begin(), 1) == 1);
    113         assert(*next(c.begin(), 2) == 4);
    114         assert(*next(c.begin(), 3) == 5);
    115         assert(*next(c.begin(), 4) == 6);
    116         assert(*next(c.begin(), 5) == 7);
    117         assert(*next(c.begin(), 6) == 8);
    118         assert(*next(c.begin(), 7) == 9);
    119 
    120         i = c.erase_after(next(c.cbefore_begin(), 2), next(c.cbefore_begin(), 3));
    121         assert(i == next(c.begin(), 2));
    122         assert(distance(c.begin(), c.end()) == 8);
    123         assert(*next(c.begin(), 0) == 0);
    124         assert(*next(c.begin(), 1) == 1);
    125         assert(*next(c.begin(), 2) == 4);
    126         assert(*next(c.begin(), 3) == 5);
    127         assert(*next(c.begin(), 4) == 6);
    128         assert(*next(c.begin(), 5) == 7);
    129         assert(*next(c.begin(), 6) == 8);
    130         assert(*next(c.begin(), 7) == 9);
    131 
    132         i = c.erase_after(next(c.cbefore_begin(), 5), next(c.cbefore_begin(), 9));
    133         assert(i == c.end());
    134         assert(distance(c.begin(), c.end()) == 5);
    135         assert(*next(c.begin(), 0) == 0);
    136         assert(*next(c.begin(), 1) == 1);
    137         assert(*next(c.begin(), 2) == 4);
    138         assert(*next(c.begin(), 3) == 5);
    139         assert(*next(c.begin(), 4) == 6);
    140 
    141         i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 2));
    142         assert(i == c.begin());
    143         assert(distance(c.begin(), c.end()) == 4);
    144         assert(*next(c.begin(), 0) == 1);
    145         assert(*next(c.begin(), 1) == 4);
    146         assert(*next(c.begin(), 2) == 5);
    147         assert(*next(c.begin(), 3) == 6);
    148 
    149         i = c.erase_after(next(c.cbefore_begin(), 0), next(c.cbefore_begin(), 5));
    150         assert(i == c.begin());
    151         assert(i == c.end());
    152         assert(distance(c.begin(), c.end()) == 0);
    153     }
    154 #endif
    155 }
    156