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 // <map> 11 12 // class multimap 13 14 // size_type count(const key_type& k) const; 15 16 #include <map> 17 #include <cassert> 18 19 #include "min_allocator.h" 20 #include "private_constructor.hpp" 21 #include "is_transparent.h" 22 23 int main() 24 { 25 typedef std::pair<const int, double> V; 26 { 27 typedef std::multimap<int, double> M; 28 { 29 typedef M::size_type R; 30 V ar[] = 31 { 32 V(5, 1), 33 V(5, 2), 34 V(5, 3), 35 V(7, 1), 36 V(7, 2), 37 V(7, 3), 38 V(9, 1), 39 V(9, 2), 40 V(9, 3) 41 }; 42 const M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 43 R r = m.count(4); 44 assert(r == 0); 45 r = m.count(5); 46 assert(r == 3); 47 r = m.count(6); 48 assert(r == 0); 49 r = m.count(7); 50 assert(r == 3); 51 r = m.count(8); 52 assert(r == 0); 53 r = m.count(9); 54 assert(r == 3); 55 r = m.count(10); 56 assert(r == 0); 57 } 58 } 59 #if __cplusplus >= 201103L 60 { 61 typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M; 62 { 63 typedef M::size_type R; 64 V ar[] = 65 { 66 V(5, 1), 67 V(5, 2), 68 V(5, 3), 69 V(7, 1), 70 V(7, 2), 71 V(7, 3), 72 V(9, 1), 73 V(9, 2), 74 V(9, 3) 75 }; 76 const M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 77 R r = m.count(4); 78 assert(r == 0); 79 r = m.count(5); 80 assert(r == 3); 81 r = m.count(6); 82 assert(r == 0); 83 r = m.count(7); 84 assert(r == 3); 85 r = m.count(8); 86 assert(r == 0); 87 r = m.count(9); 88 assert(r == 3); 89 r = m.count(10); 90 assert(r == 0); 91 } 92 } 93 #endif 94 95 #if _LIBCPP_STD_VER > 11 96 { 97 typedef std::multimap<int, double, std::less<>> M; 98 typedef M::size_type R; 99 V ar[] = 100 { 101 V(5, 1), 102 V(5, 2), 103 V(5, 3), 104 V(7, 1), 105 V(7, 2), 106 V(7, 3), 107 V(9, 1), 108 V(9, 2), 109 V(9, 3) 110 }; 111 const M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 112 R r = m.count(4); 113 assert(r == 0); 114 r = m.count(5); 115 assert(r == 3); 116 r = m.count(6); 117 assert(r == 0); 118 r = m.count(7); 119 assert(r == 3); 120 r = m.count(8); 121 assert(r == 0); 122 r = m.count(9); 123 assert(r == 3); 124 r = m.count(10); 125 assert(r == 0); 126 127 r = m.count(C2Int(4)); 128 assert(r == 0); 129 r = m.count(C2Int(5)); 130 assert(r == 3); 131 r = m.count(C2Int(6)); 132 assert(r == 0); 133 r = m.count(C2Int(7)); 134 assert(r == 3); 135 r = m.count(C2Int(8)); 136 assert(r == 0); 137 r = m.count(C2Int(9)); 138 assert(r == 3); 139 r = m.count(C2Int(10)); 140 assert(r == 0); 141 } 142 143 { 144 typedef PrivateConstructor PC; 145 typedef std::multimap<PC, double, std::less<>> M; 146 typedef M::size_type R; 147 148 M m; 149 m.insert ( std::make_pair<PC, double> ( PC::make(5), 1 )); 150 m.insert ( std::make_pair<PC, double> ( PC::make(5), 2 )); 151 m.insert ( std::make_pair<PC, double> ( PC::make(5), 3 )); 152 m.insert ( std::make_pair<PC, double> ( PC::make(7), 1 )); 153 m.insert ( std::make_pair<PC, double> ( PC::make(7), 2 )); 154 m.insert ( std::make_pair<PC, double> ( PC::make(7), 3 )); 155 m.insert ( std::make_pair<PC, double> ( PC::make(9), 1 )); 156 m.insert ( std::make_pair<PC, double> ( PC::make(9), 2 )); 157 m.insert ( std::make_pair<PC, double> ( PC::make(9), 3 )); 158 159 R r = m.count(4); 160 assert(r == 0); 161 r = m.count(5); 162 assert(r == 3); 163 r = m.count(6); 164 assert(r == 0); 165 r = m.count(7); 166 assert(r == 3); 167 r = m.count(8); 168 assert(r == 0); 169 r = m.count(9); 170 assert(r == 3); 171 r = m.count(10); 172 assert(r == 0); 173 } 174 #endif 175 } 176