Home | History | Annotate | Download | only in unord.multiset
      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_multiset
     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 int main()
     27 {
     28     {
     29         typedef std::unordered_multiset<int> C;
     30         typedef int P;
     31         typedef C::local_iterator I;
     32         P a[] =
     33         {
     34             P(1),
     35             P(2),
     36             P(3),
     37             P(4),
     38             P(1),
     39             P(2)
     40         };
     41         C c(a, a + sizeof(a)/sizeof(a[0]));
     42         assert(c.bucket_count() >= 7);
     43         C::size_type b = c.bucket(0);
     44         I i = c.begin(b);
     45         I j = c.end(b);
     46         assert(std::distance(i, j) == 0);
     47 
     48         b = c.bucket(1);
     49         i = c.begin(b);
     50         j = c.end(b);
     51         assert(std::distance(i, j) == 2);
     52         assert(*i == 1);
     53         ++i;
     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) == 2);
     60         assert(*i == 2);
     61         ++i;
     62         assert(*i == 2);
     63 
     64         b = c.bucket(3);
     65         i = c.begin(b);
     66         j = c.end(b);
     67         assert(std::distance(i, j) == 1);
     68         assert(*i == 3);
     69 
     70         b = c.bucket(4);
     71         i = c.begin(b);
     72         j = c.end(b);
     73         assert(std::distance(i, j) == 1);
     74         assert(*i == 4);
     75 
     76         b = c.bucket(5);
     77         i = c.begin(b);
     78         j = c.end(b);
     79         assert(std::distance(i, j) == 0);
     80 
     81         b = c.bucket(6);
     82         i = c.begin(b);
     83         j = c.end(b);
     84         assert(std::distance(i, j) == 0);
     85     }
     86     {
     87         typedef std::unordered_multiset<int> C;
     88         typedef int P;
     89         typedef C::const_local_iterator I;
     90         P a[] =
     91         {
     92             P(1),
     93             P(2),
     94             P(3),
     95             P(4),
     96             P(1),
     97             P(2)
     98         };
     99         const C c(a, a + sizeof(a)/sizeof(a[0]));
    100         assert(c.bucket_count() >= 7);
    101         C::size_type b = c.bucket(0);
    102         I i = c.begin(b);
    103         I j = c.end(b);
    104         assert(std::distance(i, j) == 0);
    105 
    106         b = c.bucket(1);
    107         i = c.begin(b);
    108         j = c.end(b);
    109         assert(std::distance(i, j) == 2);
    110         assert(*i == 1);
    111         ++i;
    112         assert(*i == 1);
    113 
    114         b = c.bucket(2);
    115         i = c.begin(b);
    116         j = c.end(b);
    117         assert(std::distance(i, j) == 2);
    118         assert(*i == 2);
    119         ++i;
    120         assert(*i == 2);
    121 
    122         b = c.bucket(3);
    123         i = c.begin(b);
    124         j = c.end(b);
    125         assert(std::distance(i, j) == 1);
    126         assert(*i == 3);
    127 
    128         b = c.bucket(4);
    129         i = c.begin(b);
    130         j = c.end(b);
    131         assert(std::distance(i, j) == 1);
    132         assert(*i == 4);
    133 
    134         b = c.bucket(5);
    135         i = c.begin(b);
    136         j = c.end(b);
    137         assert(std::distance(i, j) == 0);
    138 
    139         b = c.bucket(6);
    140         i = c.begin(b);
    141         j = c.end(b);
    142         assert(std::distance(i, j) == 0);
    143     }
    144     {
    145         typedef std::unordered_multiset<int> C;
    146         typedef int P;
    147         typedef C::const_local_iterator I;
    148         P a[] =
    149         {
    150             P(1),
    151             P(2),
    152             P(3),
    153             P(4),
    154             P(1),
    155             P(2)
    156         };
    157         C c(a, a + sizeof(a)/sizeof(a[0]));
    158         assert(c.bucket_count() >= 7);
    159         C::size_type b = c.bucket(0);
    160         I i = c.cbegin(b);
    161         I j = c.cend(b);
    162         assert(std::distance(i, j) == 0);
    163 
    164         b = c.bucket(1);
    165         i = c.cbegin(b);
    166         j = c.cend(b);
    167         assert(std::distance(i, j) == 2);
    168         assert(*i == 1);
    169         ++i;
    170         assert(*i == 1);
    171 
    172         b = c.bucket(2);
    173         i = c.cbegin(b);
    174         j = c.cend(b);
    175         assert(std::distance(i, j) == 2);
    176         assert(*i == 2);
    177         ++i;
    178         assert(*i == 2);
    179 
    180         b = c.bucket(3);
    181         i = c.cbegin(b);
    182         j = c.cend(b);
    183         assert(std::distance(i, j) == 1);
    184         assert(*i == 3);
    185 
    186         b = c.bucket(4);
    187         i = c.cbegin(b);
    188         j = c.cend(b);
    189         assert(std::distance(i, j) == 1);
    190         assert(*i == 4);
    191 
    192         b = c.bucket(5);
    193         i = c.cbegin(b);
    194         j = c.cend(b);
    195         assert(std::distance(i, j) == 0);
    196 
    197         b = c.bucket(6);
    198         i = c.cbegin(b);
    199         j = c.cend(b);
    200         assert(std::distance(i, j) == 0);
    201     }
    202     {
    203         typedef std::unordered_multiset<int> C;
    204         typedef int P;
    205         typedef C::const_local_iterator I;
    206         P a[] =
    207         {
    208             P(1),
    209             P(2),
    210             P(3),
    211             P(4),
    212             P(1),
    213             P(2)
    214         };
    215         const C c(a, a + sizeof(a)/sizeof(a[0]));
    216         assert(c.bucket_count() >= 7);
    217         C::size_type b = c.bucket(0);
    218         I i = c.cbegin(b);
    219         I j = c.cend(b);
    220         assert(std::distance(i, j) == 0);
    221 
    222         b = c.bucket(1);
    223         i = c.cbegin(b);
    224         j = c.cend(b);
    225         assert(std::distance(i, j) == 2);
    226         assert(*i == 1);
    227         ++i;
    228         assert(*i == 1);
    229 
    230         b = c.bucket(2);
    231         i = c.cbegin(b);
    232         j = c.cend(b);
    233         assert(std::distance(i, j) == 2);
    234         assert(*i == 2);
    235         ++i;
    236         assert(*i == 2);
    237 
    238         b = c.bucket(3);
    239         i = c.cbegin(b);
    240         j = c.cend(b);
    241         assert(std::distance(i, j) == 1);
    242         assert(*i == 3);
    243 
    244         b = c.bucket(4);
    245         i = c.cbegin(b);
    246         j = c.cend(b);
    247         assert(std::distance(i, j) == 1);
    248         assert(*i == 4);
    249 
    250         b = c.bucket(5);
    251         i = c.cbegin(b);
    252         j = c.cend(b);
    253         assert(std::distance(i, j) == 0);
    254 
    255         b = c.bucket(6);
    256         i = c.cbegin(b);
    257         j = c.cend(b);
    258         assert(std::distance(i, j) == 0);
    259     }
    260 }
    261