1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
13 // pair<iterator,iterator> equal_range(const key_type& k);
14 // pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
19 #include "test_macros.h"
20 #include "min_allocator.h"
21 #include "private_constructor.h"
22 #include "is_transparent.h"
27 typedef std::pair
<const int, double> V
;
28 typedef std::map
<int, double> M
;
30 typedef std::pair
<M::iterator
, M::iterator
> R
;
42 M
m(ar
, ar
+sizeof(ar
)/sizeof(ar
[0]));
43 R r
= m
.equal_range(5);
44 assert(r
.first
== std::next(m
.begin(), 0));
45 assert(r
.second
== std::next(m
.begin(), 1));
47 assert(r
.first
== std::next(m
.begin(), 1));
48 assert(r
.second
== std::next(m
.begin(), 2));
50 assert(r
.first
== std::next(m
.begin(), 2));
51 assert(r
.second
== std::next(m
.begin(), 3));
52 r
= m
.equal_range(11);
53 assert(r
.first
== std::next(m
.begin(), 3));
54 assert(r
.second
== std::next(m
.begin(), 4));
55 r
= m
.equal_range(13);
56 assert(r
.first
== std::next(m
.begin(), 4));
57 assert(r
.second
== std::next(m
.begin(), 5));
58 r
= m
.equal_range(15);
59 assert(r
.first
== std::next(m
.begin(), 5));
60 assert(r
.second
== std::next(m
.begin(), 6));
61 r
= m
.equal_range(17);
62 assert(r
.first
== std::next(m
.begin(), 6));
63 assert(r
.second
== std::next(m
.begin(), 7));
64 r
= m
.equal_range(19);
65 assert(r
.first
== std::next(m
.begin(), 7));
66 assert(r
.second
== std::next(m
.begin(), 8));
68 assert(r
.first
== std::next(m
.begin(), 0));
69 assert(r
.second
== std::next(m
.begin(), 0));
71 assert(r
.first
== std::next(m
.begin(), 1));
72 assert(r
.second
== std::next(m
.begin(), 1));
74 assert(r
.first
== std::next(m
.begin(), 2));
75 assert(r
.second
== std::next(m
.begin(), 2));
76 r
= m
.equal_range(10);
77 assert(r
.first
== std::next(m
.begin(), 3));
78 assert(r
.second
== std::next(m
.begin(), 3));
79 r
= m
.equal_range(12);
80 assert(r
.first
== std::next(m
.begin(), 4));
81 assert(r
.second
== std::next(m
.begin(), 4));
82 r
= m
.equal_range(14);
83 assert(r
.first
== std::next(m
.begin(), 5));
84 assert(r
.second
== std::next(m
.begin(), 5));
85 r
= m
.equal_range(16);
86 assert(r
.first
== std::next(m
.begin(), 6));
87 assert(r
.second
== std::next(m
.begin(), 6));
88 r
= m
.equal_range(18);
89 assert(r
.first
== std::next(m
.begin(), 7));
90 assert(r
.second
== std::next(m
.begin(), 7));
91 r
= m
.equal_range(20);
92 assert(r
.first
== std::next(m
.begin(), 8));
93 assert(r
.second
== std::next(m
.begin(), 8));
96 typedef std::pair
<M::const_iterator
, M::const_iterator
> R
;
108 const M
m(ar
, ar
+sizeof(ar
)/sizeof(ar
[0]));
109 R r
= m
.equal_range(5);
110 assert(r
.first
== std::next(m
.begin(), 0));
111 assert(r
.second
== std::next(m
.begin(), 1));
112 r
= m
.equal_range(7);
113 assert(r
.first
== std::next(m
.begin(), 1));
114 assert(r
.second
== std::next(m
.begin(), 2));
115 r
= m
.equal_range(9);
116 assert(r
.first
== std::next(m
.begin(), 2));
117 assert(r
.second
== std::next(m
.begin(), 3));
118 r
= m
.equal_range(11);
119 assert(r
.first
== std::next(m
.begin(), 3));
120 assert(r
.second
== std::next(m
.begin(), 4));
121 r
= m
.equal_range(13);
122 assert(r
.first
== std::next(m
.begin(), 4));
123 assert(r
.second
== std::next(m
.begin(), 5));
124 r
= m
.equal_range(15);
125 assert(r
.first
== std::next(m
.begin(), 5));
126 assert(r
.second
== std::next(m
.begin(), 6));
127 r
= m
.equal_range(17);
128 assert(r
.first
== std::next(m
.begin(), 6));
129 assert(r
.second
== std::next(m
.begin(), 7));
130 r
= m
.equal_range(19);
131 assert(r
.first
== std::next(m
.begin(), 7));
132 assert(r
.second
== std::next(m
.begin(), 8));
133 r
= m
.equal_range(4);
134 assert(r
.first
== std::next(m
.begin(), 0));
135 assert(r
.second
== std::next(m
.begin(), 0));
136 r
= m
.equal_range(6);
137 assert(r
.first
== std::next(m
.begin(), 1));
138 assert(r
.second
== std::next(m
.begin(), 1));
139 r
= m
.equal_range(8);
140 assert(r
.first
== std::next(m
.begin(), 2));
141 assert(r
.second
== std::next(m
.begin(), 2));
142 r
= m
.equal_range(10);
143 assert(r
.first
== std::next(m
.begin(), 3));
144 assert(r
.second
== std::next(m
.begin(), 3));
145 r
= m
.equal_range(12);
146 assert(r
.first
== std::next(m
.begin(), 4));
147 assert(r
.second
== std::next(m
.begin(), 4));
148 r
= m
.equal_range(14);
149 assert(r
.first
== std::next(m
.begin(), 5));
150 assert(r
.second
== std::next(m
.begin(), 5));
151 r
= m
.equal_range(16);
152 assert(r
.first
== std::next(m
.begin(), 6));
153 assert(r
.second
== std::next(m
.begin(), 6));
154 r
= m
.equal_range(18);
155 assert(r
.first
== std::next(m
.begin(), 7));
156 assert(r
.second
== std::next(m
.begin(), 7));
157 r
= m
.equal_range(20);
158 assert(r
.first
== std::next(m
.begin(), 8));
159 assert(r
.second
== std::next(m
.begin(), 8));
162 #if TEST_STD_VER >= 11
164 typedef std::pair
<const int, double> V
;
165 typedef std::map
<int, double, std::less
<int>, min_allocator
<V
>> M
;
167 typedef std::pair
<M::iterator
, M::iterator
> R
;
179 M
m(ar
, ar
+sizeof(ar
)/sizeof(ar
[0]));
180 R r
= m
.equal_range(5);
181 assert(r
.first
== std::next(m
.begin(), 0));
182 assert(r
.second
== std::next(m
.begin(), 1));
183 r
= m
.equal_range(7);
184 assert(r
.first
== std::next(m
.begin(), 1));
185 assert(r
.second
== std::next(m
.begin(), 2));
186 r
= m
.equal_range(9);
187 assert(r
.first
== std::next(m
.begin(), 2));
188 assert(r
.second
== std::next(m
.begin(), 3));
189 r
= m
.equal_range(11);
190 assert(r
.first
== std::next(m
.begin(), 3));
191 assert(r
.second
== std::next(m
.begin(), 4));
192 r
= m
.equal_range(13);
193 assert(r
.first
== std::next(m
.begin(), 4));
194 assert(r
.second
== std::next(m
.begin(), 5));
195 r
= m
.equal_range(15);
196 assert(r
.first
== std::next(m
.begin(), 5));
197 assert(r
.second
== std::next(m
.begin(), 6));
198 r
= m
.equal_range(17);
199 assert(r
.first
== std::next(m
.begin(), 6));
200 assert(r
.second
== std::next(m
.begin(), 7));
201 r
= m
.equal_range(19);
202 assert(r
.first
== std::next(m
.begin(), 7));
203 assert(r
.second
== std::next(m
.begin(), 8));
204 r
= m
.equal_range(4);
205 assert(r
.first
== std::next(m
.begin(), 0));
206 assert(r
.second
== std::next(m
.begin(), 0));
207 r
= m
.equal_range(6);
208 assert(r
.first
== std::next(m
.begin(), 1));
209 assert(r
.second
== std::next(m
.begin(), 1));
210 r
= m
.equal_range(8);
211 assert(r
.first
== std::next(m
.begin(), 2));
212 assert(r
.second
== std::next(m
.begin(), 2));
213 r
= m
.equal_range(10);
214 assert(r
.first
== std::next(m
.begin(), 3));
215 assert(r
.second
== std::next(m
.begin(), 3));
216 r
= m
.equal_range(12);
217 assert(r
.first
== std::next(m
.begin(), 4));
218 assert(r
.second
== std::next(m
.begin(), 4));
219 r
= m
.equal_range(14);
220 assert(r
.first
== std::next(m
.begin(), 5));
221 assert(r
.second
== std::next(m
.begin(), 5));
222 r
= m
.equal_range(16);
223 assert(r
.first
== std::next(m
.begin(), 6));
224 assert(r
.second
== std::next(m
.begin(), 6));
225 r
= m
.equal_range(18);
226 assert(r
.first
== std::next(m
.begin(), 7));
227 assert(r
.second
== std::next(m
.begin(), 7));
228 r
= m
.equal_range(20);
229 assert(r
.first
== std::next(m
.begin(), 8));
230 assert(r
.second
== std::next(m
.begin(), 8));
233 typedef std::pair
<M::const_iterator
, M::const_iterator
> R
;
245 const M
m(ar
, ar
+sizeof(ar
)/sizeof(ar
[0]));
246 R r
= m
.equal_range(5);
247 assert(r
.first
== std::next(m
.begin(), 0));
248 assert(r
.second
== std::next(m
.begin(), 1));
249 r
= m
.equal_range(7);
250 assert(r
.first
== std::next(m
.begin(), 1));
251 assert(r
.second
== std::next(m
.begin(), 2));
252 r
= m
.equal_range(9);
253 assert(r
.first
== std::next(m
.begin(), 2));
254 assert(r
.second
== std::next(m
.begin(), 3));
255 r
= m
.equal_range(11);
256 assert(r
.first
== std::next(m
.begin(), 3));
257 assert(r
.second
== std::next(m
.begin(), 4));
258 r
= m
.equal_range(13);
259 assert(r
.first
== std::next(m
.begin(), 4));
260 assert(r
.second
== std::next(m
.begin(), 5));
261 r
= m
.equal_range(15);
262 assert(r
.first
== std::next(m
.begin(), 5));
263 assert(r
.second
== std::next(m
.begin(), 6));
264 r
= m
.equal_range(17);
265 assert(r
.first
== std::next(m
.begin(), 6));
266 assert(r
.second
== std::next(m
.begin(), 7));
267 r
= m
.equal_range(19);
268 assert(r
.first
== std::next(m
.begin(), 7));
269 assert(r
.second
== std::next(m
.begin(), 8));
270 r
= m
.equal_range(4);
271 assert(r
.first
== std::next(m
.begin(), 0));
272 assert(r
.second
== std::next(m
.begin(), 0));
273 r
= m
.equal_range(6);
274 assert(r
.first
== std::next(m
.begin(), 1));
275 assert(r
.second
== std::next(m
.begin(), 1));
276 r
= m
.equal_range(8);
277 assert(r
.first
== std::next(m
.begin(), 2));
278 assert(r
.second
== std::next(m
.begin(), 2));
279 r
= m
.equal_range(10);
280 assert(r
.first
== std::next(m
.begin(), 3));
281 assert(r
.second
== std::next(m
.begin(), 3));
282 r
= m
.equal_range(12);
283 assert(r
.first
== std::next(m
.begin(), 4));
284 assert(r
.second
== std::next(m
.begin(), 4));
285 r
= m
.equal_range(14);
286 assert(r
.first
== std::next(m
.begin(), 5));
287 assert(r
.second
== std::next(m
.begin(), 5));
288 r
= m
.equal_range(16);
289 assert(r
.first
== std::next(m
.begin(), 6));
290 assert(r
.second
== std::next(m
.begin(), 6));
291 r
= m
.equal_range(18);
292 assert(r
.first
== std::next(m
.begin(), 7));
293 assert(r
.second
== std::next(m
.begin(), 7));
294 r
= m
.equal_range(20);
295 assert(r
.first
== std::next(m
.begin(), 8));
296 assert(r
.second
== std::next(m
.begin(), 8));
300 #if TEST_STD_VER > 11
302 typedef std::pair
<const int, double> V
;
303 typedef std::map
<int, double, std::less
<>> M
;
304 typedef std::pair
<M::iterator
, M::iterator
> R
;
317 M
m(ar
, ar
+sizeof(ar
)/sizeof(ar
[0]));
318 R r
= m
.equal_range(5);
319 assert(r
.first
== std::next(m
.begin(), 0));
320 assert(r
.second
== std::next(m
.begin(), 1));
321 r
= m
.equal_range(7);
322 assert(r
.first
== std::next(m
.begin(), 1));
323 assert(r
.second
== std::next(m
.begin(), 2));
324 r
= m
.equal_range(9);
325 assert(r
.first
== std::next(m
.begin(), 2));
326 assert(r
.second
== std::next(m
.begin(), 3));
327 r
= m
.equal_range(11);
328 assert(r
.first
== std::next(m
.begin(), 3));
329 assert(r
.second
== std::next(m
.begin(), 4));
330 r
= m
.equal_range(13);
331 assert(r
.first
== std::next(m
.begin(), 4));
332 assert(r
.second
== std::next(m
.begin(), 5));
333 r
= m
.equal_range(15);
334 assert(r
.first
== std::next(m
.begin(), 5));
335 assert(r
.second
== std::next(m
.begin(), 6));
336 r
= m
.equal_range(17);
337 assert(r
.first
== std::next(m
.begin(), 6));
338 assert(r
.second
== std::next(m
.begin(), 7));
339 r
= m
.equal_range(19);
340 assert(r
.first
== std::next(m
.begin(), 7));
341 assert(r
.second
== std::next(m
.begin(), 8));
342 r
= m
.equal_range(4);
343 assert(r
.first
== std::next(m
.begin(), 0));
344 assert(r
.second
== std::next(m
.begin(), 0));
345 r
= m
.equal_range(6);
346 assert(r
.first
== std::next(m
.begin(), 1));
347 assert(r
.second
== std::next(m
.begin(), 1));
348 r
= m
.equal_range(8);
349 assert(r
.first
== std::next(m
.begin(), 2));
350 assert(r
.second
== std::next(m
.begin(), 2));
351 r
= m
.equal_range(10);
352 assert(r
.first
== std::next(m
.begin(), 3));
353 assert(r
.second
== std::next(m
.begin(), 3));
354 r
= m
.equal_range(12);
355 assert(r
.first
== std::next(m
.begin(), 4));
356 assert(r
.second
== std::next(m
.begin(), 4));
357 r
= m
.equal_range(14);
358 assert(r
.first
== std::next(m
.begin(), 5));
359 assert(r
.second
== std::next(m
.begin(), 5));
360 r
= m
.equal_range(16);
361 assert(r
.first
== std::next(m
.begin(), 6));
362 assert(r
.second
== std::next(m
.begin(), 6));
363 r
= m
.equal_range(18);
364 assert(r
.first
== std::next(m
.begin(), 7));
365 assert(r
.second
== std::next(m
.begin(), 7));
366 r
= m
.equal_range(20);
367 assert(r
.first
== std::next(m
.begin(), 8));
368 assert(r
.second
== std::next(m
.begin(), 8));
370 r
= m
.equal_range(C2Int(5));
371 assert(r
.first
== std::next(m
.begin(), 0));
372 assert(r
.second
== std::next(m
.begin(), 1));
373 r
= m
.equal_range(C2Int(7));
374 assert(r
.first
== std::next(m
.begin(), 1));
375 assert(r
.second
== std::next(m
.begin(), 2));
376 r
= m
.equal_range(C2Int(9));
377 assert(r
.first
== std::next(m
.begin(), 2));
378 assert(r
.second
== std::next(m
.begin(), 3));
379 r
= m
.equal_range(C2Int(11));
380 assert(r
.first
== std::next(m
.begin(), 3));
381 assert(r
.second
== std::next(m
.begin(), 4));
382 r
= m
.equal_range(C2Int(13));
383 assert(r
.first
== std::next(m
.begin(), 4));
384 assert(r
.second
== std::next(m
.begin(), 5));
385 r
= m
.equal_range(C2Int(15));
386 assert(r
.first
== std::next(m
.begin(), 5));
387 assert(r
.second
== std::next(m
.begin(), 6));
388 r
= m
.equal_range(C2Int(17));
389 assert(r
.first
== std::next(m
.begin(), 6));
390 assert(r
.second
== std::next(m
.begin(), 7));
391 r
= m
.equal_range(C2Int(19));
392 assert(r
.first
== std::next(m
.begin(), 7));
393 assert(r
.second
== std::next(m
.begin(), 8));
394 r
= m
.equal_range(C2Int(4));
395 assert(r
.first
== std::next(m
.begin(), 0));
396 assert(r
.second
== std::next(m
.begin(), 0));
397 r
= m
.equal_range(C2Int(6));
398 assert(r
.first
== std::next(m
.begin(), 1));
399 assert(r
.second
== std::next(m
.begin(), 1));
400 r
= m
.equal_range(C2Int(8));
401 assert(r
.first
== std::next(m
.begin(), 2));
402 assert(r
.second
== std::next(m
.begin(), 2));
403 r
= m
.equal_range(C2Int(10));
404 assert(r
.first
== std::next(m
.begin(), 3));
405 assert(r
.second
== std::next(m
.begin(), 3));
406 r
= m
.equal_range(C2Int(12));
407 assert(r
.first
== std::next(m
.begin(), 4));
408 assert(r
.second
== std::next(m
.begin(), 4));
409 r
= m
.equal_range(C2Int(14));
410 assert(r
.first
== std::next(m
.begin(), 5));
411 assert(r
.second
== std::next(m
.begin(), 5));
412 r
= m
.equal_range(C2Int(16));
413 assert(r
.first
== std::next(m
.begin(), 6));
414 assert(r
.second
== std::next(m
.begin(), 6));
415 r
= m
.equal_range(C2Int(18));
416 assert(r
.first
== std::next(m
.begin(), 7));
417 assert(r
.second
== std::next(m
.begin(), 7));
418 r
= m
.equal_range(C2Int(20));
419 assert(r
.first
== std::next(m
.begin(), 8));
420 assert(r
.second
== std::next(m
.begin(), 8));
423 typedef PrivateConstructor PC
;
424 typedef std::map
<PC
, double, std::less
<>> M
;
425 typedef std::pair
<M::iterator
, M::iterator
> R
;
428 m
[ PC::make(5) ] = 5;
429 m
[ PC::make(7) ] = 6;
430 m
[ PC::make(9) ] = 7;
431 m
[ PC::make(11) ] = 8;
432 m
[ PC::make(13) ] = 9;
433 m
[ PC::make(15) ] = 10;
434 m
[ PC::make(17) ] = 11;
435 m
[ PC::make(19) ] = 12;
437 R r
= m
.equal_range(5);
438 assert(r
.first
== std::next(m
.begin(), 0));
439 assert(r
.second
== std::next(m
.begin(), 1));
440 r
= m
.equal_range(7);
441 assert(r
.first
== std::next(m
.begin(), 1));
442 assert(r
.second
== std::next(m
.begin(), 2));
443 r
= m
.equal_range(9);
444 assert(r
.first
== std::next(m
.begin(), 2));
445 assert(r
.second
== std::next(m
.begin(), 3));
446 r
= m
.equal_range(11);
447 assert(r
.first
== std::next(m
.begin(), 3));
448 assert(r
.second
== std::next(m
.begin(), 4));
449 r
= m
.equal_range(13);
450 assert(r
.first
== std::next(m
.begin(), 4));
451 assert(r
.second
== std::next(m
.begin(), 5));
452 r
= m
.equal_range(15);
453 assert(r
.first
== std::next(m
.begin(), 5));
454 assert(r
.second
== std::next(m
.begin(), 6));
455 r
= m
.equal_range(17);
456 assert(r
.first
== std::next(m
.begin(), 6));
457 assert(r
.second
== std::next(m
.begin(), 7));
458 r
= m
.equal_range(19);
459 assert(r
.first
== std::next(m
.begin(), 7));
460 assert(r
.second
== std::next(m
.begin(), 8));
461 r
= m
.equal_range(4);
462 assert(r
.first
== std::next(m
.begin(), 0));
463 assert(r
.second
== std::next(m
.begin(), 0));
464 r
= m
.equal_range(6);
465 assert(r
.first
== std::next(m
.begin(), 1));
466 assert(r
.second
== std::next(m
.begin(), 1));
467 r
= m
.equal_range(8);
468 assert(r
.first
== std::next(m
.begin(), 2));
469 assert(r
.second
== std::next(m
.begin(), 2));
470 r
= m
.equal_range(10);
471 assert(r
.first
== std::next(m
.begin(), 3));
472 assert(r
.second
== std::next(m
.begin(), 3));
473 r
= m
.equal_range(12);
474 assert(r
.first
== std::next(m
.begin(), 4));
475 assert(r
.second
== std::next(m
.begin(), 4));
476 r
= m
.equal_range(14);
477 assert(r
.first
== std::next(m
.begin(), 5));
478 assert(r
.second
== std::next(m
.begin(), 5));
479 r
= m
.equal_range(16);
480 assert(r
.first
== std::next(m
.begin(), 6));
481 assert(r
.second
== std::next(m
.begin(), 6));
482 r
= m
.equal_range(18);
483 assert(r
.first
== std::next(m
.begin(), 7));
484 assert(r
.second
== std::next(m
.begin(), 7));
485 r
= m
.equal_range(20);
486 assert(r
.first
== std::next(m
.begin(), 8));
487 assert(r
.second
== std::next(m
.begin(), 8));