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_set> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>, 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class Alloc = allocator<Value>> 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class unordered_set 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// pair<iterator, bool> insert(value_type&& x); 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <unordered_set> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 215cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert#include "MoveOnly.h" 22061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::unordered_set<double> C; 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::pair<C::iterator, bool> R; 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef double P; 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c; 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant R r = c.insert(P(3.5)); 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 1); 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 3.5); 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(r.second); 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = c.insert(P(3.5)); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 1); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 3.5); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!r.second); 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = c.insert(P(4.5)); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 2); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 4.5); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(r.second); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = c.insert(P(5.5)); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 3); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 5.5); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(r.second); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 5173d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::unordered_set<MoveOnly> C; 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::pair<C::iterator, bool> R; 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef MoveOnly P; 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant C c; 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant R r = c.insert(P(3)); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 1); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 3); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(r.second); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = c.insert(P(3)); 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 1); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 3); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!r.second); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = c.insert(P(4)); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 2); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 4); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(r.second); 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant r = c.insert(P(5)); 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(c.size() == 3); 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*r.first == 5); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(r.second); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 7773d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 787a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#if __cplusplus >= 201103L 797a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 807a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::unordered_set<double, std::hash<double>, 817a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant std::equal_to<double>, min_allocator<double>> C; 827a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::pair<C::iterator, bool> R; 837a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef double P; 847a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant C c; 857a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant R r = c.insert(P(3.5)); 867a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 1); 877a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 3.5); 887a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(r.second); 897a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant 907a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant r = c.insert(P(3.5)); 917a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 1); 927a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 3.5); 937a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(!r.second); 947a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant 957a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant r = c.insert(P(4.5)); 967a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 2); 977a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 4.5); 987a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(r.second); 997a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant 1007a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant r = c.insert(P(5.5)); 1017a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 3); 1027a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 5.5); 1037a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(r.second); 1047a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant } 1057a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 1067a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant { 1077a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::unordered_set<MoveOnly, std::hash<MoveOnly>, 1087a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant std::equal_to<MoveOnly>, min_allocator<MoveOnly>> C; 1097a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef std::pair<C::iterator, bool> R; 1107a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant typedef MoveOnly P; 1117a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant C c; 1127a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant R r = c.insert(P(3)); 1137a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 1); 1147a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 3); 1157a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(r.second); 1167a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant 1177a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant r = c.insert(P(3)); 1187a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 1); 1197a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 3); 1207a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(!r.second); 1217a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant 1227a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant r = c.insert(P(4)); 1237a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 2); 1247a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 4); 1257a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(r.second); 1267a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant 1277a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant r = c.insert(P(5)); 1287a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(c.size() == 3); 1297a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(*r.first == 5); 1307a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant assert(r.second); 1317a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant } 1327a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 1337a6b7cedcb3359ad7d77e355b02ab982d9d2b25bHoward Hinnant#endif 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 135