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 map 13 14// iterator find(const key_type& k); 15// const_iterator find(const key_type& k) const; 16 17#include <map> 18#include <cassert> 19 20#include "min_allocator.h" 21#include "private_constructor.hpp" 22 23int main() 24{ 25 { 26 typedef std::pair<const int, double> V; 27 typedef std::map<int, double> M; 28 { 29 typedef M::iterator R; 30 V ar[] = 31 { 32 V(5, 5), 33 V(6, 6), 34 V(7, 7), 35 V(8, 8), 36 V(9, 9), 37 V(10, 10), 38 V(11, 11), 39 V(12, 12) 40 }; 41 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 42 R r = m.find(5); 43 assert(r == m.begin()); 44 r = m.find(6); 45 assert(r == next(m.begin())); 46 r = m.find(7); 47 assert(r == next(m.begin(), 2)); 48 r = m.find(8); 49 assert(r == next(m.begin(), 3)); 50 r = m.find(9); 51 assert(r == next(m.begin(), 4)); 52 r = m.find(10); 53 assert(r == next(m.begin(), 5)); 54 r = m.find(11); 55 assert(r == next(m.begin(), 6)); 56 r = m.find(12); 57 assert(r == next(m.begin(), 7)); 58 r = m.find(4); 59 assert(r == next(m.begin(), 8)); 60 } 61 { 62 typedef M::const_iterator R; 63 V ar[] = 64 { 65 V(5, 5), 66 V(6, 6), 67 V(7, 7), 68 V(8, 8), 69 V(9, 9), 70 V(10, 10), 71 V(11, 11), 72 V(12, 12) 73 }; 74 const M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 75 R r = m.find(5); 76 assert(r == m.begin()); 77 r = m.find(6); 78 assert(r == next(m.begin())); 79 r = m.find(7); 80 assert(r == next(m.begin(), 2)); 81 r = m.find(8); 82 assert(r == next(m.begin(), 3)); 83 r = m.find(9); 84 assert(r == next(m.begin(), 4)); 85 r = m.find(10); 86 assert(r == next(m.begin(), 5)); 87 r = m.find(11); 88 assert(r == next(m.begin(), 6)); 89 r = m.find(12); 90 assert(r == next(m.begin(), 7)); 91 r = m.find(4); 92 assert(r == next(m.begin(), 8)); 93 } 94 } 95#if __cplusplus >= 201103L 96 { 97 typedef std::pair<const int, double> V; 98 typedef std::map<int, double, std::less<int>, min_allocator<V>> M; 99 { 100 typedef M::iterator R; 101 V ar[] = 102 { 103 V(5, 5), 104 V(6, 6), 105 V(7, 7), 106 V(8, 8), 107 V(9, 9), 108 V(10, 10), 109 V(11, 11), 110 V(12, 12) 111 }; 112 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 113 R r = m.find(5); 114 assert(r == m.begin()); 115 r = m.find(6); 116 assert(r == next(m.begin())); 117 r = m.find(7); 118 assert(r == next(m.begin(), 2)); 119 r = m.find(8); 120 assert(r == next(m.begin(), 3)); 121 r = m.find(9); 122 assert(r == next(m.begin(), 4)); 123 r = m.find(10); 124 assert(r == next(m.begin(), 5)); 125 r = m.find(11); 126 assert(r == next(m.begin(), 6)); 127 r = m.find(12); 128 assert(r == next(m.begin(), 7)); 129 r = m.find(4); 130 assert(r == next(m.begin(), 8)); 131 } 132 { 133 typedef M::const_iterator R; 134 V ar[] = 135 { 136 V(5, 5), 137 V(6, 6), 138 V(7, 7), 139 V(8, 8), 140 V(9, 9), 141 V(10, 10), 142 V(11, 11), 143 V(12, 12) 144 }; 145 const M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 146 R r = m.find(5); 147 assert(r == m.begin()); 148 r = m.find(6); 149 assert(r == next(m.begin())); 150 r = m.find(7); 151 assert(r == next(m.begin(), 2)); 152 r = m.find(8); 153 assert(r == next(m.begin(), 3)); 154 r = m.find(9); 155 assert(r == next(m.begin(), 4)); 156 r = m.find(10); 157 assert(r == next(m.begin(), 5)); 158 r = m.find(11); 159 assert(r == next(m.begin(), 6)); 160 r = m.find(12); 161 assert(r == next(m.begin(), 7)); 162 r = m.find(4); 163 assert(r == next(m.begin(), 8)); 164 } 165 } 166#endif 167#if _LIBCPP_STD_VER > 11 168 { 169 typedef std::pair<const int, double> V; 170 typedef std::map<int, double, std::less<>> M; 171 typedef M::iterator R; 172 173 V ar[] = 174 { 175 V(5, 5), 176 V(6, 6), 177 V(7, 7), 178 V(8, 8), 179 V(9, 9), 180 V(10, 10), 181 V(11, 11), 182 V(12, 12) 183 }; 184 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 185 R r = m.find(5); 186 assert(r == m.begin()); 187 r = m.find(6); 188 assert(r == next(m.begin())); 189 r = m.find(7); 190 assert(r == next(m.begin(), 2)); 191 r = m.find(8); 192 assert(r == next(m.begin(), 3)); 193 r = m.find(9); 194 assert(r == next(m.begin(), 4)); 195 r = m.find(10); 196 assert(r == next(m.begin(), 5)); 197 r = m.find(11); 198 assert(r == next(m.begin(), 6)); 199 r = m.find(12); 200 assert(r == next(m.begin(), 7)); 201 r = m.find(4); 202 assert(r == next(m.begin(), 8)); 203 } 204 205 { 206 typedef PrivateConstructor PC; 207 typedef std::map<PC, double, std::less<>> M; 208 typedef M::iterator R; 209 210 M m; 211 m [ PC::make(5) ] = 5; 212 m [ PC::make(6) ] = 6; 213 m [ PC::make(7) ] = 7; 214 m [ PC::make(8) ] = 8; 215 m [ PC::make(9) ] = 9; 216 m [ PC::make(10) ] = 10; 217 m [ PC::make(11) ] = 11; 218 m [ PC::make(12) ] = 12; 219 220 R r = m.find(5); 221 assert(r == m.begin()); 222 r = m.find(6); 223 assert(r == next(m.begin())); 224 r = m.find(7); 225 assert(r == next(m.begin(), 2)); 226 r = m.find(8); 227 assert(r == next(m.begin(), 3)); 228 r = m.find(9); 229 assert(r == next(m.begin(), 4)); 230 r = m.find(10); 231 assert(r == next(m.begin(), 5)); 232 r = m.find(11); 233 assert(r == next(m.begin(), 6)); 234 r = m.find(12); 235 assert(r == next(m.begin(), 7)); 236 r = m.find(4); 237 assert(r == next(m.begin(), 8)); 238 } 239#endif 240} 241