insert_rvalue.pass.cpp (4563B)
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 // UNSUPPORTED: c++98, c++03 11 12 // <unordered_map> 13 14 // template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 15 // class Alloc = allocator<pair<const Key, T>>> 16 // class unordered_multimap 17 18 // template <class P, 19 // class = typename enable_if<is_convertible<P, value_type>::value>::type> 20 // iterator insert(P&& x); 21 22 #include <unordered_map> 23 #include <cassert> 24 25 #include "MoveOnly.h" 26 #include "min_allocator.h" 27 28 int main() 29 { 30 { 31 typedef std::unordered_multimap<double, int> C; 32 typedef C::iterator R; 33 typedef std::pair<double, short> P; 34 C c; 35 R r = c.insert(P(3.5, static_cast<short>(3))); 36 assert(c.size() == 1); 37 assert(r->first == 3.5); 38 assert(r->second == 3); 39 40 r = c.insert(P(3.5, static_cast<short>(4))); 41 assert(c.size() == 2); 42 assert(r->first == 3.5); 43 assert(r->second == 4); 44 45 r = c.insert(P(4.5, static_cast<short>(4))); 46 assert(c.size() == 3); 47 assert(r->first == 4.5); 48 assert(r->second == 4); 49 50 r = c.insert(P(5.5, static_cast<short>(4))); 51 assert(c.size() == 4); 52 assert(r->first == 5.5); 53 assert(r->second == 4); 54 } 55 { 56 typedef std::unordered_multimap<MoveOnly, MoveOnly> C; 57 typedef C::iterator R; 58 typedef std::pair<MoveOnly, MoveOnly> P; 59 C c; 60 R r = c.insert(P(3, 3)); 61 assert(c.size() == 1); 62 assert(r->first == 3); 63 assert(r->second == 3); 64 65 r = c.insert(P(3, 4)); 66 assert(c.size() == 2); 67 assert(r->first == 3); 68 assert(r->second == 4); 69 70 r = c.insert(P(4, 4)); 71 assert(c.size() == 3); 72 assert(r->first == 4); 73 assert(r->second == 4); 74 75 r = c.insert(P(5, 4)); 76 assert(c.size() == 4); 77 assert(r->first == 5); 78 assert(r->second == 4); 79 } 80 { 81 typedef std::unordered_multimap<double, int, std::hash<double>, std::equal_to<double>, 82 min_allocator<std::pair<const double, int>>> C; 83 typedef C::iterator R; 84 typedef std::pair<double, short> P; 85 C c; 86 R r = c.insert(P(3.5, static_cast<short>(3))); 87 assert(c.size() == 1); 88 assert(r->first == 3.5); 89 assert(r->second == 3); 90 91 r = c.insert(P(3.5, static_cast<short>(4))); 92 assert(c.size() == 2); 93 assert(r->first == 3.5); 94 assert(r->second == 4); 95 96 r = c.insert(P(4.5, static_cast<short>(4))); 97 assert(c.size() == 3); 98 assert(r->first == 4.5); 99 assert(r->second == 4); 100 101 r = c.insert(P(5.5, static_cast<short>(4))); 102 assert(c.size() == 4); 103 assert(r->first == 5.5); 104 assert(r->second == 4); 105 } 106 { 107 typedef std::unordered_multimap<MoveOnly, MoveOnly, std::hash<MoveOnly>, std::equal_to<MoveOnly>, 108 min_allocator<std::pair<const MoveOnly, MoveOnly>>> C; 109 typedef C::iterator R; 110 typedef std::pair<MoveOnly, MoveOnly> P; 111 C c; 112 R r = c.insert(P(3, 3)); 113 assert(c.size() == 1); 114 assert(r->first == 3); 115 assert(r->second == 3); 116 117 r = c.insert(P(3, 4)); 118 assert(c.size() == 2); 119 assert(r->first == 3); 120 assert(r->second == 4); 121 122 r = c.insert(P(4, 4)); 123 assert(c.size() == 3); 124 assert(r->first == 4); 125 assert(r->second == 4); 126 127 r = c.insert(P(5, 4)); 128 assert(c.size() == 4); 129 assert(r->first == 5); 130 assert(r->second == 4); 131 } 132 { 133 typedef std::unordered_multimap<double, MoveOnly> C; 134 typedef C::iterator R; 135 C c; 136 R r = c.insert({3.5, 3}); 137 assert(c.size() == 1); 138 assert(r->first == 3.5); 139 assert(r->second == 3); 140 141 r = c.insert({3.5, 4}); 142 assert(c.size() == 2); 143 assert(r->first == 3.5); 144 assert(r->second == 4); 145 146 r = c.insert({4.5, 4}); 147 assert(c.size() == 3); 148 assert(r->first == 4.5); 149 assert(r->second == 4); 150 151 r = c.insert({5.5, 4}); 152 assert(c.size() == 4); 153 assert(r->first == 5.5); 154 assert(r->second == 4); 155 } 156 }