Home | History | Annotate | Download | only in unord.multimap
      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_map>
     11 
     12 // template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>,
     13 //           class Alloc = allocator<pair<const Key, T>>>
     14 // class unordered_multimap
     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_map>
     24 #include <string>
     25 #include <cassert>
     26 
     27 #include "min_allocator.h"
     28 
     29 int main()
     30 {
     31     {
     32         typedef std::unordered_multimap<int, std::string> C;
     33         typedef std::pair<int, std::string> P;
     34         typedef C::local_iterator I;
     35         P a[] =
     36         {
     37             P(1, "one"),
     38             P(2, "two"),
     39             P(3, "three"),
     40             P(4, "four"),
     41             P(1, "four"),
     42             P(2, "four"),
     43         };
     44         C c(a, a + sizeof(a)/sizeof(a[0]));
     45         assert(c.bucket_count() >= 7);
     46         C::size_type b = c.bucket(0);
     47         I i = c.begin(b);
     48         I j = c.end(b);
     49         assert(std::distance(i, j) == 0);
     50 
     51         b = c.bucket(1);
     52         i = c.begin(b);
     53         j = c.end(b);
     54         assert(std::distance(i, j) == 2);
     55         assert(i->first == 1);
     56         assert(i->second == "one");
     57         ++i;
     58         assert(i->first == 1);
     59         assert(i->second == "four");
     60 
     61         b = c.bucket(2);
     62         i = c.begin(b);
     63         j = c.end(b);
     64         assert(std::distance(i, j) == 2);
     65         assert(i->first == 2);
     66         assert(i->second == "two");
     67         ++i;
     68         assert(i->first == 2);
     69         assert(i->second == "four");
     70 
     71         b = c.bucket(3);
     72         i = c.begin(b);
     73         j = c.end(b);
     74         assert(std::distance(i, j) == 1);
     75         assert(i->first == 3);
     76         assert(i->second == "three");
     77 
     78         b = c.bucket(4);
     79         i = c.begin(b);
     80         j = c.end(b);
     81         assert(std::distance(i, j) == 1);
     82         assert(i->first == 4);
     83         assert(i->second == "four");
     84 
     85         b = c.bucket(5);
     86         i = c.begin(b);
     87         j = c.end(b);
     88         assert(std::distance(i, j) == 0);
     89 
     90         b = c.bucket(6);
     91         i = c.begin(b);
     92         j = c.end(b);
     93         assert(std::distance(i, j) == 0);
     94     }
     95     {
     96         typedef std::unordered_multimap<int, std::string> C;
     97         typedef std::pair<int, std::string> P;
     98         typedef C::const_local_iterator I;
     99         P a[] =
    100         {
    101             P(1, "one"),
    102             P(2, "two"),
    103             P(3, "three"),
    104             P(4, "four"),
    105             P(1, "four"),
    106             P(2, "four"),
    107         };
    108         const C c(a, a + sizeof(a)/sizeof(a[0]));
    109         assert(c.bucket_count() >= 7);
    110         C::size_type b = c.bucket(0);
    111         I i = c.begin(b);
    112         I j = c.end(b);
    113         assert(std::distance(i, j) == 0);
    114 
    115         b = c.bucket(1);
    116         i = c.begin(b);
    117         j = c.end(b);
    118         assert(std::distance(i, j) == 2);
    119         assert(i->first == 1);
    120         assert(i->second == "one");
    121         ++i;
    122         assert(i->first == 1);
    123         assert(i->second == "four");
    124 
    125         b = c.bucket(2);
    126         i = c.begin(b);
    127         j = c.end(b);
    128         assert(std::distance(i, j) == 2);
    129         assert(i->first == 2);
    130         assert(i->second == "two");
    131         ++i;
    132         assert(i->first == 2);
    133         assert(i->second == "four");
    134 
    135         b = c.bucket(3);
    136         i = c.begin(b);
    137         j = c.end(b);
    138         assert(std::distance(i, j) == 1);
    139         assert(i->first == 3);
    140         assert(i->second == "three");
    141 
    142         b = c.bucket(4);
    143         i = c.begin(b);
    144         j = c.end(b);
    145         assert(std::distance(i, j) == 1);
    146         assert(i->first == 4);
    147         assert(i->second == "four");
    148 
    149         b = c.bucket(5);
    150         i = c.begin(b);
    151         j = c.end(b);
    152         assert(std::distance(i, j) == 0);
    153 
    154         b = c.bucket(6);
    155         i = c.begin(b);
    156         j = c.end(b);
    157         assert(std::distance(i, j) == 0);
    158     }
    159     {
    160         typedef std::unordered_multimap<int, std::string> C;
    161         typedef std::pair<int, std::string> P;
    162         typedef C::const_local_iterator I;
    163         P a[] =
    164         {
    165             P(1, "one"),
    166             P(2, "two"),
    167             P(3, "three"),
    168             P(4, "four"),
    169             P(1, "four"),
    170             P(2, "four"),
    171         };
    172         C c(a, a + sizeof(a)/sizeof(a[0]));
    173         assert(c.bucket_count() >= 7);
    174         C::size_type b = c.bucket(0);
    175         I i = c.cbegin(b);
    176         I j = c.cend(b);
    177         assert(std::distance(i, j) == 0);
    178 
    179         b = c.bucket(1);
    180         i = c.cbegin(b);
    181         j = c.cend(b);
    182         assert(std::distance(i, j) == 2);
    183         assert(i->first == 1);
    184         assert(i->second == "one");
    185         ++i;
    186         assert(i->first == 1);
    187         assert(i->second == "four");
    188 
    189         b = c.bucket(2);
    190         i = c.cbegin(b);
    191         j = c.cend(b);
    192         assert(std::distance(i, j) == 2);
    193         assert(i->first == 2);
    194         assert(i->second == "two");
    195         ++i;
    196         assert(i->first == 2);
    197         assert(i->second == "four");
    198 
    199         b = c.bucket(3);
    200         i = c.cbegin(b);
    201         j = c.cend(b);
    202         assert(std::distance(i, j) == 1);
    203         assert(i->first == 3);
    204         assert(i->second == "three");
    205 
    206         b = c.bucket(4);
    207         i = c.cbegin(b);
    208         j = c.cend(b);
    209         assert(std::distance(i, j) == 1);
    210         assert(i->first == 4);
    211         assert(i->second == "four");
    212 
    213         b = c.bucket(5);
    214         i = c.cbegin(b);
    215         j = c.cend(b);
    216         assert(std::distance(i, j) == 0);
    217 
    218         b = c.bucket(6);
    219         i = c.cbegin(b);
    220         j = c.cend(b);
    221         assert(std::distance(i, j) == 0);
    222     }
    223     {
    224         typedef std::unordered_multimap<int, std::string> C;
    225         typedef std::pair<int, std::string> P;
    226         typedef C::const_local_iterator I;
    227         P a[] =
    228         {
    229             P(1, "one"),
    230             P(2, "two"),
    231             P(3, "three"),
    232             P(4, "four"),
    233             P(1, "four"),
    234             P(2, "four"),
    235         };
    236         const C c(a, a + sizeof(a)/sizeof(a[0]));
    237         assert(c.bucket_count() >= 7);
    238         C::size_type b = c.bucket(0);
    239         I i = c.cbegin(b);
    240         I j = c.cend(b);
    241         assert(std::distance(i, j) == 0);
    242 
    243         b = c.bucket(1);
    244         i = c.cbegin(b);
    245         j = c.cend(b);
    246         assert(std::distance(i, j) == 2);
    247         assert(i->first == 1);
    248         assert(i->second == "one");
    249         ++i;
    250         assert(i->first == 1);
    251         assert(i->second == "four");
    252 
    253         b = c.bucket(2);
    254         i = c.cbegin(b);
    255         j = c.cend(b);
    256         assert(std::distance(i, j) == 2);
    257         assert(i->first == 2);
    258         assert(i->second == "two");
    259         ++i;
    260         assert(i->first == 2);
    261         assert(i->second == "four");
    262 
    263         b = c.bucket(3);
    264         i = c.cbegin(b);
    265         j = c.cend(b);
    266         assert(std::distance(i, j) == 1);
    267         assert(i->first == 3);
    268         assert(i->second == "three");
    269 
    270         b = c.bucket(4);
    271         i = c.cbegin(b);
    272         j = c.cend(b);
    273         assert(std::distance(i, j) == 1);
    274         assert(i->first == 4);
    275         assert(i->second == "four");
    276 
    277         b = c.bucket(5);
    278         i = c.cbegin(b);
    279         j = c.cend(b);
    280         assert(std::distance(i, j) == 0);
    281 
    282         b = c.bucket(6);
    283         i = c.cbegin(b);
    284         j = c.cend(b);
    285         assert(std::distance(i, j) == 0);
    286     }
    287 #if __cplusplus >= 201103L
    288     {
    289         typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
    290                             min_allocator<std::pair<const int, std::string>>> C;
    291         typedef std::pair<int, std::string> P;
    292         typedef C::local_iterator I;
    293         P a[] =
    294         {
    295             P(1, "one"),
    296             P(2, "two"),
    297             P(3, "three"),
    298             P(4, "four"),
    299             P(1, "four"),
    300             P(2, "four"),
    301         };
    302         C c(a, a + sizeof(a)/sizeof(a[0]));
    303         assert(c.bucket_count() >= 7);
    304         C::size_type b = c.bucket(0);
    305         I i = c.begin(b);
    306         I j = c.end(b);
    307         assert(std::distance(i, j) == 0);
    308 
    309         b = c.bucket(1);
    310         i = c.begin(b);
    311         j = c.end(b);
    312         assert(std::distance(i, j) == 2);
    313         assert(i->first == 1);
    314         assert(i->second == "one");
    315         ++i;
    316         assert(i->first == 1);
    317         assert(i->second == "four");
    318 
    319         b = c.bucket(2);
    320         i = c.begin(b);
    321         j = c.end(b);
    322         assert(std::distance(i, j) == 2);
    323         assert(i->first == 2);
    324         assert(i->second == "two");
    325         ++i;
    326         assert(i->first == 2);
    327         assert(i->second == "four");
    328 
    329         b = c.bucket(3);
    330         i = c.begin(b);
    331         j = c.end(b);
    332         assert(std::distance(i, j) == 1);
    333         assert(i->first == 3);
    334         assert(i->second == "three");
    335 
    336         b = c.bucket(4);
    337         i = c.begin(b);
    338         j = c.end(b);
    339         assert(std::distance(i, j) == 1);
    340         assert(i->first == 4);
    341         assert(i->second == "four");
    342 
    343         b = c.bucket(5);
    344         i = c.begin(b);
    345         j = c.end(b);
    346         assert(std::distance(i, j) == 0);
    347 
    348         b = c.bucket(6);
    349         i = c.begin(b);
    350         j = c.end(b);
    351         assert(std::distance(i, j) == 0);
    352     }
    353     {
    354         typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
    355                             min_allocator<std::pair<const int, std::string>>> C;
    356         typedef std::pair<int, std::string> P;
    357         typedef C::const_local_iterator I;
    358         P a[] =
    359         {
    360             P(1, "one"),
    361             P(2, "two"),
    362             P(3, "three"),
    363             P(4, "four"),
    364             P(1, "four"),
    365             P(2, "four"),
    366         };
    367         const C c(a, a + sizeof(a)/sizeof(a[0]));
    368         assert(c.bucket_count() >= 7);
    369         C::size_type b = c.bucket(0);
    370         I i = c.begin(b);
    371         I j = c.end(b);
    372         assert(std::distance(i, j) == 0);
    373 
    374         b = c.bucket(1);
    375         i = c.begin(b);
    376         j = c.end(b);
    377         assert(std::distance(i, j) == 2);
    378         assert(i->first == 1);
    379         assert(i->second == "one");
    380         ++i;
    381         assert(i->first == 1);
    382         assert(i->second == "four");
    383 
    384         b = c.bucket(2);
    385         i = c.begin(b);
    386         j = c.end(b);
    387         assert(std::distance(i, j) == 2);
    388         assert(i->first == 2);
    389         assert(i->second == "two");
    390         ++i;
    391         assert(i->first == 2);
    392         assert(i->second == "four");
    393 
    394         b = c.bucket(3);
    395         i = c.begin(b);
    396         j = c.end(b);
    397         assert(std::distance(i, j) == 1);
    398         assert(i->first == 3);
    399         assert(i->second == "three");
    400 
    401         b = c.bucket(4);
    402         i = c.begin(b);
    403         j = c.end(b);
    404         assert(std::distance(i, j) == 1);
    405         assert(i->first == 4);
    406         assert(i->second == "four");
    407 
    408         b = c.bucket(5);
    409         i = c.begin(b);
    410         j = c.end(b);
    411         assert(std::distance(i, j) == 0);
    412 
    413         b = c.bucket(6);
    414         i = c.begin(b);
    415         j = c.end(b);
    416         assert(std::distance(i, j) == 0);
    417     }
    418     {
    419         typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
    420                             min_allocator<std::pair<const int, std::string>>> C;
    421         typedef std::pair<int, std::string> P;
    422         typedef C::const_local_iterator I;
    423         P a[] =
    424         {
    425             P(1, "one"),
    426             P(2, "two"),
    427             P(3, "three"),
    428             P(4, "four"),
    429             P(1, "four"),
    430             P(2, "four"),
    431         };
    432         C c(a, a + sizeof(a)/sizeof(a[0]));
    433         assert(c.bucket_count() >= 7);
    434         C::size_type b = c.bucket(0);
    435         I i = c.cbegin(b);
    436         I j = c.cend(b);
    437         assert(std::distance(i, j) == 0);
    438 
    439         b = c.bucket(1);
    440         i = c.cbegin(b);
    441         j = c.cend(b);
    442         assert(std::distance(i, j) == 2);
    443         assert(i->first == 1);
    444         assert(i->second == "one");
    445         ++i;
    446         assert(i->first == 1);
    447         assert(i->second == "four");
    448 
    449         b = c.bucket(2);
    450         i = c.cbegin(b);
    451         j = c.cend(b);
    452         assert(std::distance(i, j) == 2);
    453         assert(i->first == 2);
    454         assert(i->second == "two");
    455         ++i;
    456         assert(i->first == 2);
    457         assert(i->second == "four");
    458 
    459         b = c.bucket(3);
    460         i = c.cbegin(b);
    461         j = c.cend(b);
    462         assert(std::distance(i, j) == 1);
    463         assert(i->first == 3);
    464         assert(i->second == "three");
    465 
    466         b = c.bucket(4);
    467         i = c.cbegin(b);
    468         j = c.cend(b);
    469         assert(std::distance(i, j) == 1);
    470         assert(i->first == 4);
    471         assert(i->second == "four");
    472 
    473         b = c.bucket(5);
    474         i = c.cbegin(b);
    475         j = c.cend(b);
    476         assert(std::distance(i, j) == 0);
    477 
    478         b = c.bucket(6);
    479         i = c.cbegin(b);
    480         j = c.cend(b);
    481         assert(std::distance(i, j) == 0);
    482     }
    483     {
    484         typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
    485                             min_allocator<std::pair<const int, std::string>>> C;
    486         typedef std::pair<int, std::string> P;
    487         typedef C::const_local_iterator I;
    488         P a[] =
    489         {
    490             P(1, "one"),
    491             P(2, "two"),
    492             P(3, "three"),
    493             P(4, "four"),
    494             P(1, "four"),
    495             P(2, "four"),
    496         };
    497         const C c(a, a + sizeof(a)/sizeof(a[0]));
    498         assert(c.bucket_count() >= 7);
    499         C::size_type b = c.bucket(0);
    500         I i = c.cbegin(b);
    501         I j = c.cend(b);
    502         assert(std::distance(i, j) == 0);
    503 
    504         b = c.bucket(1);
    505         i = c.cbegin(b);
    506         j = c.cend(b);
    507         assert(std::distance(i, j) == 2);
    508         assert(i->first == 1);
    509         assert(i->second == "one");
    510         ++i;
    511         assert(i->first == 1);
    512         assert(i->second == "four");
    513 
    514         b = c.bucket(2);
    515         i = c.cbegin(b);
    516         j = c.cend(b);
    517         assert(std::distance(i, j) == 2);
    518         assert(i->first == 2);
    519         assert(i->second == "two");
    520         ++i;
    521         assert(i->first == 2);
    522         assert(i->second == "four");
    523 
    524         b = c.bucket(3);
    525         i = c.cbegin(b);
    526         j = c.cend(b);
    527         assert(std::distance(i, j) == 1);
    528         assert(i->first == 3);
    529         assert(i->second == "three");
    530 
    531         b = c.bucket(4);
    532         i = c.cbegin(b);
    533         j = c.cend(b);
    534         assert(std::distance(i, j) == 1);
    535         assert(i->first == 4);
    536         assert(i->second == "four");
    537 
    538         b = c.bucket(5);
    539         i = c.cbegin(b);
    540         j = c.cend(b);
    541         assert(std::distance(i, j) == 0);
    542 
    543         b = c.bucket(6);
    544         i = c.cbegin(b);
    545         j = c.cend(b);
    546         assert(std::distance(i, j) == 0);
    547     }
    548 #endif
    549 }
    550