Home | History | Annotate | Download | only in set
      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 // <set>
     11 
     12 // class set
     13 
     14 // size_type erase(const key_type& k);
     15 
     16 #include <set>
     17 #include <cassert>
     18 
     19 #include "min_allocator.h"
     20 
     21 int main()
     22 {
     23     {
     24         typedef std::set<int> M;
     25         typedef int V;
     26         typedef M::size_type I;
     27         V ar[] =
     28         {
     29             1,
     30             2,
     31             3,
     32             4,
     33             5,
     34             6,
     35             7,
     36             8
     37         };
     38         M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
     39         assert(m.size() == 8);
     40         I i = m.erase(9);
     41         assert(m.size() == 8);
     42         assert(i == 0);
     43         assert(*next(m.begin(), 0) == 1);
     44         assert(*next(m.begin(), 1) == 2);
     45         assert(*next(m.begin(), 2) == 3);
     46         assert(*next(m.begin(), 3) == 4);
     47         assert(*next(m.begin(), 4) == 5);
     48         assert(*next(m.begin(), 5) == 6);
     49         assert(*next(m.begin(), 6) == 7);
     50         assert(*next(m.begin(), 7) == 8);
     51 
     52         i = m.erase(4);
     53         assert(m.size() == 7);
     54         assert(i == 1);
     55         assert(*next(m.begin(), 0) == 1);
     56         assert(*next(m.begin(), 1) == 2);
     57         assert(*next(m.begin(), 2) == 3);
     58         assert(*next(m.begin(), 3) == 5);
     59         assert(*next(m.begin(), 4) == 6);
     60         assert(*next(m.begin(), 5) == 7);
     61         assert(*next(m.begin(), 6) == 8);
     62 
     63         i = m.erase(1);
     64         assert(m.size() == 6);
     65         assert(i == 1);
     66         assert(*next(m.begin(), 0) == 2);
     67         assert(*next(m.begin(), 1) == 3);
     68         assert(*next(m.begin(), 2) == 5);
     69         assert(*next(m.begin(), 3) == 6);
     70         assert(*next(m.begin(), 4) == 7);
     71         assert(*next(m.begin(), 5) == 8);
     72 
     73         i = m.erase(8);
     74         assert(m.size() == 5);
     75         assert(i == 1);
     76         assert(*next(m.begin(), 0) == 2);
     77         assert(*next(m.begin(), 1) == 3);
     78         assert(*next(m.begin(), 2) == 5);
     79         assert(*next(m.begin(), 3) == 6);
     80         assert(*next(m.begin(), 4) == 7);
     81 
     82         i = m.erase(3);
     83         assert(m.size() == 4);
     84         assert(i == 1);
     85         assert(*next(m.begin(), 0) == 2);
     86         assert(*next(m.begin(), 1) == 5);
     87         assert(*next(m.begin(), 2) == 6);
     88         assert(*next(m.begin(), 3) == 7);
     89 
     90         i = m.erase(6);
     91         assert(m.size() == 3);
     92         assert(i == 1);
     93         assert(*next(m.begin(), 0) == 2);
     94         assert(*next(m.begin(), 1) == 5);
     95         assert(*next(m.begin(), 2) == 7);
     96 
     97         i = m.erase(7);
     98         assert(m.size() == 2);
     99         assert(i == 1);
    100         assert(*next(m.begin(), 0) == 2);
    101         assert(*next(m.begin(), 1) == 5);
    102 
    103         i = m.erase(2);
    104         assert(m.size() == 1);
    105         assert(i == 1);
    106         assert(*next(m.begin(), 0) == 5);
    107 
    108         i = m.erase(5);
    109         assert(m.size() == 0);
    110         assert(i == 1);
    111     }
    112 #if TEST_STD_VER >= 11
    113     {
    114         typedef std::set<int, std::less<int>, min_allocator<int>> M;
    115         typedef int V;
    116         typedef M::size_type I;
    117         V ar[] =
    118         {
    119             1,
    120             2,
    121             3,
    122             4,
    123             5,
    124             6,
    125             7,
    126             8
    127         };
    128         M m(ar, ar + sizeof(ar)/sizeof(ar[0]));
    129         assert(m.size() == 8);
    130         I i = m.erase(9);
    131         assert(m.size() == 8);
    132         assert(i == 0);
    133         assert(*next(m.begin(), 0) == 1);
    134         assert(*next(m.begin(), 1) == 2);
    135         assert(*next(m.begin(), 2) == 3);
    136         assert(*next(m.begin(), 3) == 4);
    137         assert(*next(m.begin(), 4) == 5);
    138         assert(*next(m.begin(), 5) == 6);
    139         assert(*next(m.begin(), 6) == 7);
    140         assert(*next(m.begin(), 7) == 8);
    141 
    142         i = m.erase(4);
    143         assert(m.size() == 7);
    144         assert(i == 1);
    145         assert(*next(m.begin(), 0) == 1);
    146         assert(*next(m.begin(), 1) == 2);
    147         assert(*next(m.begin(), 2) == 3);
    148         assert(*next(m.begin(), 3) == 5);
    149         assert(*next(m.begin(), 4) == 6);
    150         assert(*next(m.begin(), 5) == 7);
    151         assert(*next(m.begin(), 6) == 8);
    152 
    153         i = m.erase(1);
    154         assert(m.size() == 6);
    155         assert(i == 1);
    156         assert(*next(m.begin(), 0) == 2);
    157         assert(*next(m.begin(), 1) == 3);
    158         assert(*next(m.begin(), 2) == 5);
    159         assert(*next(m.begin(), 3) == 6);
    160         assert(*next(m.begin(), 4) == 7);
    161         assert(*next(m.begin(), 5) == 8);
    162 
    163         i = m.erase(8);
    164         assert(m.size() == 5);
    165         assert(i == 1);
    166         assert(*next(m.begin(), 0) == 2);
    167         assert(*next(m.begin(), 1) == 3);
    168         assert(*next(m.begin(), 2) == 5);
    169         assert(*next(m.begin(), 3) == 6);
    170         assert(*next(m.begin(), 4) == 7);
    171 
    172         i = m.erase(3);
    173         assert(m.size() == 4);
    174         assert(i == 1);
    175         assert(*next(m.begin(), 0) == 2);
    176         assert(*next(m.begin(), 1) == 5);
    177         assert(*next(m.begin(), 2) == 6);
    178         assert(*next(m.begin(), 3) == 7);
    179 
    180         i = m.erase(6);
    181         assert(m.size() == 3);
    182         assert(i == 1);
    183         assert(*next(m.begin(), 0) == 2);
    184         assert(*next(m.begin(), 1) == 5);
    185         assert(*next(m.begin(), 2) == 7);
    186 
    187         i = m.erase(7);
    188         assert(m.size() == 2);
    189         assert(i == 1);
    190         assert(*next(m.begin(), 0) == 2);
    191         assert(*next(m.begin(), 1) == 5);
    192 
    193         i = m.erase(2);
    194         assert(m.size() == 1);
    195         assert(i == 1);
    196         assert(*next(m.begin(), 0) == 5);
    197 
    198         i = m.erase(5);
    199         assert(m.size() == 0);
    200         assert(i == 1);
    201     }
    202 #endif
    203 }
    204