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