insert_hint_rvalue.pass.cpp revision 5e57142c5902c3f73a6fdcb8cab55e88ffb43a56
16fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org//===----------------------------------------------------------------------===// 26fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// 36fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// The LLVM Compiler Infrastructure 46fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// 56fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// This file is dual licensed under the MIT and the University of Illinois Open 66fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// Source Licenses. See LICENSE.TXT for details. 76fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// 8b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com//===----------------------------------------------------------------------===// 96fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org// <unordered_map> 11b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 1210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 13b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com// class Alloc = allocator<pair<const Key, T>>> 14b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com// class unordered_map 15b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 16b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com// template <class P, 17b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com// class = typename enable_if<is_convertible<P, value_type>::value>::type> 18b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com// iterator insert(const_iterator p, P&& x); 19db9ac6c76553d95d7eb35e2bcf84c16a7901c3c3fgalligan@chromium.org 206fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if _LIBCPP_DEBUG >= 1 216fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) 227765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#endif 23b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include <unordered_map> 25ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org#include <cassert> 26b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 27b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com#include "../../../MoveOnly.h" 28b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com#include "../../../min_allocator.h" 29b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 30b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.comint main() 31b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com{ 320d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org { 330d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org typedef std::unordered_map<double, int> C; 34b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com typedef C::iterator R; 35b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com typedef std::pair<double, short> P; 36b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com C c; 37b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com C::const_iterator e = c.end(); 38b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com R r = c.insert(e, P(3.5, 3)); 39b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(c.size() == 1); 406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(r->first == 3.5); 416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(r->second == 3); 42b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 43b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com r = c.insert(c.end(), P(3.5, 4)); 44b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(c.size() == 1); 45b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->first == 3.5); 4653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org assert(r->second == 3); 47b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 48b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com r = c.insert(c.end(), P(4.5, 4)); 49b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(c.size() == 2); 50b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->first == 4.5); 51b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->second == 4); 52b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 53b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com r = c.insert(c.end(), P(5.5, 4)); 54b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(c.size() == 3); 55b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->first == 5.5); 56b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->second == 4); 57b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com } 58b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 59b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com { 60b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com typedef std::unordered_map<MoveOnly, MoveOnly> C; 61b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com typedef C::iterator R; 62b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com typedef std::pair<MoveOnly, MoveOnly> P; 636fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org C c; 6483d2f0fd2cf05bc0c31ad217ed7675c2f1e92e4dgrunell@chromium.org C::const_iterator e = c.end(); 65f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org R r = c.insert(e, P(3, 3)); 66b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(c.size() == 1); 676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(r->first == 3); 68b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->second == 3); 69b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 70daa317752787969f0b39e74dacf35acc11e4b79afgalligan@chromium.org r = c.insert(c.end(), P(3, 4)); 716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(c.size() == 1); 72b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->first == 3); 736fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(r->second == 3); 74b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com 75b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com r = c.insert(c.end(), P(4, 4)); 76b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(c.size() == 2); 77b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->first == 4); 78b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->second == 4); 796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 806fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org r = c.insert(c.end(), P(5, 4)); 81b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(c.size() == 3); 826fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(r->first == 5); 83b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com assert(r->second == 4); 84b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com } 85b3c3acc1cc5528d92ba97dee9602ad7fb87b53bfchrome-bot@google.com#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#if __cplusplus >= 201103L 8793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org { 8888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org typedef std::unordered_map<double, int, std::hash<double>, std::equal_to<double>, 89d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org min_allocator<std::pair<const double, int>>> C; 9041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org typedef C::iterator R; 9183d2f0fd2cf05bc0c31ad217ed7675c2f1e92e4dgrunell@chromium.org typedef std::pair<double, short> P; 926fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org C c; 9341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org C::const_iterator e = c.end(); 94d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org R r = c.insert(e, P(3.5, 3)); 956fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(c.size() == 1); 96ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org assert(r->first == 3.5); 9788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org assert(r->second == 3); 9841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 99e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org r = c.insert(c.end(), P(3.5, 4)); 10087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assert(c.size() == 1); 1016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org assert(r->first == 3.5); 102 assert(r->second == 3); 103 104 r = c.insert(c.end(), P(4.5, 4)); 105 assert(c.size() == 2); 106 assert(r->first == 4.5); 107 assert(r->second == 4); 108 109 r = c.insert(c.end(), P(5.5, 4)); 110 assert(c.size() == 3); 111 assert(r->first == 5.5); 112 assert(r->second == 4); 113 } 114#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 115 { 116 typedef std::unordered_map<MoveOnly, MoveOnly, std::hash<MoveOnly>, std::equal_to<MoveOnly>, 117 min_allocator<std::pair<const MoveOnly, MoveOnly>>> C; 118 typedef C::iterator R; 119 typedef std::pair<MoveOnly, MoveOnly> P; 120 C c; 121 C::const_iterator e = c.end(); 122 R r = c.insert(e, P(3, 3)); 123 assert(c.size() == 1); 124 assert(r->first == 3); 125 assert(r->second == 3); 126 127 r = c.insert(c.end(), P(3, 4)); 128 assert(c.size() == 1); 129 assert(r->first == 3); 130 assert(r->second == 3); 131 132 r = c.insert(c.end(), P(4, 4)); 133 assert(c.size() == 2); 134 assert(r->first == 4); 135 assert(r->second == 4); 136 137 r = c.insert(c.end(), P(5, 4)); 138 assert(c.size() == 3); 139 assert(r->first == 5); 140 assert(r->second == 4); 141 } 142#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 143#if _LIBCPP_DEBUG >= 1 144 { 145 typedef std::unordered_map<double, int> C; 146 typedef C::iterator R; 147 typedef C::value_type P; 148 C c; 149 C c2; 150 C::const_iterator e = c2.end(); 151 R r = c.insert(e, P(3.5, 3)); 152 assert(false); 153 } 154#endif 155#endif 156} 157