• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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