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 // local_iterator       begin (size_type n);
     17 // local_iterator       end   (size_type n);
     18 // const_local_iterator begin (size_type n) const;
     19 // const_local_iterator end   (size_type n) const;
     20 // const_local_iterator cbegin(size_type n) const;
     21 // const_local_iterator cend  (size_type n) const;
     22 
     23 #include <unordered_set>
     24 #include <cassert>
     25 
     26 #include "min_allocator.h"
     27 
     28 int main()
     29 {
     30     {
     31         typedef std::unordered_set<int> C;
     32         typedef int P;
     33         typedef C::local_iterator I;
     34         P a[] =
     35         {
     36             P(1),
     37             P(2),
     38             P(3),
     39             P(4),
     40             P(1),
     41             P(2)
     42         };
     43         C c(a, a + sizeof(a)/sizeof(a[0]));
     44         assert(c.bucket_count() >= 5);
     45         C::size_type b = c.bucket(0);
     46         I i = c.begin(b);
     47         I j = c.end(b);
     48         assert(std::distance(i, j) == 0);
     49 
     50         b = c.bucket(1);
     51         i = c.begin(b);
     52         j = c.end(b);
     53         assert(std::distance(i, j) == 1);
     54         assert(*i == 1);
     55 
     56         b = c.bucket(2);
     57         i = c.begin(b);
     58         j = c.end(b);
     59         assert(std::distance(i, j) == 1);
     60         assert(*i == 2);
     61 
     62         b = c.bucket(3);
     63         i = c.begin(b);
     64         j = c.end(b);
     65         assert(std::distance(i, j) == 1);
     66         assert(*i == 3);
     67 
     68         b = c.bucket(4);
     69         i = c.begin(b);
     70         j = c.end(b);
     71         assert(std::distance(i, j) == 1);
     72         assert(*i == 4);
     73     }
     74     {
     75         typedef std::unordered_set<int> C;
     76         typedef int P;
     77         typedef C::const_local_iterator I;
     78         P a[] =
     79         {
     80             P(1),
     81             P(2),
     82             P(3),
     83             P(4),
     84             P(1),
     85             P(2)
     86         };
     87         const C c(a, a + sizeof(a)/sizeof(a[0]));
     88         assert(c.bucket_count() >= 5);
     89         C::size_type b = c.bucket(0);
     90         I i = c.begin(b);
     91         I j = c.end(b);
     92         assert(std::distance(i, j) == 0);
     93 
     94         b = c.bucket(1);
     95         i = c.begin(b);
     96         j = c.end(b);
     97         assert(std::distance(i, j) == 1);
     98         assert(*i == 1);
     99 
    100         b = c.bucket(2);
    101         i = c.begin(b);
    102         j = c.end(b);
    103         assert(std::distance(i, j) == 1);
    104         assert(*i == 2);
    105 
    106         b = c.bucket(3);
    107         i = c.begin(b);
    108         j = c.end(b);
    109         assert(std::distance(i, j) == 1);
    110         assert(*i == 3);
    111 
    112         b = c.bucket(4);
    113         i = c.begin(b);
    114         j = c.end(b);
    115         assert(std::distance(i, j) == 1);
    116         assert(*i == 4);
    117     }
    118     {
    119         typedef std::unordered_set<int> C;
    120         typedef int P;
    121         typedef C::const_local_iterator I;
    122         P a[] =
    123         {
    124             P(1),
    125             P(2),
    126             P(3),
    127             P(4),
    128             P(1),
    129             P(2)
    130         };
    131         C c(a, a + sizeof(a)/sizeof(a[0]));
    132         assert(c.bucket_count() >= 5);
    133         C::size_type b = c.bucket(0);
    134         I i = c.cbegin(b);
    135         I j = c.cend(b);
    136         assert(std::distance(i, j) == 0);
    137 
    138         b = c.bucket(1);
    139         i = c.cbegin(b);
    140         j = c.cend(b);
    141         assert(std::distance(i, j) == 1);
    142         assert(*i == 1);
    143 
    144         b = c.bucket(2);
    145         i = c.cbegin(b);
    146         j = c.cend(b);
    147         assert(std::distance(i, j) == 1);
    148         assert(*i == 2);
    149 
    150         b = c.bucket(3);
    151         i = c.cbegin(b);
    152         j = c.cend(b);
    153         assert(std::distance(i, j) == 1);
    154         assert(*i == 3);
    155 
    156         b = c.bucket(4);
    157         i = c.cbegin(b);
    158         j = c.cend(b);
    159         assert(std::distance(i, j) == 1);
    160         assert(*i == 4);
    161     }
    162     {
    163         typedef std::unordered_set<int> C;
    164         typedef int P;
    165         typedef C::const_local_iterator I;
    166         P a[] =
    167         {
    168             P(1),
    169             P(2),
    170             P(3),
    171             P(4),
    172             P(1),
    173             P(2)
    174         };
    175         const C c(a, a + sizeof(a)/sizeof(a[0]));
    176         assert(c.bucket_count() >= 5);
    177         C::size_type b = c.bucket(0);
    178         I i = c.cbegin(b);
    179         I j = c.cend(b);
    180         assert(std::distance(i, j) == 0);
    181 
    182         b = c.bucket(1);
    183         i = c.cbegin(b);
    184         j = c.cend(b);
    185         assert(std::distance(i, j) == 1);
    186         assert(*i == 1);
    187 
    188         b = c.bucket(2);
    189         i = c.cbegin(b);
    190         j = c.cend(b);
    191         assert(std::distance(i, j) == 1);
    192         assert(*i == 2);
    193 
    194         b = c.bucket(3);
    195         i = c.cbegin(b);
    196         j = c.cend(b);
    197         assert(std::distance(i, j) == 1);
    198         assert(*i == 3);
    199 
    200         b = c.bucket(4);
    201         i = c.cbegin(b);
    202         j = c.cend(b);
    203         assert(std::distance(i, j) == 1);
    204         assert(*i == 4);
    205     }
    206 #if __cplusplus >= 201103L
    207     {
    208         typedef std::unordered_set<int, std::hash<int>,
    209                                       std::equal_to<int>, min_allocator<int>> C;
    210         typedef int P;
    211         typedef C::local_iterator I;
    212         P a[] =
    213         {
    214             P(1),
    215             P(2),
    216             P(3),
    217             P(4),
    218             P(1),
    219             P(2)
    220         };
    221         C c(a, a + sizeof(a)/sizeof(a[0]));
    222         assert(c.bucket_count() >= 5);
    223         C::size_type b = c.bucket(0);
    224         I i = c.begin(b);
    225         I j = c.end(b);
    226         assert(std::distance(i, j) == 0);
    227 
    228         b = c.bucket(1);
    229         i = c.begin(b);
    230         j = c.end(b);
    231         assert(std::distance(i, j) == 1);
    232         assert(*i == 1);
    233 
    234         b = c.bucket(2);
    235         i = c.begin(b);
    236         j = c.end(b);
    237         assert(std::distance(i, j) == 1);
    238         assert(*i == 2);
    239 
    240         b = c.bucket(3);
    241         i = c.begin(b);
    242         j = c.end(b);
    243         assert(std::distance(i, j) == 1);
    244         assert(*i == 3);
    245 
    246         b = c.bucket(4);
    247         i = c.begin(b);
    248         j = c.end(b);
    249         assert(std::distance(i, j) == 1);
    250         assert(*i == 4);
    251     }
    252     {
    253         typedef std::unordered_set<int, std::hash<int>,
    254                                       std::equal_to<int>, min_allocator<int>> C;
    255         typedef int P;
    256         typedef C::const_local_iterator I;
    257         P a[] =
    258         {
    259             P(1),
    260             P(2),
    261             P(3),
    262             P(4),
    263             P(1),
    264             P(2)
    265         };
    266         const C c(a, a + sizeof(a)/sizeof(a[0]));
    267         assert(c.bucket_count() >= 5);
    268         C::size_type b = c.bucket(0);
    269         I i = c.begin(b);
    270         I j = c.end(b);
    271         assert(std::distance(i, j) == 0);
    272 
    273         b = c.bucket(1);
    274         i = c.begin(b);
    275         j = c.end(b);
    276         assert(std::distance(i, j) == 1);
    277         assert(*i == 1);
    278 
    279         b = c.bucket(2);
    280         i = c.begin(b);
    281         j = c.end(b);
    282         assert(std::distance(i, j) == 1);
    283         assert(*i == 2);
    284 
    285         b = c.bucket(3);
    286         i = c.begin(b);
    287         j = c.end(b);
    288         assert(std::distance(i, j) == 1);
    289         assert(*i == 3);
    290 
    291         b = c.bucket(4);
    292         i = c.begin(b);
    293         j = c.end(b);
    294         assert(std::distance(i, j) == 1);
    295         assert(*i == 4);
    296     }
    297     {
    298         typedef std::unordered_set<int, std::hash<int>,
    299                                       std::equal_to<int>, min_allocator<int>> C;
    300         typedef int P;
    301         typedef C::const_local_iterator I;
    302         P a[] =
    303         {
    304             P(1),
    305             P(2),
    306             P(3),
    307             P(4),
    308             P(1),
    309             P(2)
    310         };
    311         C c(a, a + sizeof(a)/sizeof(a[0]));
    312         assert(c.bucket_count() >= 5);
    313         C::size_type b = c.bucket(0);
    314         I i = c.cbegin(b);
    315         I j = c.cend(b);
    316         assert(std::distance(i, j) == 0);
    317 
    318         b = c.bucket(1);
    319         i = c.cbegin(b);
    320         j = c.cend(b);
    321         assert(std::distance(i, j) == 1);
    322         assert(*i == 1);
    323 
    324         b = c.bucket(2);
    325         i = c.cbegin(b);
    326         j = c.cend(b);
    327         assert(std::distance(i, j) == 1);
    328         assert(*i == 2);
    329 
    330         b = c.bucket(3);
    331         i = c.cbegin(b);
    332         j = c.cend(b);
    333         assert(std::distance(i, j) == 1);
    334         assert(*i == 3);
    335 
    336         b = c.bucket(4);
    337         i = c.cbegin(b);
    338         j = c.cend(b);
    339         assert(std::distance(i, j) == 1);
    340         assert(*i == 4);
    341     }
    342     {
    343         typedef std::unordered_set<int, std::hash<int>,
    344                                       std::equal_to<int>, min_allocator<int>> C;
    345         typedef int P;
    346         typedef C::const_local_iterator I;
    347         P a[] =
    348         {
    349             P(1),
    350             P(2),
    351             P(3),
    352             P(4),
    353             P(1),
    354             P(2)
    355         };
    356         const C c(a, a + sizeof(a)/sizeof(a[0]));
    357         assert(c.bucket_count() >= 5);
    358         C::size_type b = c.bucket(0);
    359         I i = c.cbegin(b);
    360         I j = c.cend(b);
    361         assert(std::distance(i, j) == 0);
    362 
    363         b = c.bucket(1);
    364         i = c.cbegin(b);
    365         j = c.cend(b);
    366         assert(std::distance(i, j) == 1);
    367         assert(*i == 1);
    368 
    369         b = c.bucket(2);
    370         i = c.cbegin(b);
    371         j = c.cend(b);
    372         assert(std::distance(i, j) == 1);
    373         assert(*i == 2);
    374 
    375         b = c.bucket(3);
    376         i = c.cbegin(b);
    377         j = c.cend(b);
    378         assert(std::distance(i, j) == 1);
    379         assert(*i == 3);
    380 
    381         b = c.bucket(4);
    382         i = c.cbegin(b);
    383         j = c.cend(b);
    384         assert(std::distance(i, j) == 1);
    385         assert(*i == 4);
    386     }
    387 #endif
    388 }
    389