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 // 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 <map>
18 #include <cassert>
19
20 #include "min_allocator.h"
21 #include "private_constructor.hpp"
22
main()23 int main()
24 {
25 {
26 typedef std::pair<const int, double> V;
27 typedef std::map<int, double> M;
28 {
29 typedef std::pair<M::iterator, M::iterator> R;
30 V ar[] =
31 {
32 V(5, 5),
33 V(7, 6),
34 V(9, 7),
35 V(11, 8),
36 V(13, 9),
37 V(15, 10),
38 V(17, 11),
39 V(19, 12)
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 V(5, 5),
99 V(7, 6),
100 V(9, 7),
101 V(11, 8),
102 V(13, 9),
103 V(15, 10),
104 V(17, 11),
105 V(19, 12)
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 std::pair<const int, double> V;
164 typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
165 {
166 typedef std::pair<M::iterator, M::iterator> R;
167 V ar[] =
168 {
169 V(5, 5),
170 V(7, 6),
171 V(9, 7),
172 V(11, 8),
173 V(13, 9),
174 V(15, 10),
175 V(17, 11),
176 V(19, 12)
177 };
178 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
179 R r = m.equal_range(5);
180 assert(r.first == next(m.begin(), 0));
181 assert(r.second == next(m.begin(), 1));
182 r = m.equal_range(7);
183 assert(r.first == next(m.begin(), 1));
184 assert(r.second == next(m.begin(), 2));
185 r = m.equal_range(9);
186 assert(r.first == next(m.begin(), 2));
187 assert(r.second == next(m.begin(), 3));
188 r = m.equal_range(11);
189 assert(r.first == next(m.begin(), 3));
190 assert(r.second == next(m.begin(), 4));
191 r = m.equal_range(13);
192 assert(r.first == next(m.begin(), 4));
193 assert(r.second == next(m.begin(), 5));
194 r = m.equal_range(15);
195 assert(r.first == next(m.begin(), 5));
196 assert(r.second == next(m.begin(), 6));
197 r = m.equal_range(17);
198 assert(r.first == next(m.begin(), 6));
199 assert(r.second == next(m.begin(), 7));
200 r = m.equal_range(19);
201 assert(r.first == next(m.begin(), 7));
202 assert(r.second == next(m.begin(), 8));
203 r = m.equal_range(4);
204 assert(r.first == next(m.begin(), 0));
205 assert(r.second == next(m.begin(), 0));
206 r = m.equal_range(6);
207 assert(r.first == next(m.begin(), 1));
208 assert(r.second == next(m.begin(), 1));
209 r = m.equal_range(8);
210 assert(r.first == next(m.begin(), 2));
211 assert(r.second == next(m.begin(), 2));
212 r = m.equal_range(10);
213 assert(r.first == next(m.begin(), 3));
214 assert(r.second == next(m.begin(), 3));
215 r = m.equal_range(12);
216 assert(r.first == next(m.begin(), 4));
217 assert(r.second == next(m.begin(), 4));
218 r = m.equal_range(14);
219 assert(r.first == next(m.begin(), 5));
220 assert(r.second == next(m.begin(), 5));
221 r = m.equal_range(16);
222 assert(r.first == next(m.begin(), 6));
223 assert(r.second == next(m.begin(), 6));
224 r = m.equal_range(18);
225 assert(r.first == next(m.begin(), 7));
226 assert(r.second == next(m.begin(), 7));
227 r = m.equal_range(20);
228 assert(r.first == next(m.begin(), 8));
229 assert(r.second == next(m.begin(), 8));
230 }
231 {
232 typedef std::pair<M::const_iterator, M::const_iterator> R;
233 V ar[] =
234 {
235 V(5, 5),
236 V(7, 6),
237 V(9, 7),
238 V(11, 8),
239 V(13, 9),
240 V(15, 10),
241 V(17, 11),
242 V(19, 12)
243 };
244 const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
245 R r = m.equal_range(5);
246 assert(r.first == next(m.begin(), 0));
247 assert(r.second == next(m.begin(), 1));
248 r = m.equal_range(7);
249 assert(r.first == next(m.begin(), 1));
250 assert(r.second == next(m.begin(), 2));
251 r = m.equal_range(9);
252 assert(r.first == next(m.begin(), 2));
253 assert(r.second == next(m.begin(), 3));
254 r = m.equal_range(11);
255 assert(r.first == next(m.begin(), 3));
256 assert(r.second == next(m.begin(), 4));
257 r = m.equal_range(13);
258 assert(r.first == next(m.begin(), 4));
259 assert(r.second == next(m.begin(), 5));
260 r = m.equal_range(15);
261 assert(r.first == next(m.begin(), 5));
262 assert(r.second == next(m.begin(), 6));
263 r = m.equal_range(17);
264 assert(r.first == next(m.begin(), 6));
265 assert(r.second == next(m.begin(), 7));
266 r = m.equal_range(19);
267 assert(r.first == next(m.begin(), 7));
268 assert(r.second == next(m.begin(), 8));
269 r = m.equal_range(4);
270 assert(r.first == next(m.begin(), 0));
271 assert(r.second == next(m.begin(), 0));
272 r = m.equal_range(6);
273 assert(r.first == next(m.begin(), 1));
274 assert(r.second == next(m.begin(), 1));
275 r = m.equal_range(8);
276 assert(r.first == next(m.begin(), 2));
277 assert(r.second == next(m.begin(), 2));
278 r = m.equal_range(10);
279 assert(r.first == next(m.begin(), 3));
280 assert(r.second == next(m.begin(), 3));
281 r = m.equal_range(12);
282 assert(r.first == next(m.begin(), 4));
283 assert(r.second == next(m.begin(), 4));
284 r = m.equal_range(14);
285 assert(r.first == next(m.begin(), 5));
286 assert(r.second == next(m.begin(), 5));
287 r = m.equal_range(16);
288 assert(r.first == next(m.begin(), 6));
289 assert(r.second == next(m.begin(), 6));
290 r = m.equal_range(18);
291 assert(r.first == next(m.begin(), 7));
292 assert(r.second == next(m.begin(), 7));
293 r = m.equal_range(20);
294 assert(r.first == next(m.begin(), 8));
295 assert(r.second == next(m.begin(), 8));
296 }
297 }
298 #endif
299 #if _LIBCPP_STD_VER > 11
300 {
301 typedef std::pair<const int, double> V;
302 typedef std::map<int, double, std::less<>> M;
303 typedef std::pair<M::iterator, M::iterator> R;
304
305 V ar[] =
306 {
307 V(5, 5),
308 V(7, 6),
309 V(9, 7),
310 V(11, 8),
311 V(13, 9),
312 V(15, 10),
313 V(17, 11),
314 V(19, 12)
315 };
316 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
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 {
370 typedef PrivateConstructor PC;
371 typedef std::map<PC, double, std::less<>> M;
372 typedef std::pair<M::iterator, M::iterator> R;
373
374 M m;
375 m [ PC::make(5) ] = 5;
376 m [ PC::make(7) ] = 6;
377 m [ PC::make(9) ] = 7;
378 m [ PC::make(11) ] = 8;
379 m [ PC::make(13) ] = 9;
380 m [ PC::make(15) ] = 10;
381 m [ PC::make(17) ] = 11;
382 m [ PC::make(19) ] = 12;
383
384 R r = m.equal_range(5);
385 assert(r.first == next(m.begin(), 0));
386 assert(r.second == next(m.begin(), 1));
387 r = m.equal_range(7);
388 assert(r.first == next(m.begin(), 1));
389 assert(r.second == next(m.begin(), 2));
390 r = m.equal_range(9);
391 assert(r.first == next(m.begin(), 2));
392 assert(r.second == next(m.begin(), 3));
393 r = m.equal_range(11);
394 assert(r.first == next(m.begin(), 3));
395 assert(r.second == next(m.begin(), 4));
396 r = m.equal_range(13);
397 assert(r.first == next(m.begin(), 4));
398 assert(r.second == next(m.begin(), 5));
399 r = m.equal_range(15);
400 assert(r.first == next(m.begin(), 5));
401 assert(r.second == next(m.begin(), 6));
402 r = m.equal_range(17);
403 assert(r.first == next(m.begin(), 6));
404 assert(r.second == next(m.begin(), 7));
405 r = m.equal_range(19);
406 assert(r.first == next(m.begin(), 7));
407 assert(r.second == next(m.begin(), 8));
408 r = m.equal_range(4);
409 assert(r.first == next(m.begin(), 0));
410 assert(r.second == next(m.begin(), 0));
411 r = m.equal_range(6);
412 assert(r.first == next(m.begin(), 1));
413 assert(r.second == next(m.begin(), 1));
414 r = m.equal_range(8);
415 assert(r.first == next(m.begin(), 2));
416 assert(r.second == next(m.begin(), 2));
417 r = m.equal_range(10);
418 assert(r.first == next(m.begin(), 3));
419 assert(r.second == next(m.begin(), 3));
420 r = m.equal_range(12);
421 assert(r.first == next(m.begin(), 4));
422 assert(r.second == next(m.begin(), 4));
423 r = m.equal_range(14);
424 assert(r.first == next(m.begin(), 5));
425 assert(r.second == next(m.begin(), 5));
426 r = m.equal_range(16);
427 assert(r.first == next(m.begin(), 6));
428 assert(r.second == next(m.begin(), 6));
429 r = m.equal_range(18);
430 assert(r.first == next(m.begin(), 7));
431 assert(r.second == next(m.begin(), 7));
432 r = m.equal_range(20);
433 assert(r.first == next(m.begin(), 8));
434 assert(r.second == next(m.begin(), 8));
435 }
436 #endif
437 }
438