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, class Pred, class Alloc>
     13 // bool
     14 // operator==(const unordered_map<Key, T, Hash, Pred, Alloc>& x,
     15 //            const unordered_map<Key, T, Hash, Pred, Alloc>& y);
     16 //
     17 // template <class Key, class T, class Hash, class Pred, class Alloc>
     18 // bool
     19 // operator!=(const unordered_map<Key, T, Hash, Pred, Alloc>& x,
     20 //            const unordered_map<Key, T, Hash, Pred, Alloc>& y);
     21 
     22 #include <unordered_map>
     23 #include <string>
     24 #include <cassert>
     25 
     26 #include "min_allocator.h"
     27 
     28 int main()
     29 {
     30     {
     31         typedef std::unordered_map<int, std::string> C;
     32         typedef std::pair<int, std::string> P;
     33         P a[] =
     34         {
     35             P(10, "ten"),
     36             P(20, "twenty"),
     37             P(30, "thirty"),
     38             P(40, "forty"),
     39             P(50, "fifty"),
     40             P(60, "sixty"),
     41             P(70, "seventy"),
     42             P(80, "eighty"),
     43         };
     44         const C c1(std::begin(a), std::end(a));
     45         const C c2;
     46         assert(!(c1 == c2));
     47         assert( (c1 != c2));
     48     }
     49     {
     50         typedef std::unordered_map<int, std::string> C;
     51         typedef std::pair<int, std::string> P;
     52         P a[] =
     53         {
     54             P(10, "ten"),
     55             P(20, "twenty"),
     56             P(30, "thirty"),
     57             P(40, "forty"),
     58             P(50, "fifty"),
     59             P(60, "sixty"),
     60             P(70, "seventy"),
     61             P(80, "eighty"),
     62         };
     63         const C c1(std::begin(a), std::end(a));
     64         const C c2 = c1;
     65         assert( (c1 == c2));
     66         assert(!(c1 != c2));
     67     }
     68     {
     69         typedef std::unordered_map<int, std::string> C;
     70         typedef std::pair<int, std::string> P;
     71         P a[] =
     72         {
     73             P(10, "ten"),
     74             P(20, "twenty"),
     75             P(30, "thirty"),
     76             P(40, "forty"),
     77             P(50, "fifty"),
     78             P(60, "sixty"),
     79             P(70, "seventy"),
     80             P(80, "eighty"),
     81         };
     82         C c1(std::begin(a), std::end(a));
     83         C c2 = c1;
     84         c2.rehash(30);
     85         assert( (c1 == c2));
     86         assert(!(c1 != c2));
     87         c2.insert(P(90, "ninety"));
     88         assert(!(c1 == c2));
     89         assert( (c1 != c2));
     90         c1.insert(P(90, "ninety"));
     91         assert( (c1 == c2));
     92         assert(!(c1 != c2));
     93     }
     94 #if __cplusplus >= 201103L
     95     {
     96         typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
     97                             min_allocator<std::pair<const int, std::string>>> C;
     98         typedef std::pair<int, std::string> P;
     99         P a[] =
    100         {
    101             P(10, "ten"),
    102             P(20, "twenty"),
    103             P(30, "thirty"),
    104             P(40, "forty"),
    105             P(50, "fifty"),
    106             P(60, "sixty"),
    107             P(70, "seventy"),
    108             P(80, "eighty"),
    109         };
    110         const C c1(std::begin(a), std::end(a));
    111         const C c2;
    112         assert(!(c1 == c2));
    113         assert( (c1 != c2));
    114     }
    115     {
    116         typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
    117                             min_allocator<std::pair<const int, std::string>>> C;
    118         typedef std::pair<int, std::string> P;
    119         P a[] =
    120         {
    121             P(10, "ten"),
    122             P(20, "twenty"),
    123             P(30, "thirty"),
    124             P(40, "forty"),
    125             P(50, "fifty"),
    126             P(60, "sixty"),
    127             P(70, "seventy"),
    128             P(80, "eighty"),
    129         };
    130         const C c1(std::begin(a), std::end(a));
    131         const C c2 = c1;
    132         assert( (c1 == c2));
    133         assert(!(c1 != c2));
    134     }
    135     {
    136         typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
    137                             min_allocator<std::pair<const int, std::string>>> C;
    138         typedef std::pair<int, std::string> P;
    139         P a[] =
    140         {
    141             P(10, "ten"),
    142             P(20, "twenty"),
    143             P(30, "thirty"),
    144             P(40, "forty"),
    145             P(50, "fifty"),
    146             P(60, "sixty"),
    147             P(70, "seventy"),
    148             P(80, "eighty"),
    149         };
    150         C c1(std::begin(a), std::end(a));
    151         C c2 = c1;
    152         c2.rehash(30);
    153         assert( (c1 == c2));
    154         assert(!(c1 != c2));
    155         c2.insert(P(90, "ninety"));
    156         assert(!(c1 == c2));
    157         assert( (c1 != c2));
    158         c1.insert(P(90, "ninety"));
    159         assert( (c1 == c2));
    160         assert(!(c1 != c2));
    161     }
    162 #endif
    163 }
    164