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 // 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 <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"
22f8457a07SMarshall Clow #include "is_transparent.h"
235a83710eSEric Fiselier 
main(int,char **)242df59c50SJF Bastien int main(int, char**)
255a83710eSEric Fiselier {
265a83710eSEric Fiselier     {
275a83710eSEric Fiselier     typedef std::pair<const int, double> V;
285a83710eSEric Fiselier     typedef std::map<int, double> M;
295a83710eSEric Fiselier     {
305a83710eSEric Fiselier         typedef std::pair<M::iterator, M::iterator> R;
315a83710eSEric Fiselier         V ar[] =
325a83710eSEric Fiselier         {
335a83710eSEric Fiselier             V(5, 5),
345a83710eSEric Fiselier             V(7, 6),
355a83710eSEric Fiselier             V(9, 7),
365a83710eSEric Fiselier             V(11, 8),
375a83710eSEric Fiselier             V(13, 9),
385a83710eSEric Fiselier             V(15, 10),
395a83710eSEric Fiselier             V(17, 11),
405a83710eSEric Fiselier             V(19, 12)
415a83710eSEric Fiselier         };
425a83710eSEric Fiselier         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
435a83710eSEric Fiselier         R r = m.equal_range(5);
44*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
45*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
465a83710eSEric Fiselier         r = m.equal_range(7);
47*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
48*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
495a83710eSEric Fiselier         r = m.equal_range(9);
50*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
51*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
525a83710eSEric Fiselier         r = m.equal_range(11);
53*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
54*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
555a83710eSEric Fiselier         r = m.equal_range(13);
56*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
57*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
585a83710eSEric Fiselier         r = m.equal_range(15);
59*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
60*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
615a83710eSEric Fiselier         r = m.equal_range(17);
62*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
63*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
645a83710eSEric Fiselier         r = m.equal_range(19);
65*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
66*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
675a83710eSEric Fiselier         r = m.equal_range(4);
68*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
69*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 0));
705a83710eSEric Fiselier         r = m.equal_range(6);
71*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
72*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
735a83710eSEric Fiselier         r = m.equal_range(8);
74*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
75*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
765a83710eSEric Fiselier         r = m.equal_range(10);
77*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
78*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
795a83710eSEric Fiselier         r = m.equal_range(12);
80*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
81*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
825a83710eSEric Fiselier         r = m.equal_range(14);
83*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
84*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
855a83710eSEric Fiselier         r = m.equal_range(16);
86*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
87*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
885a83710eSEric Fiselier         r = m.equal_range(18);
89*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
90*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
915a83710eSEric Fiselier         r = m.equal_range(20);
92*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 8));
93*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
945a83710eSEric Fiselier     }
955a83710eSEric Fiselier     {
965a83710eSEric Fiselier         typedef std::pair<M::const_iterator, M::const_iterator> R;
975a83710eSEric Fiselier         V ar[] =
985a83710eSEric Fiselier         {
995a83710eSEric Fiselier             V(5, 5),
1005a83710eSEric Fiselier             V(7, 6),
1015a83710eSEric Fiselier             V(9, 7),
1025a83710eSEric Fiselier             V(11, 8),
1035a83710eSEric Fiselier             V(13, 9),
1045a83710eSEric Fiselier             V(15, 10),
1055a83710eSEric Fiselier             V(17, 11),
1065a83710eSEric Fiselier             V(19, 12)
1075a83710eSEric Fiselier         };
1085a83710eSEric Fiselier         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1095a83710eSEric Fiselier         R r = m.equal_range(5);
110*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
111*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
1125a83710eSEric Fiselier         r = m.equal_range(7);
113*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
114*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
1155a83710eSEric Fiselier         r = m.equal_range(9);
116*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
117*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
1185a83710eSEric Fiselier         r = m.equal_range(11);
119*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
120*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
1215a83710eSEric Fiselier         r = m.equal_range(13);
122*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
123*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
1245a83710eSEric Fiselier         r = m.equal_range(15);
125*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
126*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
1275a83710eSEric Fiselier         r = m.equal_range(17);
128*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
129*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
1305a83710eSEric Fiselier         r = m.equal_range(19);
131*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
132*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
1335a83710eSEric Fiselier         r = m.equal_range(4);
134*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
135*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 0));
1365a83710eSEric Fiselier         r = m.equal_range(6);
137*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
138*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
1395a83710eSEric Fiselier         r = m.equal_range(8);
140*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
141*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
1425a83710eSEric Fiselier         r = m.equal_range(10);
143*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
144*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
1455a83710eSEric Fiselier         r = m.equal_range(12);
146*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
147*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
1485a83710eSEric Fiselier         r = m.equal_range(14);
149*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
150*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
1515a83710eSEric Fiselier         r = m.equal_range(16);
152*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
153*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
1545a83710eSEric Fiselier         r = m.equal_range(18);
155*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
156*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
1575a83710eSEric Fiselier         r = m.equal_range(20);
158*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 8));
159*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
1605a83710eSEric Fiselier     }
1615a83710eSEric Fiselier     }
162f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
1635a83710eSEric Fiselier     {
1645a83710eSEric Fiselier     typedef std::pair<const int, double> V;
1655a83710eSEric Fiselier     typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
1665a83710eSEric Fiselier     {
1675a83710eSEric Fiselier         typedef std::pair<M::iterator, M::iterator> R;
1685a83710eSEric Fiselier         V ar[] =
1695a83710eSEric Fiselier         {
1705a83710eSEric Fiselier             V(5, 5),
1715a83710eSEric Fiselier             V(7, 6),
1725a83710eSEric Fiselier             V(9, 7),
1735a83710eSEric Fiselier             V(11, 8),
1745a83710eSEric Fiselier             V(13, 9),
1755a83710eSEric Fiselier             V(15, 10),
1765a83710eSEric Fiselier             V(17, 11),
1775a83710eSEric Fiselier             V(19, 12)
1785a83710eSEric Fiselier         };
1795a83710eSEric Fiselier         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1805a83710eSEric Fiselier         R r = m.equal_range(5);
181*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
182*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
1835a83710eSEric Fiselier         r = m.equal_range(7);
184*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
185*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
1865a83710eSEric Fiselier         r = m.equal_range(9);
187*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
188*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
1895a83710eSEric Fiselier         r = m.equal_range(11);
190*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
191*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
1925a83710eSEric Fiselier         r = m.equal_range(13);
193*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
194*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
1955a83710eSEric Fiselier         r = m.equal_range(15);
196*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
197*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
1985a83710eSEric Fiselier         r = m.equal_range(17);
199*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
200*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
2015a83710eSEric Fiselier         r = m.equal_range(19);
202*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
203*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
2045a83710eSEric Fiselier         r = m.equal_range(4);
205*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
206*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 0));
2075a83710eSEric Fiselier         r = m.equal_range(6);
208*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
209*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
2105a83710eSEric Fiselier         r = m.equal_range(8);
211*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
212*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
2135a83710eSEric Fiselier         r = m.equal_range(10);
214*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
215*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
2165a83710eSEric Fiselier         r = m.equal_range(12);
217*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
218*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
2195a83710eSEric Fiselier         r = m.equal_range(14);
220*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
221*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
2225a83710eSEric Fiselier         r = m.equal_range(16);
223*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
224*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
2255a83710eSEric Fiselier         r = m.equal_range(18);
226*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
227*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
2285a83710eSEric Fiselier         r = m.equal_range(20);
229*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 8));
230*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
2315a83710eSEric Fiselier     }
2325a83710eSEric Fiselier     {
2335a83710eSEric Fiselier         typedef std::pair<M::const_iterator, M::const_iterator> R;
2345a83710eSEric Fiselier         V ar[] =
2355a83710eSEric Fiselier         {
2365a83710eSEric Fiselier             V(5, 5),
2375a83710eSEric Fiselier             V(7, 6),
2385a83710eSEric Fiselier             V(9, 7),
2395a83710eSEric Fiselier             V(11, 8),
2405a83710eSEric Fiselier             V(13, 9),
2415a83710eSEric Fiselier             V(15, 10),
2425a83710eSEric Fiselier             V(17, 11),
2435a83710eSEric Fiselier             V(19, 12)
2445a83710eSEric Fiselier         };
2455a83710eSEric Fiselier         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
2465a83710eSEric Fiselier         R r = m.equal_range(5);
247*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
248*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
2495a83710eSEric Fiselier         r = m.equal_range(7);
250*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
251*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
2525a83710eSEric Fiselier         r = m.equal_range(9);
253*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
254*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
2555a83710eSEric Fiselier         r = m.equal_range(11);
256*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
257*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
2585a83710eSEric Fiselier         r = m.equal_range(13);
259*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
260*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
2615a83710eSEric Fiselier         r = m.equal_range(15);
262*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
263*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
2645a83710eSEric Fiselier         r = m.equal_range(17);
265*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
266*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
2675a83710eSEric Fiselier         r = m.equal_range(19);
268*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
269*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
2705a83710eSEric Fiselier         r = m.equal_range(4);
271*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 0));
272*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 0));
2735a83710eSEric Fiselier         r = m.equal_range(6);
274*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 1));
275*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 1));
2765a83710eSEric Fiselier         r = m.equal_range(8);
277*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 2));
278*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 2));
2795a83710eSEric Fiselier         r = m.equal_range(10);
280*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 3));
281*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 3));
2825a83710eSEric Fiselier         r = m.equal_range(12);
283*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 4));
284*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 4));
2855a83710eSEric Fiselier         r = m.equal_range(14);
286*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 5));
287*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 5));
2885a83710eSEric Fiselier         r = m.equal_range(16);
289*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 6));
290*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 6));
2915a83710eSEric Fiselier         r = m.equal_range(18);
292*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 7));
293*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 7));
2945a83710eSEric Fiselier         r = m.equal_range(20);
295*5ffe11a9SArthur O'Dwyer         assert(r.first == std::next(m.begin(), 8));
296*5ffe11a9SArthur O'Dwyer         assert(r.second == std::next(m.begin(), 8));
2975a83710eSEric Fiselier     }
2985a83710eSEric Fiselier     }
2995a83710eSEric Fiselier #endif
3000f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
3015a83710eSEric Fiselier     {
3025a83710eSEric Fiselier     typedef std::pair<const int, double> V;
3035a83710eSEric Fiselier     typedef std::map<int, double, std::less<>> M;
3045a83710eSEric Fiselier     typedef std::pair<M::iterator, M::iterator> R;
3055a83710eSEric Fiselier 
3065a83710eSEric Fiselier     V ar[] =
3075a83710eSEric Fiselier     {
3085a83710eSEric Fiselier         V(5, 5),
3095a83710eSEric Fiselier         V(7, 6),
3105a83710eSEric Fiselier         V(9, 7),
3115a83710eSEric Fiselier         V(11, 8),
3125a83710eSEric Fiselier         V(13, 9),
3135a83710eSEric Fiselier         V(15, 10),
3145a83710eSEric Fiselier         V(17, 11),
3155a83710eSEric Fiselier         V(19, 12)
3165a83710eSEric Fiselier     };
3175a83710eSEric Fiselier     M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
3185a83710eSEric Fiselier     R r = m.equal_range(5);
319*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 0));
320*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 1));
3215a83710eSEric Fiselier     r = m.equal_range(7);
322*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 1));
323*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 2));
3245a83710eSEric Fiselier     r = m.equal_range(9);
325*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 2));
326*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 3));
3275a83710eSEric Fiselier     r = m.equal_range(11);
328*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 3));
329*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 4));
3305a83710eSEric Fiselier     r = m.equal_range(13);
331*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 4));
332*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 5));
3335a83710eSEric Fiselier     r = m.equal_range(15);
334*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 5));
335*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 6));
3365a83710eSEric Fiselier     r = m.equal_range(17);
337*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 6));
338*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 7));
3395a83710eSEric Fiselier     r = m.equal_range(19);
340*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 7));
341*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 8));
3425a83710eSEric Fiselier     r = m.equal_range(4);
343*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 0));
344*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 0));
3455a83710eSEric Fiselier     r = m.equal_range(6);
346*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 1));
347*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 1));
3485a83710eSEric Fiselier     r = m.equal_range(8);
349*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 2));
350*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 2));
3515a83710eSEric Fiselier     r = m.equal_range(10);
352*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 3));
353*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 3));
3545a83710eSEric Fiselier     r = m.equal_range(12);
355*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 4));
356*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 4));
3575a83710eSEric Fiselier     r = m.equal_range(14);
358*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 5));
359*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 5));
3605a83710eSEric Fiselier     r = m.equal_range(16);
361*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 6));
362*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 6));
3635a83710eSEric Fiselier     r = m.equal_range(18);
364*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 7));
365*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 7));
3665a83710eSEric Fiselier     r = m.equal_range(20);
367*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 8));
368*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 8));
369f8457a07SMarshall Clow 
370f8457a07SMarshall Clow     r = m.equal_range(C2Int(5));
371*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 0));
372*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 1));
373f8457a07SMarshall Clow     r = m.equal_range(C2Int(7));
374*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 1));
375*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 2));
376f8457a07SMarshall Clow     r = m.equal_range(C2Int(9));
377*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 2));
378*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 3));
379f8457a07SMarshall Clow     r = m.equal_range(C2Int(11));
380*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 3));
381*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 4));
382f8457a07SMarshall Clow     r = m.equal_range(C2Int(13));
383*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 4));
384*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 5));
385f8457a07SMarshall Clow     r = m.equal_range(C2Int(15));
386*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 5));
387*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 6));
388f8457a07SMarshall Clow     r = m.equal_range(C2Int(17));
389*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 6));
390*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 7));
391f8457a07SMarshall Clow     r = m.equal_range(C2Int(19));
392*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 7));
393*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 8));
394f8457a07SMarshall Clow     r = m.equal_range(C2Int(4));
395*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 0));
396*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 0));
397f8457a07SMarshall Clow     r = m.equal_range(C2Int(6));
398*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 1));
399*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 1));
400f8457a07SMarshall Clow     r = m.equal_range(C2Int(8));
401*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 2));
402*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 2));
403f8457a07SMarshall Clow     r = m.equal_range(C2Int(10));
404*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 3));
405*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 3));
406f8457a07SMarshall Clow     r = m.equal_range(C2Int(12));
407*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 4));
408*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 4));
409f8457a07SMarshall Clow     r = m.equal_range(C2Int(14));
410*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 5));
411*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 5));
412f8457a07SMarshall Clow     r = m.equal_range(C2Int(16));
413*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 6));
414*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 6));
415f8457a07SMarshall Clow     r = m.equal_range(C2Int(18));
416*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 7));
417*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 7));
418f8457a07SMarshall Clow     r = m.equal_range(C2Int(20));
419*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 8));
420*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 8));
4215a83710eSEric Fiselier     }
4225a83710eSEric Fiselier     {
4235a83710eSEric Fiselier     typedef PrivateConstructor PC;
4245a83710eSEric Fiselier     typedef std::map<PC, double, std::less<>> M;
4255a83710eSEric Fiselier     typedef std::pair<M::iterator, M::iterator> R;
4265a83710eSEric Fiselier 
4275a83710eSEric Fiselier     M m;
4285a83710eSEric Fiselier     m [ PC::make(5)  ] = 5;
4295a83710eSEric Fiselier     m [ PC::make(7)  ] = 6;
4305a83710eSEric Fiselier     m [ PC::make(9)  ] = 7;
4315a83710eSEric Fiselier     m [ PC::make(11) ] = 8;
4325a83710eSEric Fiselier     m [ PC::make(13) ] = 9;
4335a83710eSEric Fiselier     m [ PC::make(15) ] = 10;
4345a83710eSEric Fiselier     m [ PC::make(17) ] = 11;
4355a83710eSEric Fiselier     m [ PC::make(19) ] = 12;
4365a83710eSEric Fiselier 
4375a83710eSEric Fiselier     R r = m.equal_range(5);
438*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 0));
439*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 1));
4405a83710eSEric Fiselier     r = m.equal_range(7);
441*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 1));
442*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 2));
4435a83710eSEric Fiselier     r = m.equal_range(9);
444*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 2));
445*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 3));
4465a83710eSEric Fiselier     r = m.equal_range(11);
447*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 3));
448*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 4));
4495a83710eSEric Fiselier     r = m.equal_range(13);
450*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 4));
451*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 5));
4525a83710eSEric Fiselier     r = m.equal_range(15);
453*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 5));
454*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 6));
4555a83710eSEric Fiselier     r = m.equal_range(17);
456*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 6));
457*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 7));
4585a83710eSEric Fiselier     r = m.equal_range(19);
459*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 7));
460*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 8));
4615a83710eSEric Fiselier     r = m.equal_range(4);
462*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 0));
463*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 0));
4645a83710eSEric Fiselier     r = m.equal_range(6);
465*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 1));
466*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 1));
4675a83710eSEric Fiselier     r = m.equal_range(8);
468*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 2));
469*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 2));
4705a83710eSEric Fiselier     r = m.equal_range(10);
471*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 3));
472*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 3));
4735a83710eSEric Fiselier     r = m.equal_range(12);
474*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 4));
475*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 4));
4765a83710eSEric Fiselier     r = m.equal_range(14);
477*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 5));
478*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 5));
4795a83710eSEric Fiselier     r = m.equal_range(16);
480*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 6));
481*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 6));
4825a83710eSEric Fiselier     r = m.equal_range(18);
483*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 7));
484*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 7));
4855a83710eSEric Fiselier     r = m.equal_range(20);
486*5ffe11a9SArthur O'Dwyer     assert(r.first == std::next(m.begin(), 8));
487*5ffe11a9SArthur O'Dwyer     assert(r.second == std::next(m.begin(), 8));
4885a83710eSEric Fiselier     }
4895a83710eSEric Fiselier #endif
4902df59c50SJF Bastien 
4912df59c50SJF Bastien   return 0;
4925a83710eSEric Fiselier }
493