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 // <set> 11 12 // class set 13 14 // pair<iterator,iterator> equal_range(const key_type& k); 15 // pair<const_iterator,const_iterator> equal_range(const key_type& k) const; 16 17 #include <set> 18 #include <cassert> 19 20 #include "min_allocator.h" 21 #include "private_constructor.hpp" 22 23 int main() 24 { 25 { 26 typedef int V; 27 typedef std::set<int> M; 28 { 29 typedef std::pair<M::iterator, M::iterator> R; 30 V ar[] = 31 { 32 5, 33 7, 34 9, 35 11, 36 13, 37 15, 38 17, 39 19 40 }; 41 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 42 R r = m.equal_range(5); 43 assert(r.first == next(m.begin(), 0)); 44 assert(r.second == next(m.begin(), 1)); 45 r = m.equal_range(7); 46 assert(r.first == next(m.begin(), 1)); 47 assert(r.second == next(m.begin(), 2)); 48 r = m.equal_range(9); 49 assert(r.first == next(m.begin(), 2)); 50 assert(r.second == next(m.begin(), 3)); 51 r = m.equal_range(11); 52 assert(r.first == next(m.begin(), 3)); 53 assert(r.second == next(m.begin(), 4)); 54 r = m.equal_range(13); 55 assert(r.first == next(m.begin(), 4)); 56 assert(r.second == next(m.begin(), 5)); 57 r = m.equal_range(15); 58 assert(r.first == next(m.begin(), 5)); 59 assert(r.second == next(m.begin(), 6)); 60 r = m.equal_range(17); 61 assert(r.first == next(m.begin(), 6)); 62 assert(r.second == next(m.begin(), 7)); 63 r = m.equal_range(19); 64 assert(r.first == next(m.begin(), 7)); 65 assert(r.second == next(m.begin(), 8)); 66 r = m.equal_range(4); 67 assert(r.first == next(m.begin(), 0)); 68 assert(r.second == next(m.begin(), 0)); 69 r = m.equal_range(6); 70 assert(r.first == next(m.begin(), 1)); 71 assert(r.second == next(m.begin(), 1)); 72 r = m.equal_range(8); 73 assert(r.first == next(m.begin(), 2)); 74 assert(r.second == next(m.begin(), 2)); 75 r = m.equal_range(10); 76 assert(r.first == next(m.begin(), 3)); 77 assert(r.second == next(m.begin(), 3)); 78 r = m.equal_range(12); 79 assert(r.first == next(m.begin(), 4)); 80 assert(r.second == next(m.begin(), 4)); 81 r = m.equal_range(14); 82 assert(r.first == next(m.begin(), 5)); 83 assert(r.second == next(m.begin(), 5)); 84 r = m.equal_range(16); 85 assert(r.first == next(m.begin(), 6)); 86 assert(r.second == next(m.begin(), 6)); 87 r = m.equal_range(18); 88 assert(r.first == next(m.begin(), 7)); 89 assert(r.second == next(m.begin(), 7)); 90 r = m.equal_range(20); 91 assert(r.first == next(m.begin(), 8)); 92 assert(r.second == next(m.begin(), 8)); 93 } 94 { 95 typedef std::pair<M::const_iterator, M::const_iterator> R; 96 V ar[] = 97 { 98 5, 99 7, 100 9, 101 11, 102 13, 103 15, 104 17, 105 19 106 }; 107 const M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 108 R r = m.equal_range(5); 109 assert(r.first == next(m.begin(), 0)); 110 assert(r.second == next(m.begin(), 1)); 111 r = m.equal_range(7); 112 assert(r.first == next(m.begin(), 1)); 113 assert(r.second == next(m.begin(), 2)); 114 r = m.equal_range(9); 115 assert(r.first == next(m.begin(), 2)); 116 assert(r.second == next(m.begin(), 3)); 117 r = m.equal_range(11); 118 assert(r.first == next(m.begin(), 3)); 119 assert(r.second == next(m.begin(), 4)); 120 r = m.equal_range(13); 121 assert(r.first == next(m.begin(), 4)); 122 assert(r.second == next(m.begin(), 5)); 123 r = m.equal_range(15); 124 assert(r.first == next(m.begin(), 5)); 125 assert(r.second == next(m.begin(), 6)); 126 r = m.equal_range(17); 127 assert(r.first == next(m.begin(), 6)); 128 assert(r.second == next(m.begin(), 7)); 129 r = m.equal_range(19); 130 assert(r.first == next(m.begin(), 7)); 131 assert(r.second == next(m.begin(), 8)); 132 r = m.equal_range(4); 133 assert(r.first == next(m.begin(), 0)); 134 assert(r.second == next(m.begin(), 0)); 135 r = m.equal_range(6); 136 assert(r.first == next(m.begin(), 1)); 137 assert(r.second == next(m.begin(), 1)); 138 r = m.equal_range(8); 139 assert(r.first == next(m.begin(), 2)); 140 assert(r.second == next(m.begin(), 2)); 141 r = m.equal_range(10); 142 assert(r.first == next(m.begin(), 3)); 143 assert(r.second == next(m.begin(), 3)); 144 r = m.equal_range(12); 145 assert(r.first == next(m.begin(), 4)); 146 assert(r.second == next(m.begin(), 4)); 147 r = m.equal_range(14); 148 assert(r.first == next(m.begin(), 5)); 149 assert(r.second == next(m.begin(), 5)); 150 r = m.equal_range(16); 151 assert(r.first == next(m.begin(), 6)); 152 assert(r.second == next(m.begin(), 6)); 153 r = m.equal_range(18); 154 assert(r.first == next(m.begin(), 7)); 155 assert(r.second == next(m.begin(), 7)); 156 r = m.equal_range(20); 157 assert(r.first == next(m.begin(), 8)); 158 assert(r.second == next(m.begin(), 8)); 159 } 160 } 161 #if __cplusplus >= 201103L 162 { 163 typedef int V; 164 typedef std::set<int, std::less<int>, min_allocator<int>> M; 165 typedef std::pair<M::iterator, M::iterator> R; 166 V ar[] = 167 { 168 5, 169 7, 170 9, 171 11, 172 13, 173 15, 174 17, 175 19 176 }; 177 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 178 R r = m.equal_range(5); 179 assert(r.first == next(m.begin(), 0)); 180 assert(r.second == next(m.begin(), 1)); 181 r = m.equal_range(7); 182 assert(r.first == next(m.begin(), 1)); 183 assert(r.second == next(m.begin(), 2)); 184 r = m.equal_range(9); 185 assert(r.first == next(m.begin(), 2)); 186 assert(r.second == next(m.begin(), 3)); 187 r = m.equal_range(11); 188 assert(r.first == next(m.begin(), 3)); 189 assert(r.second == next(m.begin(), 4)); 190 r = m.equal_range(13); 191 assert(r.first == next(m.begin(), 4)); 192 assert(r.second == next(m.begin(), 5)); 193 r = m.equal_range(15); 194 assert(r.first == next(m.begin(), 5)); 195 assert(r.second == next(m.begin(), 6)); 196 r = m.equal_range(17); 197 assert(r.first == next(m.begin(), 6)); 198 assert(r.second == next(m.begin(), 7)); 199 r = m.equal_range(19); 200 assert(r.first == next(m.begin(), 7)); 201 assert(r.second == next(m.begin(), 8)); 202 r = m.equal_range(4); 203 assert(r.first == next(m.begin(), 0)); 204 assert(r.second == next(m.begin(), 0)); 205 r = m.equal_range(6); 206 assert(r.first == next(m.begin(), 1)); 207 assert(r.second == next(m.begin(), 1)); 208 r = m.equal_range(8); 209 assert(r.first == next(m.begin(), 2)); 210 assert(r.second == next(m.begin(), 2)); 211 r = m.equal_range(10); 212 assert(r.first == next(m.begin(), 3)); 213 assert(r.second == next(m.begin(), 3)); 214 r = m.equal_range(12); 215 assert(r.first == next(m.begin(), 4)); 216 assert(r.second == next(m.begin(), 4)); 217 r = m.equal_range(14); 218 assert(r.first == next(m.begin(), 5)); 219 assert(r.second == next(m.begin(), 5)); 220 r = m.equal_range(16); 221 assert(r.first == next(m.begin(), 6)); 222 assert(r.second == next(m.begin(), 6)); 223 r = m.equal_range(18); 224 assert(r.first == next(m.begin(), 7)); 225 assert(r.second == next(m.begin(), 7)); 226 r = m.equal_range(20); 227 assert(r.first == next(m.begin(), 8)); 228 assert(r.second == next(m.begin(), 8)); 229 } 230 #endif 231 #if _LIBCPP_STD_VER > 11 232 { 233 typedef int V; 234 typedef std::set<V, std::less<>> M; 235 { 236 typedef std::pair<M::iterator, M::iterator> R; 237 V ar[] = 238 { 239 5, 240 7, 241 9, 242 11, 243 13, 244 15, 245 17, 246 19 247 }; 248 M m(ar, ar+sizeof(ar)/sizeof(ar[0])); 249 R r = m.equal_range(5); 250 assert(r.first == next(m.begin(), 0)); 251 assert(r.second == next(m.begin(), 1)); 252 r = m.equal_range(7); 253 assert(r.first == next(m.begin(), 1)); 254 assert(r.second == next(m.begin(), 2)); 255 r = m.equal_range(9); 256 assert(r.first == next(m.begin(), 2)); 257 assert(r.second == next(m.begin(), 3)); 258 r = m.equal_range(11); 259 assert(r.first == next(m.begin(), 3)); 260 assert(r.second == next(m.begin(), 4)); 261 r = m.equal_range(13); 262 assert(r.first == next(m.begin(), 4)); 263 assert(r.second == next(m.begin(), 5)); 264 r = m.equal_range(15); 265 assert(r.first == next(m.begin(), 5)); 266 assert(r.second == next(m.begin(), 6)); 267 r = m.equal_range(17); 268 assert(r.first == next(m.begin(), 6)); 269 assert(r.second == next(m.begin(), 7)); 270 r = m.equal_range(19); 271 assert(r.first == next(m.begin(), 7)); 272 assert(r.second == next(m.begin(), 8)); 273 r = m.equal_range(4); 274 assert(r.first == next(m.begin(), 0)); 275 assert(r.second == next(m.begin(), 0)); 276 r = m.equal_range(6); 277 assert(r.first == next(m.begin(), 1)); 278 assert(r.second == next(m.begin(), 1)); 279 r = m.equal_range(8); 280 assert(r.first == next(m.begin(), 2)); 281 assert(r.second == next(m.begin(), 2)); 282 r = m.equal_range(10); 283 assert(r.first == next(m.begin(), 3)); 284 assert(r.second == next(m.begin(), 3)); 285 r = m.equal_range(12); 286 assert(r.first == next(m.begin(), 4)); 287 assert(r.second == next(m.begin(), 4)); 288 r = m.equal_range(14); 289 assert(r.first == next(m.begin(), 5)); 290 assert(r.second == next(m.begin(), 5)); 291 r = m.equal_range(16); 292 assert(r.first == next(m.begin(), 6)); 293 assert(r.second == next(m.begin(), 6)); 294 r = m.equal_range(18); 295 assert(r.first == next(m.begin(), 7)); 296 assert(r.second == next(m.begin(), 7)); 297 r = m.equal_range(20); 298 assert(r.first == next(m.begin(), 8)); 299 assert(r.second == next(m.begin(), 8)); 300 } 301 } 302 { 303 typedef PrivateConstructor V; 304 typedef std::set<V, std::less<>> M; 305 typedef std::pair<M::iterator, M::iterator> R; 306 307 M m; 308 m.insert ( V::make ( 5 )); 309 m.insert ( V::make ( 7 )); 310 m.insert ( V::make ( 9 )); 311 m.insert ( V::make ( 11 )); 312 m.insert ( V::make ( 13 )); 313 m.insert ( V::make ( 15 )); 314 m.insert ( V::make ( 17 )); 315 m.insert ( V::make ( 19 )); 316 317 R r = m.equal_range(5); 318 assert(r.first == next(m.begin(), 0)); 319 assert(r.second == next(m.begin(), 1)); 320 r = m.equal_range(7); 321 assert(r.first == next(m.begin(), 1)); 322 assert(r.second == next(m.begin(), 2)); 323 r = m.equal_range(9); 324 assert(r.first == next(m.begin(), 2)); 325 assert(r.second == next(m.begin(), 3)); 326 r = m.equal_range(11); 327 assert(r.first == next(m.begin(), 3)); 328 assert(r.second == next(m.begin(), 4)); 329 r = m.equal_range(13); 330 assert(r.first == next(m.begin(), 4)); 331 assert(r.second == next(m.begin(), 5)); 332 r = m.equal_range(15); 333 assert(r.first == next(m.begin(), 5)); 334 assert(r.second == next(m.begin(), 6)); 335 r = m.equal_range(17); 336 assert(r.first == next(m.begin(), 6)); 337 assert(r.second == next(m.begin(), 7)); 338 r = m.equal_range(19); 339 assert(r.first == next(m.begin(), 7)); 340 assert(r.second == next(m.begin(), 8)); 341 r = m.equal_range(4); 342 assert(r.first == next(m.begin(), 0)); 343 assert(r.second == next(m.begin(), 0)); 344 r = m.equal_range(6); 345 assert(r.first == next(m.begin(), 1)); 346 assert(r.second == next(m.begin(), 1)); 347 r = m.equal_range(8); 348 assert(r.first == next(m.begin(), 2)); 349 assert(r.second == next(m.begin(), 2)); 350 r = m.equal_range(10); 351 assert(r.first == next(m.begin(), 3)); 352 assert(r.second == next(m.begin(), 3)); 353 r = m.equal_range(12); 354 assert(r.first == next(m.begin(), 4)); 355 assert(r.second == next(m.begin(), 4)); 356 r = m.equal_range(14); 357 assert(r.first == next(m.begin(), 5)); 358 assert(r.second == next(m.begin(), 5)); 359 r = m.equal_range(16); 360 assert(r.first == next(m.begin(), 6)); 361 assert(r.second == next(m.begin(), 6)); 362 r = m.equal_range(18); 363 assert(r.first == next(m.begin(), 7)); 364 assert(r.second == next(m.begin(), 7)); 365 r = m.equal_range(20); 366 assert(r.first == next(m.begin(), 8)); 367 assert(r.second == next(m.begin(), 8)); 368 } 369 #endif 370 } 371