1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <unordered_map> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class Key, class T, class Hash, class Pred, class Alloc> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// bool 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// operator==(const unordered_map<Key, T, Hash, Pred, Alloc>& x, 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const unordered_map<Key, T, Hash, Pred, Alloc>& y); 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class Key, class T, class Hash, class Pred, class Alloc> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// bool 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// operator!=(const unordered_map<Key, T, Hash, Pred, Alloc>& x, 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// const unordered_map<Key, T, Hash, Pred, Alloc>& y); 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <unordered_map> 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <string> 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 277a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::unordered_map<int, std::string> C; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::pair<int, std::string> P; 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P a[] = 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(10, "ten"), 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(20, "twenty"), 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(30, "thirty"), 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(40, "fourty"), 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(50, "fifty"), 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(60, "sixty"), 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(70, "seventy"), 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(80, "eighty"), 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const C c1(std::begin(a), std::end(a)); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const C c2; 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!(c1 == c2)); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert( (c1 != c2)); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::unordered_map<int, std::string> C; 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::pair<int, std::string> P; 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P a[] = 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(10, "ten"), 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(20, "twenty"), 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(30, "thirty"), 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(40, "fourty"), 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(50, "fifty"), 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(60, "sixty"), 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(70, "seventy"), 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(80, "eighty"), 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const C c1(std::begin(a), std::end(a)); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const C c2 = c1; 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert( (c1 == c2)); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!(c1 != c2)); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::unordered_map<int, std::string> C; 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::pair<int, std::string> P; 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P a[] = 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(10, "ten"), 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(20, "twenty"), 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(30, "thirty"), 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(40, "fourty"), 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(50, "fifty"), 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(60, "sixty"), 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(70, "seventy"), 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P(80, "eighty"), 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c1(std::begin(a), std::end(a)); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c2 = c1; 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c2.rehash(30); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert( (c1 == c2)); 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!(c1 != c2)); 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c2.insert(P(90, "ninety")); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!(c1 == c2)); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert( (c1 != c2)); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant c1.insert(P(90, "ninety")); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert( (c1 == c2)); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!(c1 != c2)); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 947a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#if __cplusplus >= 201103L 957a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 967a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>, 977a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant min_allocator<std::pair<const int, std::string>>> C; 987a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::pair<int, std::string> P; 997a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P a[] = 1007a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 1017a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(10, "ten"), 1027a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(20, "twenty"), 1037a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(30, "thirty"), 1047a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(40, "fourty"), 1057a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(50, "fifty"), 1067a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(60, "sixty"), 1077a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(70, "seventy"), 1087a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(80, "eighty"), 1097a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant }; 1107a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant const C c1(std::begin(a), std::end(a)); 1117a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant const C c2; 1127a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(!(c1 == c2)); 1137a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert( (c1 != c2)); 1147a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant } 1157a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 1167a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>, 1177a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant min_allocator<std::pair<const int, std::string>>> C; 1187a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::pair<int, std::string> P; 1197a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P a[] = 1207a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 1217a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(10, "ten"), 1227a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(20, "twenty"), 1237a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(30, "thirty"), 1247a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(40, "fourty"), 1257a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(50, "fifty"), 1267a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(60, "sixty"), 1277a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(70, "seventy"), 1287a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(80, "eighty"), 1297a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant }; 1307a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant const C c1(std::begin(a), std::end(a)); 1317a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant const C c2 = c1; 1327a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert( (c1 == c2)); 1337a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(!(c1 != c2)); 1347a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant } 1357a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 1367a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>, 1377a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant min_allocator<std::pair<const int, std::string>>> C; 1387a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::pair<int, std::string> P; 1397a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P a[] = 1407a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 1417a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(10, "ten"), 1427a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(20, "twenty"), 1437a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(30, "thirty"), 1447a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(40, "fourty"), 1457a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(50, "fifty"), 1467a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(60, "sixty"), 1477a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(70, "seventy"), 1487a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant P(80, "eighty"), 1497a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant }; 1507a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant C c1(std::begin(a), std::end(a)); 1517a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant C c2 = c1; 1527a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant c2.rehash(30); 1537a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert( (c1 == c2)); 1547a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(!(c1 != c2)); 1557a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant c2.insert(P(90, "ninety")); 1567a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(!(c1 == c2)); 1577a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert( (c1 != c2)); 1587a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant c1.insert(P(90, "ninety")); 1597a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert( (c1 == c2)); 1607a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(!(c1 != c2)); 1617a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant } 1627a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#endif 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 164