15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <map>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // class map
125a83710eSEric Fiselier
135a83710eSEric Fiselier // iterator upper_bound(const key_type& k);
145a83710eSEric Fiselier // const_iterator upper_bound(const key_type& k) const;
155a83710eSEric Fiselier
165a83710eSEric Fiselier #include <map>
175a83710eSEric Fiselier #include <cassert>
185a83710eSEric Fiselier
190f901c7eSStephan T. Lavavej #include "test_macros.h"
205a83710eSEric Fiselier #include "min_allocator.h"
21cc89063bSNico Weber #include "private_constructor.h"
225a83710eSEric Fiselier
main(int,char **)232df59c50SJF Bastien int main(int, char**)
245a83710eSEric Fiselier {
255a83710eSEric Fiselier {
265a83710eSEric Fiselier typedef std::pair<const int, double> V;
275a83710eSEric Fiselier typedef std::map<int, double> M;
285a83710eSEric Fiselier {
295a83710eSEric Fiselier typedef M::iterator R;
305a83710eSEric Fiselier V ar[] =
315a83710eSEric Fiselier {
325a83710eSEric Fiselier V(5, 5),
335a83710eSEric Fiselier V(7, 6),
345a83710eSEric Fiselier V(9, 7),
355a83710eSEric Fiselier V(11, 8),
365a83710eSEric Fiselier V(13, 9),
375a83710eSEric Fiselier V(15, 10),
385a83710eSEric Fiselier V(17, 11),
395a83710eSEric Fiselier V(19, 12)
405a83710eSEric Fiselier };
415a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
425a83710eSEric Fiselier R r = m.upper_bound(5);
43*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
445a83710eSEric Fiselier r = m.upper_bound(7);
45*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
465a83710eSEric Fiselier r = m.upper_bound(9);
47*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
485a83710eSEric Fiselier r = m.upper_bound(11);
49*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
505a83710eSEric Fiselier r = m.upper_bound(13);
51*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
525a83710eSEric Fiselier r = m.upper_bound(15);
53*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
545a83710eSEric Fiselier r = m.upper_bound(17);
55*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
565a83710eSEric Fiselier r = m.upper_bound(19);
57*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
585a83710eSEric Fiselier r = m.upper_bound(4);
59*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
605a83710eSEric Fiselier r = m.upper_bound(6);
61*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
625a83710eSEric Fiselier r = m.upper_bound(8);
63*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
645a83710eSEric Fiselier r = m.upper_bound(10);
65*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
665a83710eSEric Fiselier r = m.upper_bound(12);
67*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
685a83710eSEric Fiselier r = m.upper_bound(14);
69*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
705a83710eSEric Fiselier r = m.upper_bound(16);
71*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
725a83710eSEric Fiselier r = m.upper_bound(18);
73*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
745a83710eSEric Fiselier r = m.upper_bound(20);
75*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
765a83710eSEric Fiselier }
775a83710eSEric Fiselier {
785a83710eSEric Fiselier typedef M::const_iterator R;
795a83710eSEric Fiselier V ar[] =
805a83710eSEric Fiselier {
815a83710eSEric Fiselier V(5, 5),
825a83710eSEric Fiselier V(7, 6),
835a83710eSEric Fiselier V(9, 7),
845a83710eSEric Fiselier V(11, 8),
855a83710eSEric Fiselier V(13, 9),
865a83710eSEric Fiselier V(15, 10),
875a83710eSEric Fiselier V(17, 11),
885a83710eSEric Fiselier V(19, 12)
895a83710eSEric Fiselier };
905a83710eSEric Fiselier const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
915a83710eSEric Fiselier R r = m.upper_bound(5);
92*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
935a83710eSEric Fiselier r = m.upper_bound(7);
94*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
955a83710eSEric Fiselier r = m.upper_bound(9);
96*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
975a83710eSEric Fiselier r = m.upper_bound(11);
98*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
995a83710eSEric Fiselier r = m.upper_bound(13);
100*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
1015a83710eSEric Fiselier r = m.upper_bound(15);
102*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1035a83710eSEric Fiselier r = m.upper_bound(17);
104*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
1055a83710eSEric Fiselier r = m.upper_bound(19);
106*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
1075a83710eSEric Fiselier r = m.upper_bound(4);
108*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
1095a83710eSEric Fiselier r = m.upper_bound(6);
110*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
1115a83710eSEric Fiselier r = m.upper_bound(8);
112*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
1135a83710eSEric Fiselier r = m.upper_bound(10);
114*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1155a83710eSEric Fiselier r = m.upper_bound(12);
116*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
1175a83710eSEric Fiselier r = m.upper_bound(14);
118*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
1195a83710eSEric Fiselier r = m.upper_bound(16);
120*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1215a83710eSEric Fiselier r = m.upper_bound(18);
122*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
1235a83710eSEric Fiselier r = m.upper_bound(20);
124*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
1255a83710eSEric Fiselier }
1265a83710eSEric Fiselier }
127f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
1285a83710eSEric Fiselier {
1295a83710eSEric Fiselier typedef std::pair<const int, double> V;
1305a83710eSEric Fiselier typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
1315a83710eSEric Fiselier {
1325a83710eSEric Fiselier typedef M::iterator R;
1335a83710eSEric Fiselier V ar[] =
1345a83710eSEric Fiselier {
1355a83710eSEric Fiselier V(5, 5),
1365a83710eSEric Fiselier V(7, 6),
1375a83710eSEric Fiselier V(9, 7),
1385a83710eSEric Fiselier V(11, 8),
1395a83710eSEric Fiselier V(13, 9),
1405a83710eSEric Fiselier V(15, 10),
1415a83710eSEric Fiselier V(17, 11),
1425a83710eSEric Fiselier V(19, 12)
1435a83710eSEric Fiselier };
1445a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1455a83710eSEric Fiselier R r = m.upper_bound(5);
146*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
1475a83710eSEric Fiselier r = m.upper_bound(7);
148*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
1495a83710eSEric Fiselier r = m.upper_bound(9);
150*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1515a83710eSEric Fiselier r = m.upper_bound(11);
152*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
1535a83710eSEric Fiselier r = m.upper_bound(13);
154*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
1555a83710eSEric Fiselier r = m.upper_bound(15);
156*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1575a83710eSEric Fiselier r = m.upper_bound(17);
158*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
1595a83710eSEric Fiselier r = m.upper_bound(19);
160*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
1615a83710eSEric Fiselier r = m.upper_bound(4);
162*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
1635a83710eSEric Fiselier r = m.upper_bound(6);
164*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
1655a83710eSEric Fiselier r = m.upper_bound(8);
166*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
1675a83710eSEric Fiselier r = m.upper_bound(10);
168*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1695a83710eSEric Fiselier r = m.upper_bound(12);
170*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
1715a83710eSEric Fiselier r = m.upper_bound(14);
172*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
1735a83710eSEric Fiselier r = m.upper_bound(16);
174*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1755a83710eSEric Fiselier r = m.upper_bound(18);
176*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
1775a83710eSEric Fiselier r = m.upper_bound(20);
178*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
1795a83710eSEric Fiselier }
1805a83710eSEric Fiselier {
1815a83710eSEric Fiselier typedef M::const_iterator R;
1825a83710eSEric Fiselier V ar[] =
1835a83710eSEric Fiselier {
1845a83710eSEric Fiselier V(5, 5),
1855a83710eSEric Fiselier V(7, 6),
1865a83710eSEric Fiselier V(9, 7),
1875a83710eSEric Fiselier V(11, 8),
1885a83710eSEric Fiselier V(13, 9),
1895a83710eSEric Fiselier V(15, 10),
1905a83710eSEric Fiselier V(17, 11),
1915a83710eSEric Fiselier V(19, 12)
1925a83710eSEric Fiselier };
1935a83710eSEric Fiselier const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1945a83710eSEric Fiselier R r = m.upper_bound(5);
195*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
1965a83710eSEric Fiselier r = m.upper_bound(7);
197*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
1985a83710eSEric Fiselier r = m.upper_bound(9);
199*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
2005a83710eSEric Fiselier r = m.upper_bound(11);
201*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
2025a83710eSEric Fiselier r = m.upper_bound(13);
203*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
2045a83710eSEric Fiselier r = m.upper_bound(15);
205*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
2065a83710eSEric Fiselier r = m.upper_bound(17);
207*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
2085a83710eSEric Fiselier r = m.upper_bound(19);
209*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
2105a83710eSEric Fiselier r = m.upper_bound(4);
211*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
2125a83710eSEric Fiselier r = m.upper_bound(6);
213*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
2145a83710eSEric Fiselier r = m.upper_bound(8);
215*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
2165a83710eSEric Fiselier r = m.upper_bound(10);
217*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
2185a83710eSEric Fiselier r = m.upper_bound(12);
219*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
2205a83710eSEric Fiselier r = m.upper_bound(14);
221*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
2225a83710eSEric Fiselier r = m.upper_bound(16);
223*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
2245a83710eSEric Fiselier r = m.upper_bound(18);
225*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
2265a83710eSEric Fiselier r = m.upper_bound(20);
227*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
2285a83710eSEric Fiselier }
2295a83710eSEric Fiselier }
2305a83710eSEric Fiselier #endif
2310f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
2325a83710eSEric Fiselier {
2335a83710eSEric Fiselier typedef std::pair<const int, double> V;
2345a83710eSEric Fiselier typedef std::map<int, double, std::less<>> M;
2355a83710eSEric Fiselier typedef M::iterator R;
2365a83710eSEric Fiselier V ar[] =
2375a83710eSEric Fiselier {
2385a83710eSEric Fiselier V(5, 5),
2395a83710eSEric Fiselier V(7, 6),
2405a83710eSEric Fiselier V(9, 7),
2415a83710eSEric Fiselier V(11, 8),
2425a83710eSEric Fiselier V(13, 9),
2435a83710eSEric Fiselier V(15, 10),
2445a83710eSEric Fiselier V(17, 11),
2455a83710eSEric Fiselier V(19, 12)
2465a83710eSEric Fiselier };
2475a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
2485a83710eSEric Fiselier R r = m.upper_bound(5);
249*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
2505a83710eSEric Fiselier r = m.upper_bound(7);
251*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
2525a83710eSEric Fiselier r = m.upper_bound(9);
253*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
2545a83710eSEric Fiselier r = m.upper_bound(11);
255*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
2565a83710eSEric Fiselier r = m.upper_bound(13);
257*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
2585a83710eSEric Fiselier r = m.upper_bound(15);
259*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
2605a83710eSEric Fiselier r = m.upper_bound(17);
261*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
2625a83710eSEric Fiselier r = m.upper_bound(19);
263*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
2645a83710eSEric Fiselier r = m.upper_bound(4);
265*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
2665a83710eSEric Fiselier r = m.upper_bound(6);
267*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
2685a83710eSEric Fiselier r = m.upper_bound(8);
269*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
2705a83710eSEric Fiselier r = m.upper_bound(10);
271*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
2725a83710eSEric Fiselier r = m.upper_bound(12);
273*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
2745a83710eSEric Fiselier r = m.upper_bound(14);
275*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
2765a83710eSEric Fiselier r = m.upper_bound(16);
277*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
2785a83710eSEric Fiselier r = m.upper_bound(18);
279*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
2805a83710eSEric Fiselier r = m.upper_bound(20);
281*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
2825a83710eSEric Fiselier }
2835a83710eSEric Fiselier
2845a83710eSEric Fiselier {
2855a83710eSEric Fiselier typedef PrivateConstructor PC;
2865a83710eSEric Fiselier typedef std::map<PC, double, std::less<>> M;
2875a83710eSEric Fiselier typedef M::iterator R;
2885a83710eSEric Fiselier
2895a83710eSEric Fiselier M m;
2905a83710eSEric Fiselier m [ PC::make(5) ] = 5;
2915a83710eSEric Fiselier m [ PC::make(7) ] = 6;
2925a83710eSEric Fiselier m [ PC::make(9) ] = 7;
2935a83710eSEric Fiselier m [ PC::make(11) ] = 8;
2945a83710eSEric Fiselier m [ PC::make(13) ] = 9;
2955a83710eSEric Fiselier m [ PC::make(15) ] = 10;
2965a83710eSEric Fiselier m [ PC::make(17) ] = 11;
2975a83710eSEric Fiselier m [ PC::make(19) ] = 12;
2985a83710eSEric Fiselier
2995a83710eSEric Fiselier R r = m.upper_bound(5);
300*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
3015a83710eSEric Fiselier r = m.upper_bound(7);
302*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
3035a83710eSEric Fiselier r = m.upper_bound(9);
304*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
3055a83710eSEric Fiselier r = m.upper_bound(11);
306*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
3075a83710eSEric Fiselier r = m.upper_bound(13);
308*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
3095a83710eSEric Fiselier r = m.upper_bound(15);
310*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
3115a83710eSEric Fiselier r = m.upper_bound(17);
312*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
3135a83710eSEric Fiselier r = m.upper_bound(19);
314*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
3155a83710eSEric Fiselier r = m.upper_bound(4);
316*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
3175a83710eSEric Fiselier r = m.upper_bound(6);
318*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 1));
3195a83710eSEric Fiselier r = m.upper_bound(8);
320*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 2));
3215a83710eSEric Fiselier r = m.upper_bound(10);
322*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
3235a83710eSEric Fiselier r = m.upper_bound(12);
324*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 4));
3255a83710eSEric Fiselier r = m.upper_bound(14);
326*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 5));
3275a83710eSEric Fiselier r = m.upper_bound(16);
328*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
3295a83710eSEric Fiselier r = m.upper_bound(18);
330*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 7));
3315a83710eSEric Fiselier r = m.upper_bound(20);
332*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 8));
3335a83710eSEric Fiselier }
3345a83710eSEric Fiselier #endif
3352df59c50SJF Bastien
3362df59c50SJF Bastien return 0;
3375a83710eSEric Fiselier }
338