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