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