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 // <set>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // class multiset
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 <set>
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 int V;
275a83710eSEric Fiselier typedef std::multiset<int> M;
285a83710eSEric Fiselier {
295a83710eSEric Fiselier typedef M::iterator R;
305a83710eSEric Fiselier V ar[] =
315a83710eSEric Fiselier {
325a83710eSEric Fiselier 5,
335a83710eSEric Fiselier 5,
345a83710eSEric Fiselier 5,
355a83710eSEric Fiselier 7,
365a83710eSEric Fiselier 7,
375a83710eSEric Fiselier 7,
385a83710eSEric Fiselier 9,
395a83710eSEric Fiselier 9,
405a83710eSEric Fiselier 9
415a83710eSEric Fiselier };
425a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
435a83710eSEric Fiselier R r = m.upper_bound(4);
44*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
455a83710eSEric Fiselier r = m.upper_bound(5);
46*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
475a83710eSEric Fiselier r = m.upper_bound(6);
48*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
495a83710eSEric Fiselier r = m.upper_bound(7);
50*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
515a83710eSEric Fiselier r = m.upper_bound(8);
52*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
535a83710eSEric Fiselier r = m.upper_bound(9);
54*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
555a83710eSEric Fiselier r = m.upper_bound(11);
56*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
575a83710eSEric Fiselier }
585a83710eSEric Fiselier {
595a83710eSEric Fiselier typedef M::const_iterator R;
605a83710eSEric Fiselier V ar[] =
615a83710eSEric Fiselier {
625a83710eSEric Fiselier 5,
635a83710eSEric Fiselier 5,
645a83710eSEric Fiselier 5,
655a83710eSEric Fiselier 7,
665a83710eSEric Fiselier 7,
675a83710eSEric Fiselier 7,
685a83710eSEric Fiselier 9,
695a83710eSEric Fiselier 9,
705a83710eSEric Fiselier 9
715a83710eSEric Fiselier };
725a83710eSEric Fiselier const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
735a83710eSEric Fiselier R r = m.upper_bound(4);
74*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
755a83710eSEric Fiselier r = m.upper_bound(5);
76*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
775a83710eSEric Fiselier r = m.upper_bound(6);
78*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
795a83710eSEric Fiselier r = m.upper_bound(7);
80*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
815a83710eSEric Fiselier r = m.upper_bound(8);
82*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
835a83710eSEric Fiselier r = m.upper_bound(9);
84*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
855a83710eSEric Fiselier r = m.upper_bound(11);
86*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
875a83710eSEric Fiselier }
885a83710eSEric Fiselier }
89f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
905a83710eSEric Fiselier {
915a83710eSEric Fiselier typedef int V;
925a83710eSEric Fiselier typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
935a83710eSEric Fiselier {
945a83710eSEric Fiselier typedef M::iterator R;
955a83710eSEric Fiselier V ar[] =
965a83710eSEric Fiselier {
975a83710eSEric Fiselier 5,
985a83710eSEric Fiselier 5,
995a83710eSEric Fiselier 5,
1005a83710eSEric Fiselier 7,
1015a83710eSEric Fiselier 7,
1025a83710eSEric Fiselier 7,
1035a83710eSEric Fiselier 9,
1045a83710eSEric Fiselier 9,
1055a83710eSEric Fiselier 9
1065a83710eSEric Fiselier };
1075a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1085a83710eSEric Fiselier R r = m.upper_bound(4);
109*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
1105a83710eSEric Fiselier r = m.upper_bound(5);
111*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1125a83710eSEric Fiselier r = m.upper_bound(6);
113*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1145a83710eSEric Fiselier r = m.upper_bound(7);
115*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1165a83710eSEric Fiselier r = m.upper_bound(8);
117*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1185a83710eSEric Fiselier r = m.upper_bound(9);
119*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
1205a83710eSEric Fiselier r = m.upper_bound(11);
121*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
1225a83710eSEric Fiselier }
1235a83710eSEric Fiselier {
1245a83710eSEric Fiselier typedef M::const_iterator R;
1255a83710eSEric Fiselier V ar[] =
1265a83710eSEric Fiselier {
1275a83710eSEric Fiselier 5,
1285a83710eSEric Fiselier 5,
1295a83710eSEric Fiselier 5,
1305a83710eSEric Fiselier 7,
1315a83710eSEric Fiselier 7,
1325a83710eSEric Fiselier 7,
1335a83710eSEric Fiselier 9,
1345a83710eSEric Fiselier 9,
1355a83710eSEric Fiselier 9
1365a83710eSEric Fiselier };
1375a83710eSEric Fiselier const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1385a83710eSEric Fiselier R r = m.upper_bound(4);
139*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
1405a83710eSEric Fiselier r = m.upper_bound(5);
141*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1425a83710eSEric Fiselier r = m.upper_bound(6);
143*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1445a83710eSEric Fiselier r = m.upper_bound(7);
145*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1465a83710eSEric Fiselier r = m.upper_bound(8);
147*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1485a83710eSEric Fiselier r = m.upper_bound(9);
149*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
1505a83710eSEric Fiselier r = m.upper_bound(11);
151*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
1525a83710eSEric Fiselier }
1535a83710eSEric Fiselier }
1545a83710eSEric Fiselier #endif
1550f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
1565a83710eSEric Fiselier {
1575a83710eSEric Fiselier typedef int V;
1585a83710eSEric Fiselier typedef std::multiset<V, std::less<>> M;
1595a83710eSEric Fiselier
1605a83710eSEric Fiselier typedef M::iterator R;
1615a83710eSEric Fiselier V ar[] =
1625a83710eSEric Fiselier {
1635a83710eSEric Fiselier 5,
1645a83710eSEric Fiselier 5,
1655a83710eSEric Fiselier 5,
1665a83710eSEric Fiselier 7,
1675a83710eSEric Fiselier 7,
1685a83710eSEric Fiselier 7,
1695a83710eSEric Fiselier 9,
1705a83710eSEric Fiselier 9,
1715a83710eSEric Fiselier 9
1725a83710eSEric Fiselier };
1735a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1745a83710eSEric Fiselier R r = m.upper_bound(4);
175*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
1765a83710eSEric Fiselier r = m.upper_bound(5);
177*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1785a83710eSEric Fiselier r = m.upper_bound(6);
179*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
1805a83710eSEric Fiselier r = m.upper_bound(7);
181*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1825a83710eSEric Fiselier r = m.upper_bound(8);
183*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
1845a83710eSEric Fiselier r = m.upper_bound(9);
185*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
1865a83710eSEric Fiselier r = m.upper_bound(11);
187*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
1885a83710eSEric Fiselier }
1895a83710eSEric Fiselier
1905a83710eSEric Fiselier {
1915a83710eSEric Fiselier typedef PrivateConstructor V;
1925a83710eSEric Fiselier typedef std::multiset<V, std::less<>> M;
1935a83710eSEric Fiselier
1945a83710eSEric Fiselier typedef M::iterator R;
1955a83710eSEric Fiselier M m;
1965a83710eSEric Fiselier m.insert ( V::make ( 5 ));
1975a83710eSEric Fiselier m.insert ( V::make ( 5 ));
1985a83710eSEric Fiselier m.insert ( V::make ( 5 ));
1995a83710eSEric Fiselier m.insert ( V::make ( 7 ));
2005a83710eSEric Fiselier m.insert ( V::make ( 7 ));
2015a83710eSEric Fiselier m.insert ( V::make ( 7 ));
2025a83710eSEric Fiselier m.insert ( V::make ( 9 ));
2035a83710eSEric Fiselier m.insert ( V::make ( 9 ));
2045a83710eSEric Fiselier m.insert ( V::make ( 9 ));
2055a83710eSEric Fiselier
2065a83710eSEric Fiselier R r = m.upper_bound(4);
207*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 0));
2085a83710eSEric Fiselier r = m.upper_bound(5);
209*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
2105a83710eSEric Fiselier r = m.upper_bound(6);
211*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 3));
2125a83710eSEric Fiselier r = m.upper_bound(7);
213*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
2145a83710eSEric Fiselier r = m.upper_bound(8);
215*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 6));
2165a83710eSEric Fiselier r = m.upper_bound(9);
217*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
2185a83710eSEric Fiselier r = m.upper_bound(11);
219*5ffe11a9SArthur O'Dwyer assert(r == std::next(m.begin(), 9));
2205a83710eSEric Fiselier }
2215a83710eSEric Fiselier #endif
2222df59c50SJF Bastien
2232df59c50SJF Bastien return 0;
2245a83710eSEric Fiselier }
225