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