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