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 // pair<iterator,iterator> equal_range(const key_type& k);
145a83710eSEric Fiselier // pair<const_iterator,const_iterator> equal_range(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 std::pair<M::iterator, 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.equal_range(4);
44*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
45*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 0));
465a83710eSEric Fiselier r = m.equal_range(5);
47*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
48*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
495a83710eSEric Fiselier r = m.equal_range(6);
50*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
51*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
525a83710eSEric Fiselier r = m.equal_range(7);
53*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
54*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
555a83710eSEric Fiselier r = m.equal_range(8);
56*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
57*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
585a83710eSEric Fiselier r = m.equal_range(9);
59*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
60*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
615a83710eSEric Fiselier r = m.equal_range(10);
62*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 9));
63*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
645a83710eSEric Fiselier }
655a83710eSEric Fiselier {
665a83710eSEric Fiselier typedef std::pair<M::const_iterator, M::const_iterator> R;
675a83710eSEric Fiselier V ar[] =
685a83710eSEric Fiselier {
695a83710eSEric Fiselier 5,
705a83710eSEric Fiselier 5,
715a83710eSEric Fiselier 5,
725a83710eSEric Fiselier 7,
735a83710eSEric Fiselier 7,
745a83710eSEric Fiselier 7,
755a83710eSEric Fiselier 9,
765a83710eSEric Fiselier 9,
775a83710eSEric Fiselier 9
785a83710eSEric Fiselier };
794999a5fdSMarshall Clow const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
805a83710eSEric Fiselier R r = m.equal_range(4);
81*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
82*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 0));
835a83710eSEric Fiselier r = m.equal_range(5);
84*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
85*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
865a83710eSEric Fiselier r = m.equal_range(6);
87*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
88*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
895a83710eSEric Fiselier r = m.equal_range(7);
90*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
91*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
925a83710eSEric Fiselier r = m.equal_range(8);
93*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
94*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
955a83710eSEric Fiselier r = m.equal_range(9);
96*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
97*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
985a83710eSEric Fiselier r = m.equal_range(10);
99*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 9));
100*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
1015a83710eSEric Fiselier }
1025a83710eSEric Fiselier }
103f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
1045a83710eSEric Fiselier {
1055a83710eSEric Fiselier typedef int V;
1065a83710eSEric Fiselier typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
1075a83710eSEric Fiselier {
1085a83710eSEric Fiselier typedef std::pair<M::iterator, M::iterator> R;
1095a83710eSEric Fiselier V ar[] =
1105a83710eSEric Fiselier {
1115a83710eSEric Fiselier 5,
1125a83710eSEric Fiselier 5,
1135a83710eSEric Fiselier 5,
1145a83710eSEric Fiselier 7,
1155a83710eSEric Fiselier 7,
1165a83710eSEric Fiselier 7,
1175a83710eSEric Fiselier 9,
1185a83710eSEric Fiselier 9,
1195a83710eSEric Fiselier 9
1205a83710eSEric Fiselier };
1215a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1225a83710eSEric Fiselier R r = m.equal_range(4);
123*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
124*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 0));
1255a83710eSEric Fiselier r = m.equal_range(5);
126*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
127*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
1285a83710eSEric Fiselier r = m.equal_range(6);
129*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
130*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
1315a83710eSEric Fiselier r = m.equal_range(7);
132*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
133*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
1345a83710eSEric Fiselier r = m.equal_range(8);
135*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
136*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
1375a83710eSEric Fiselier r = m.equal_range(9);
138*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
139*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
1405a83710eSEric Fiselier r = m.equal_range(10);
141*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 9));
142*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
1435a83710eSEric Fiselier }
1445a83710eSEric Fiselier {
1455a83710eSEric Fiselier typedef std::pair<M::const_iterator, M::const_iterator> R;
1465a83710eSEric Fiselier V ar[] =
1475a83710eSEric Fiselier {
1485a83710eSEric Fiselier 5,
1495a83710eSEric Fiselier 5,
1505a83710eSEric Fiselier 5,
1515a83710eSEric Fiselier 7,
1525a83710eSEric Fiselier 7,
1535a83710eSEric Fiselier 7,
1545a83710eSEric Fiselier 9,
1555a83710eSEric Fiselier 9,
1565a83710eSEric Fiselier 9
1575a83710eSEric Fiselier };
1584999a5fdSMarshall Clow const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1595a83710eSEric Fiselier R r = m.equal_range(4);
160*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
161*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 0));
1625a83710eSEric Fiselier r = m.equal_range(5);
163*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
164*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
1655a83710eSEric Fiselier r = m.equal_range(6);
166*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
167*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
1685a83710eSEric Fiselier r = m.equal_range(7);
169*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
170*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
1715a83710eSEric Fiselier r = m.equal_range(8);
172*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
173*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
1745a83710eSEric Fiselier r = m.equal_range(9);
175*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
176*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
1775a83710eSEric Fiselier r = m.equal_range(10);
178*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 9));
179*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
1805a83710eSEric Fiselier }
1815a83710eSEric Fiselier }
1825a83710eSEric Fiselier #endif
1830f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
1845a83710eSEric Fiselier {
1855a83710eSEric Fiselier typedef int V;
1865a83710eSEric Fiselier typedef std::multiset<V, std::less<>> M;
1875a83710eSEric Fiselier typedef std::pair<M::iterator, M::iterator> R;
1885a83710eSEric Fiselier V ar[] =
1895a83710eSEric Fiselier {
1905a83710eSEric Fiselier 5,
1915a83710eSEric Fiselier 5,
1925a83710eSEric Fiselier 5,
1935a83710eSEric Fiselier 7,
1945a83710eSEric Fiselier 7,
1955a83710eSEric Fiselier 7,
1965a83710eSEric Fiselier 9,
1975a83710eSEric Fiselier 9,
1985a83710eSEric Fiselier 9
1995a83710eSEric Fiselier };
2005a83710eSEric Fiselier M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
2015a83710eSEric Fiselier R r = m.equal_range(4);
202*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
203*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 0));
2045a83710eSEric Fiselier r = m.equal_range(5);
205*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
206*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
2075a83710eSEric Fiselier r = m.equal_range(6);
208*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
209*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
2105a83710eSEric Fiselier r = m.equal_range(7);
211*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
212*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
2135a83710eSEric Fiselier r = m.equal_range(8);
214*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
215*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
2165a83710eSEric Fiselier r = m.equal_range(9);
217*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
218*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
2195a83710eSEric Fiselier r = m.equal_range(10);
220*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 9));
221*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
2225a83710eSEric Fiselier }
2235a83710eSEric Fiselier
2245a83710eSEric Fiselier {
2255a83710eSEric Fiselier typedef PrivateConstructor V;
2265a83710eSEric Fiselier typedef std::multiset<V, std::less<>> M;
2275a83710eSEric Fiselier typedef std::pair<M::iterator, M::iterator> R;
2285a83710eSEric Fiselier
2295a83710eSEric Fiselier M m;
2305a83710eSEric Fiselier m.insert ( V::make ( 5 ));
2315a83710eSEric Fiselier m.insert ( V::make ( 5 ));
2325a83710eSEric Fiselier m.insert ( V::make ( 5 ));
2335a83710eSEric Fiselier m.insert ( V::make ( 7 ));
2345a83710eSEric Fiselier m.insert ( V::make ( 7 ));
2355a83710eSEric Fiselier m.insert ( V::make ( 7 ));
2365a83710eSEric Fiselier m.insert ( V::make ( 9 ));
2375a83710eSEric Fiselier m.insert ( V::make ( 9 ));
2385a83710eSEric Fiselier m.insert ( V::make ( 9 ));
2395a83710eSEric Fiselier
2405a83710eSEric Fiselier R r = m.equal_range(4);
241*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
242*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 0));
2435a83710eSEric Fiselier r = m.equal_range(5);
244*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 0));
245*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
2465a83710eSEric Fiselier r = m.equal_range(6);
247*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
248*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 3));
2495a83710eSEric Fiselier r = m.equal_range(7);
250*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 3));
251*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
2525a83710eSEric Fiselier r = m.equal_range(8);
253*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
254*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 6));
2555a83710eSEric Fiselier r = m.equal_range(9);
256*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 6));
257*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
2585a83710eSEric Fiselier r = m.equal_range(10);
259*5ffe11a9SArthur O'Dwyer assert(r.first == std::next(m.begin(), 9));
260*5ffe11a9SArthur O'Dwyer assert(r.second == std::next(m.begin(), 9));
2615a83710eSEric Fiselier }
2625a83710eSEric Fiselier #endif
2632df59c50SJF Bastien
2642df59c50SJF Bastien return 0;
2655a83710eSEric Fiselier }
266