Home | History | Annotate | Download | only in unord.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 // <unordered_set>
     11 
     12 // template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>,
     13 //           class Alloc = allocator<Value>>
     14 // class unordered_set
     15 
     16 // size_type erase(const key_type& k);
     17 
     18 #include <unordered_set>
     19 #include <string>
     20 #include <cassert>
     21 
     22 #include "../../min_allocator.h"
     23 
     24 int main()
     25 {
     26     {
     27         typedef std::unordered_set<int> C;
     28         typedef int P;
     29         P a[] =
     30         {
     31             P(1),
     32             P(2),
     33             P(3),
     34             P(4),
     35             P(1),
     36             P(2)
     37         };
     38         C c(a, a + sizeof(a)/sizeof(a[0]));
     39         assert(c.erase(5) == 0);
     40         assert(c.size() == 4);
     41         assert(c.count(1) == 1);
     42         assert(c.count(2) == 1);
     43         assert(c.count(3) == 1);
     44         assert(c.count(4) == 1);
     45 
     46         assert(c.erase(2) == 1);
     47         assert(c.size() == 3);
     48         assert(c.count(1) == 1);
     49         assert(c.count(3) == 1);
     50         assert(c.count(4) == 1);
     51 
     52         assert(c.erase(2) == 0);
     53         assert(c.size() == 3);
     54         assert(c.count(1) == 1);
     55         assert(c.count(3) == 1);
     56         assert(c.count(4) == 1);
     57 
     58         assert(c.erase(4) == 1);
     59         assert(c.size() == 2);
     60         assert(c.count(1) == 1);
     61         assert(c.count(3) == 1);
     62 
     63         assert(c.erase(4) == 0);
     64         assert(c.size() == 2);
     65         assert(c.count(1) == 1);
     66         assert(c.count(3) == 1);
     67 
     68         assert(c.erase(1) == 1);
     69         assert(c.size() == 1);
     70         assert(c.count(3) == 1);
     71 
     72         assert(c.erase(1) == 0);
     73         assert(c.size() == 1);
     74         assert(c.count(3) == 1);
     75 
     76         assert(c.erase(3) == 1);
     77         assert(c.size() == 0);
     78 
     79         assert(c.erase(3) == 0);
     80         assert(c.size() == 0);
     81     }
     82 #if __cplusplus >= 201103L
     83     {
     84         typedef std::unordered_set<int, std::hash<int>, std::equal_to<int>, min_allocator<int>> C;
     85         typedef int P;
     86         P a[] =
     87         {
     88             P(1),
     89             P(2),
     90             P(3),
     91             P(4),
     92             P(1),
     93             P(2)
     94         };
     95         C c(a, a + sizeof(a)/sizeof(a[0]));
     96         assert(c.erase(5) == 0);
     97         assert(c.size() == 4);
     98         assert(c.count(1) == 1);
     99         assert(c.count(2) == 1);
    100         assert(c.count(3) == 1);
    101         assert(c.count(4) == 1);
    102 
    103         assert(c.erase(2) == 1);
    104         assert(c.size() == 3);
    105         assert(c.count(1) == 1);
    106         assert(c.count(3) == 1);
    107         assert(c.count(4) == 1);
    108 
    109         assert(c.erase(2) == 0);
    110         assert(c.size() == 3);
    111         assert(c.count(1) == 1);
    112         assert(c.count(3) == 1);
    113         assert(c.count(4) == 1);
    114 
    115         assert(c.erase(4) == 1);
    116         assert(c.size() == 2);
    117         assert(c.count(1) == 1);
    118         assert(c.count(3) == 1);
    119 
    120         assert(c.erase(4) == 0);
    121         assert(c.size() == 2);
    122         assert(c.count(1) == 1);
    123         assert(c.count(3) == 1);
    124 
    125         assert(c.erase(1) == 1);
    126         assert(c.size() == 1);
    127         assert(c.count(3) == 1);
    128 
    129         assert(c.erase(1) == 0);
    130         assert(c.size() == 1);
    131         assert(c.count(3) == 1);
    132 
    133         assert(c.erase(3) == 1);
    134         assert(c.size() == 0);
    135 
    136         assert(c.erase(3) == 0);
    137         assert(c.size() == 0);
    138     }
    139 #endif
    140 }
    141