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 // iterator lower_bound(const key_type& k);
15 // const_iterator lower_bound(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 M::iterator R;
43 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
44 R r = m.lower_bound(4);
45 assert(r == next(m.begin(), 0));
47 assert(r == next(m.begin(), 0));
49 assert(r == next(m.begin(), 3));
51 assert(r == next(m.begin(), 3));
53 assert(r == next(m.begin(), 6));
55 assert(r == next(m.begin(), 6));
56 r = m.lower_bound(11);
57 assert(r == next(m.begin(), 9));
60 typedef M::const_iterator R;
73 const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
74 R r = m.lower_bound(4);
75 assert(r == next(m.begin(), 0));
77 assert(r == next(m.begin(), 0));
79 assert(r == next(m.begin(), 3));
81 assert(r == next(m.begin(), 3));
83 assert(r == next(m.begin(), 6));
85 assert(r == next(m.begin(), 6));
86 r = m.lower_bound(11);
87 assert(r == next(m.begin(), 9));
90 #if TEST_STD_VER >= 11
93 typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
95 typedef M::iterator R;
108 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
109 R r = m.lower_bound(4);
110 assert(r == next(m.begin(), 0));
111 r = m.lower_bound(5);
112 assert(r == next(m.begin(), 0));
113 r = m.lower_bound(6);
114 assert(r == next(m.begin(), 3));
115 r = m.lower_bound(7);
116 assert(r == next(m.begin(), 3));
117 r = m.lower_bound(8);
118 assert(r == next(m.begin(), 6));
119 r = m.lower_bound(9);
120 assert(r == next(m.begin(), 6));
121 r = m.lower_bound(11);
122 assert(r == next(m.begin(), 9));
125 typedef M::const_iterator R;
138 const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
139 R r = m.lower_bound(4);
140 assert(r == next(m.begin(), 0));
141 r = m.lower_bound(5);
142 assert(r == next(m.begin(), 0));
143 r = m.lower_bound(6);
144 assert(r == next(m.begin(), 3));
145 r = m.lower_bound(7);
146 assert(r == next(m.begin(), 3));
147 r = m.lower_bound(8);
148 assert(r == next(m.begin(), 6));
149 r = m.lower_bound(9);
150 assert(r == next(m.begin(), 6));
151 r = m.lower_bound(11);
152 assert(r == next(m.begin(), 9));
156 #if TEST_STD_VER > 11
159 typedef std::multiset<V, std::less<>> M;
161 typedef M::iterator R;
174 M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
176 R r = m.lower_bound(4);
177 assert(r == next(m.begin(), 0));
178 r = m.lower_bound(5);
179 assert(r == next(m.begin(), 0));
180 r = m.lower_bound(6);
181 assert(r == next(m.begin(), 3));
182 r = m.lower_bound(7);
183 assert(r == next(m.begin(), 3));
184 r = m.lower_bound(8);
185 assert(r == next(m.begin(), 6));
186 r = m.lower_bound(9);
187 assert(r == next(m.begin(), 6));
188 r = m.lower_bound(11);
189 assert(r == next(m.begin(), 9));
193 typedef PrivateConstructor V;
194 typedef std::multiset<V, std::less<>> M;
195 typedef M::iterator R;
198 m.insert ( V::make ( 5 ));
199 m.insert ( V::make ( 5 ));
200 m.insert ( V::make ( 5 ));
201 m.insert ( V::make ( 7 ));
202 m.insert ( V::make ( 7 ));
203 m.insert ( V::make ( 7 ));
204 m.insert ( V::make ( 9 ));
205 m.insert ( V::make ( 9 ));
206 m.insert ( V::make ( 9 ));
208 R r = m.lower_bound(4);
209 assert(r == next(m.begin(), 0));
210 r = m.lower_bound(5);
211 assert(r == next(m.begin(), 0));
212 r = m.lower_bound(6);
213 assert(r == next(m.begin(), 3));
214 r = m.lower_bound(7);
215 assert(r == next(m.begin(), 3));
216 r = m.lower_bound(8);
217 assert(r == next(m.begin(), 6));
218 r = m.lower_bound(9);
219 assert(r == next(m.begin(), 6));
220 r = m.lower_bound(11);
221 assert(r == next(m.begin(), 9));