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