1 //===----------------------------------------------------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 // <set>
11
12 // class set
13
14 // pair<iterator,iterator> equal_range(const key_type& k);
15 // pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
16
17 #include <set>
18 #include <cassert>
19
20 #include "../../min_allocator.h"
21
main()22 int main()
23 {
24 {
25 typedef int V;
26 typedef std::set<int> M;
27 {
28 typedef std::pair<M::iterator, M::iterator> R;
29 V ar[] =
30 {
31 5,
32 7,
33 9,
34 11,
35 13,
36 15,
37 17,
38 19
39 };
40 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
41 R r = m.equal_range(5);
42 assert(r.first == next(m.begin(), 0));
43 assert(r.second == next(m.begin(), 1));
44 r = m.equal_range(7);
45 assert(r.first == next(m.begin(), 1));
46 assert(r.second == next(m.begin(), 2));
47 r = m.equal_range(9);
48 assert(r.first == next(m.begin(), 2));
49 assert(r.second == next(m.begin(), 3));
50 r = m.equal_range(11);
51 assert(r.first == next(m.begin(), 3));
52 assert(r.second == next(m.begin(), 4));
53 r = m.equal_range(13);
54 assert(r.first == next(m.begin(), 4));
55 assert(r.second == next(m.begin(), 5));
56 r = m.equal_range(15);
57 assert(r.first == next(m.begin(), 5));
58 assert(r.second == next(m.begin(), 6));
59 r = m.equal_range(17);
60 assert(r.first == next(m.begin(), 6));
61 assert(r.second == next(m.begin(), 7));
62 r = m.equal_range(19);
63 assert(r.first == next(m.begin(), 7));
64 assert(r.second == next(m.begin(), 8));
65 r = m.equal_range(4);
66 assert(r.first == next(m.begin(), 0));
67 assert(r.second == next(m.begin(), 0));
68 r = m.equal_range(6);
69 assert(r.first == next(m.begin(), 1));
70 assert(r.second == next(m.begin(), 1));
71 r = m.equal_range(8);
72 assert(r.first == next(m.begin(), 2));
73 assert(r.second == next(m.begin(), 2));
74 r = m.equal_range(10);
75 assert(r.first == next(m.begin(), 3));
76 assert(r.second == next(m.begin(), 3));
77 r = m.equal_range(12);
78 assert(r.first == next(m.begin(), 4));
79 assert(r.second == next(m.begin(), 4));
80 r = m.equal_range(14);
81 assert(r.first == next(m.begin(), 5));
82 assert(r.second == next(m.begin(), 5));
83 r = m.equal_range(16);
84 assert(r.first == next(m.begin(), 6));
85 assert(r.second == next(m.begin(), 6));
86 r = m.equal_range(18);
87 assert(r.first == next(m.begin(), 7));
88 assert(r.second == next(m.begin(), 7));
89 r = m.equal_range(20);
90 assert(r.first == next(m.begin(), 8));
91 assert(r.second == next(m.begin(), 8));
92 }
93 {
94 typedef std::pair<M::const_iterator, M::const_iterator> R;
95 V ar[] =
96 {
97 5,
98 7,
99 9,
100 11,
101 13,
102 15,
103 17,
104 19
105 };
106 const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
107 R r = m.equal_range(5);
108 assert(r.first == next(m.begin(), 0));
109 assert(r.second == next(m.begin(), 1));
110 r = m.equal_range(7);
111 assert(r.first == next(m.begin(), 1));
112 assert(r.second == next(m.begin(), 2));
113 r = m.equal_range(9);
114 assert(r.first == next(m.begin(), 2));
115 assert(r.second == next(m.begin(), 3));
116 r = m.equal_range(11);
117 assert(r.first == next(m.begin(), 3));
118 assert(r.second == next(m.begin(), 4));
119 r = m.equal_range(13);
120 assert(r.first == next(m.begin(), 4));
121 assert(r.second == next(m.begin(), 5));
122 r = m.equal_range(15);
123 assert(r.first == next(m.begin(), 5));
124 assert(r.second == next(m.begin(), 6));
125 r = m.equal_range(17);
126 assert(r.first == next(m.begin(), 6));
127 assert(r.second == next(m.begin(), 7));
128 r = m.equal_range(19);
129 assert(r.first == next(m.begin(), 7));
130 assert(r.second == next(m.begin(), 8));
131 r = m.equal_range(4);
132 assert(r.first == next(m.begin(), 0));
133 assert(r.second == next(m.begin(), 0));
134 r = m.equal_range(6);
135 assert(r.first == next(m.begin(), 1));
136 assert(r.second == next(m.begin(), 1));
137 r = m.equal_range(8);
138 assert(r.first == next(m.begin(), 2));
139 assert(r.second == next(m.begin(), 2));
140 r = m.equal_range(10);
141 assert(r.first == next(m.begin(), 3));
142 assert(r.second == next(m.begin(), 3));
143 r = m.equal_range(12);
144 assert(r.first == next(m.begin(), 4));
145 assert(r.second == next(m.begin(), 4));
146 r = m.equal_range(14);
147 assert(r.first == next(m.begin(), 5));
148 assert(r.second == next(m.begin(), 5));
149 r = m.equal_range(16);
150 assert(r.first == next(m.begin(), 6));
151 assert(r.second == next(m.begin(), 6));
152 r = m.equal_range(18);
153 assert(r.first == next(m.begin(), 7));
154 assert(r.second == next(m.begin(), 7));
155 r = m.equal_range(20);
156 assert(r.first == next(m.begin(), 8));
157 assert(r.second == next(m.begin(), 8));
158 }
159 }
160 #if __cplusplus >= 201103L
161 {
162 typedef int V;
163 typedef std::set<int, std::less<int>, min_allocator<int>> M;
164 typedef std::pair<M::iterator, M::iterator> R;
165 V ar[] =
166 {
167 5,
168 7,
169 9,
170 11,
171 13,
172 15,
173 17,
174 19
175 };
176 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
177 R r = m.equal_range(5);
178 assert(r.first == next(m.begin(), 0));
179 assert(r.second == next(m.begin(), 1));
180 r = m.equal_range(7);
181 assert(r.first == next(m.begin(), 1));
182 assert(r.second == next(m.begin(), 2));
183 r = m.equal_range(9);
184 assert(r.first == next(m.begin(), 2));
185 assert(r.second == next(m.begin(), 3));
186 r = m.equal_range(11);
187 assert(r.first == next(m.begin(), 3));
188 assert(r.second == next(m.begin(), 4));
189 r = m.equal_range(13);
190 assert(r.first == next(m.begin(), 4));
191 assert(r.second == next(m.begin(), 5));
192 r = m.equal_range(15);
193 assert(r.first == next(m.begin(), 5));
194 assert(r.second == next(m.begin(), 6));
195 r = m.equal_range(17);
196 assert(r.first == next(m.begin(), 6));
197 assert(r.second == next(m.begin(), 7));
198 r = m.equal_range(19);
199 assert(r.first == next(m.begin(), 7));
200 assert(r.second == next(m.begin(), 8));
201 r = m.equal_range(4);
202 assert(r.first == next(m.begin(), 0));
203 assert(r.second == next(m.begin(), 0));
204 r = m.equal_range(6);
205 assert(r.first == next(m.begin(), 1));
206 assert(r.second == next(m.begin(), 1));
207 r = m.equal_range(8);
208 assert(r.first == next(m.begin(), 2));
209 assert(r.second == next(m.begin(), 2));
210 r = m.equal_range(10);
211 assert(r.first == next(m.begin(), 3));
212 assert(r.second == next(m.begin(), 3));
213 r = m.equal_range(12);
214 assert(r.first == next(m.begin(), 4));
215 assert(r.second == next(m.begin(), 4));
216 r = m.equal_range(14);
217 assert(r.first == next(m.begin(), 5));
218 assert(r.second == next(m.begin(), 5));
219 r = m.equal_range(16);
220 assert(r.first == next(m.begin(), 6));
221 assert(r.second == next(m.begin(), 6));
222 r = m.equal_range(18);
223 assert(r.first == next(m.begin(), 7));
224 assert(r.second == next(m.begin(), 7));
225 r = m.equal_range(20);
226 assert(r.first == next(m.begin(), 8));
227 assert(r.second == next(m.begin(), 8));
228 }
229 #endif
230 }
231