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 = hash<Key>, class Pred = equal_to<Key>, 13 // class Alloc = allocator<pair<const Key, T>>> 14 // class unordered_map 15 16 // pair<iterator, bool> insert(const value_type& x); 17 18 #include <unordered_map> 19 #include <cassert> 20 21 #include "test_macros.h" 22 #include "min_allocator.h" 23 24 25 template <class Container> 26 void do_insert_cv_test() 27 { 28 typedef Container M; 29 typedef std::pair<typename M::iterator, bool> R; 30 typedef typename M::value_type VT; 31 M m; 32 33 const VT v1(2.5, 2); 34 R r = m.insert(v1); 35 assert(r.second); 36 assert(m.size() == 1); 37 assert(r.first->first == 2.5); 38 assert(r.first->second == 2); 39 40 const VT v2(2.5, 3); 41 r = m.insert(v2); 42 assert(!r.second); 43 assert(m.size() == 1); 44 assert(r.first->first == 2.5); 45 assert(r.first->second == 2); 46 47 const VT v3(1.5, 1); 48 r = m.insert(v3); 49 assert(r.second); 50 assert(m.size() == 2); 51 assert(r.first->first == 1.5); 52 assert(r.first->second == 1); 53 54 const VT v4(3.5, 3); 55 r = m.insert(v4); 56 assert(r.second); 57 assert(m.size() == 3); 58 assert(r.first->first == 3.5); 59 assert(r.first->second == 3); 60 61 const VT v5(3.5, 4); 62 r = m.insert(v5); 63 assert(!r.second); 64 assert(m.size() == 3); 65 assert(r.first->first == 3.5); 66 assert(r.first->second == 3); 67 } 68 69 int main() 70 { 71 { 72 typedef std::unordered_map<double, int> M; 73 do_insert_cv_test<M>(); 74 } 75 #if TEST_STD_VER >= 11 76 { 77 typedef std::unordered_map<double, int, std::hash<double>, std::equal_to<double>, 78 min_allocator<std::pair<const double, int>>> M; 79 do_insert_cv_test<M>(); 80 } 81 #endif 82 } 83