1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
14 // pair<iterator,iterator> equal_range(const key_type& k);
15 // pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
20 #include "test_macros.h"
21 #include "min_allocator.h"
22 #include "private_constructor.hpp"
28 typedef std::multiset<int> M;
30 typedef std::pair<M::iterator, M::iterator> R;
43 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
44 R r = m.equal_range(4);
45 assert(r.first == next(m.begin(), 0));
46 assert(r.second == next(m.begin(), 0));
48 assert(r.first == next(m.begin(), 0));
49 assert(r.second == next(m.begin(), 3));
51 assert(r.first == next(m.begin(), 3));
52 assert(r.second == next(m.begin(), 3));
54 assert(r.first == next(m.begin(), 3));
55 assert(r.second == next(m.begin(), 6));
57 assert(r.first == next(m.begin(), 6));
58 assert(r.second == next(m.begin(), 6));
60 assert(r.first == next(m.begin(), 6));
61 assert(r.second == next(m.begin(), 9));
62 r = m.equal_range(10);
63 assert(r.first == next(m.begin(), 9));
64 assert(r.second == next(m.begin(), 9));
67 typedef std::pair<M::const_iterator, M::const_iterator> R;
80 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
81 R r = m.equal_range(4);
82 assert(r.first == next(m.begin(), 0));
83 assert(r.second == next(m.begin(), 0));
85 assert(r.first == next(m.begin(), 0));
86 assert(r.second == next(m.begin(), 3));
88 assert(r.first == next(m.begin(), 3));
89 assert(r.second == next(m.begin(), 3));
91 assert(r.first == next(m.begin(), 3));
92 assert(r.second == next(m.begin(), 6));
94 assert(r.first == next(m.begin(), 6));
95 assert(r.second == next(m.begin(), 6));
97 assert(r.first == next(m.begin(), 6));
98 assert(r.second == next(m.begin(), 9));
99 r = m.equal_range(10);
100 assert(r.first == next(m.begin(), 9));
101 assert(r.second == next(m.begin(), 9));
104 #if TEST_STD_VER >= 11
107 typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
109 typedef std::pair<M::iterator, M::iterator> R;
122 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
123 R r = m.equal_range(4);
124 assert(r.first == next(m.begin(), 0));
125 assert(r.second == next(m.begin(), 0));
126 r = m.equal_range(5);
127 assert(r.first == next(m.begin(), 0));
128 assert(r.second == next(m.begin(), 3));
129 r = m.equal_range(6);
130 assert(r.first == next(m.begin(), 3));
131 assert(r.second == next(m.begin(), 3));
132 r = m.equal_range(7);
133 assert(r.first == next(m.begin(), 3));
134 assert(r.second == next(m.begin(), 6));
135 r = m.equal_range(8);
136 assert(r.first == next(m.begin(), 6));
137 assert(r.second == next(m.begin(), 6));
138 r = m.equal_range(9);
139 assert(r.first == next(m.begin(), 6));
140 assert(r.second == next(m.begin(), 9));
141 r = m.equal_range(10);
142 assert(r.first == next(m.begin(), 9));
143 assert(r.second == next(m.begin(), 9));
146 typedef std::pair<M::const_iterator, M::const_iterator> R;
159 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
160 R r = m.equal_range(4);
161 assert(r.first == next(m.begin(), 0));
162 assert(r.second == next(m.begin(), 0));
163 r = m.equal_range(5);
164 assert(r.first == next(m.begin(), 0));
165 assert(r.second == next(m.begin(), 3));
166 r = m.equal_range(6);
167 assert(r.first == next(m.begin(), 3));
168 assert(r.second == next(m.begin(), 3));
169 r = m.equal_range(7);
170 assert(r.first == next(m.begin(), 3));
171 assert(r.second == next(m.begin(), 6));
172 r = m.equal_range(8);
173 assert(r.first == next(m.begin(), 6));
174 assert(r.second == next(m.begin(), 6));
175 r = m.equal_range(9);
176 assert(r.first == next(m.begin(), 6));
177 assert(r.second == next(m.begin(), 9));
178 r = m.equal_range(10);
179 assert(r.first == next(m.begin(), 9));
180 assert(r.second == next(m.begin(), 9));
184 #if TEST_STD_VER > 11
187 typedef std::multiset<V, std::less<>> M;
188 typedef std::pair<M::iterator, M::iterator> R;
201 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
202 R r = m.equal_range(4);
203 assert(r.first == next(m.begin(), 0));
204 assert(r.second == next(m.begin(), 0));
205 r = m.equal_range(5);
206 assert(r.first == next(m.begin(), 0));
207 assert(r.second == next(m.begin(), 3));
208 r = m.equal_range(6);
209 assert(r.first == next(m.begin(), 3));
210 assert(r.second == next(m.begin(), 3));
211 r = m.equal_range(7);
212 assert(r.first == next(m.begin(), 3));
213 assert(r.second == next(m.begin(), 6));
214 r = m.equal_range(8);
215 assert(r.first == next(m.begin(), 6));
216 assert(r.second == next(m.begin(), 6));
217 r = m.equal_range(9);
218 assert(r.first == next(m.begin(), 6));
219 assert(r.second == next(m.begin(), 9));
220 r = m.equal_range(10);
221 assert(r.first == next(m.begin(), 9));
222 assert(r.second == next(m.begin(), 9));
226 typedef PrivateConstructor V;
227 typedef std::multiset<V, std::less<>> M;
228 typedef std::pair<M::iterator, M::iterator> R;
231 m.insert ( V::make ( 5 ));
232 m.insert ( V::make ( 5 ));
233 m.insert ( V::make ( 5 ));
234 m.insert ( V::make ( 7 ));
235 m.insert ( V::make ( 7 ));
236 m.insert ( V::make ( 7 ));
237 m.insert ( V::make ( 9 ));
238 m.insert ( V::make ( 9 ));
239 m.insert ( V::make ( 9 ));
241 R r = m.equal_range(4);
242 assert(r.first == next(m.begin(), 0));
243 assert(r.second == next(m.begin(), 0));
244 r = m.equal_range(5);
245 assert(r.first == next(m.begin(), 0));
246 assert(r.second == next(m.begin(), 3));
247 r = m.equal_range(6);
248 assert(r.first == next(m.begin(), 3));
249 assert(r.second == next(m.begin(), 3));
250 r = m.equal_range(7);
251 assert(r.first == next(m.begin(), 3));
252 assert(r.second == next(m.begin(), 6));
253 r = m.equal_range(8);
254 assert(r.first == next(m.begin(), 6));
255 assert(r.second == next(m.begin(), 6));
256 r = m.equal_range(9);
257 assert(r.first == next(m.begin(), 6));
258 assert(r.second == next(m.begin(), 9));
259 r = m.equal_range(10);
260 assert(r.first == next(m.begin(), 9));
261 assert(r.second == next(m.begin(), 9));