|
23 | 23 | #include <deque>
|
24 | 24 | #include <flat_map>
|
25 | 25 | #include <functional>
|
26 |
| -#include <memory_resource> |
27 | 26 | #include <vector>
|
28 | 27 |
|
29 | 28 | #include "min_allocator.h"
|
@@ -180,127 +179,6 @@ int main(int, char**) {
|
180 | 179 | assert(m2.keys().get_allocator() == A(5));
|
181 | 180 | assert(m2.values().get_allocator() == A(5));
|
182 | 181 | }
|
183 |
| - { |
184 |
| - // pmr |
185 |
| - using M = std::flat_map<int, int, std::less<int>, std::pmr::vector<int>, std::pmr::vector<int>>; |
186 |
| - std::pmr::monotonic_buffer_resource mr; |
187 |
| - std::pmr::vector<M> vm(&mr); |
188 |
| - std::pmr::vector<int> ks = {1, 1, 1, 2, 2, 3, 2, 3, 3}; |
189 |
| - std::pmr::vector<int> vs = {1, 1, 1, 2, 2, 3, 2, 3, 3}; |
190 |
| - assert(ks.get_allocator().resource() != &mr); |
191 |
| - assert(vs.get_allocator().resource() != &mr); |
192 |
| - vm.emplace_back(ks, vs); |
193 |
| - assert(ks.size() == 9); // ks' value is unchanged, since it was an lvalue above |
194 |
| - assert(vs.size() == 9); // vs' value is unchanged, since it was an lvalue above |
195 |
| - assert((vm[0] == M{{1, 1}, {2, 2}, {3, 3}})); |
196 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
197 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
198 |
| - } |
199 |
| - { |
200 |
| - // pmr move |
201 |
| - using M = std::flat_map<int, int, std::less<int>, std::pmr::vector<int>, std::pmr::vector<int>>; |
202 |
| - std::pmr::monotonic_buffer_resource mr; |
203 |
| - std::pmr::vector<M> vm(&mr); |
204 |
| - std::pmr::vector<int> ks = {1, 1, 1, 2, 2, 3, 2, 3, 3}; |
205 |
| - std::pmr::vector<int> vs = {1, 1, 1, 2, 2, 3, 2, 3, 3}; |
206 |
| - assert(ks.get_allocator().resource() != &mr); |
207 |
| - assert(vs.get_allocator().resource() != &mr); |
208 |
| - vm.emplace_back(std::move(ks), std::move(vs)); |
209 |
| - LIBCPP_ASSERT(ks.size() == 9); // ks' size is unchanged, since it uses a different allocator |
210 |
| - LIBCPP_ASSERT(vs.size() == 9); // vs' size is unchanged, since it uses a different allocator |
211 |
| - assert((vm[0] == M{{1, 1}, {2, 2}, {3, 3}})); |
212 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
213 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
214 |
| - } |
215 | 182 |
|
216 |
| -#if 0 |
217 |
| - // Test all combinations of lvalue and rvalue containers (LWG 3802). |
218 |
| - { |
219 |
| - int input[] = {1,1,1,2,2,3,2,3,3}; |
220 |
| - const P expected[] = {{1,1}, {2,2}, {3,3}}; |
221 |
| - { |
222 |
| - using M = std::flat_map<int, MoveOnly, std::less<>, std::pmr::vector<int>, std::pmr::vector<MoveOnly>>; |
223 |
| - std::pmr::monotonic_buffer_resource mr; |
224 |
| - std::pmr::vector<M> vm(&mr); |
225 |
| - std::pmr::vector<int> ks(input, input + 9); |
226 |
| - std::pmr::vector<MoveOnly> vs(input, input + 9); |
227 |
| - vm.emplace_back(ks, std::move(vs)); // ill-formed before LWG 3802 |
228 |
| - assert(ks.size() == 9); // ks' value is unchanged, since it was an lvalue above |
229 |
| - LIBCPP_ASSERT(vs.size() == 9); // vs' size is unchanged, since it uses a different allocator |
230 |
| - assert(std::ranges::equal(vm[0], expected, std::equal_to<>())); |
231 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
232 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
233 |
| - } |
234 |
| - { |
235 |
| - using M = std::flat_map<MoveOnly, int, std::less<>, std::pmr::vector<MoveOnly>, std::pmr::vector<int>>; |
236 |
| - std::pmr::monotonic_buffer_resource mr; |
237 |
| - std::pmr::vector<M> vm(&mr); |
238 |
| - std::pmr::vector<MoveOnly> ks(input, input + 9); |
239 |
| - std::pmr::vector<int> vs(input, input + 9); |
240 |
| - vm.emplace_back(std::move(ks), vs); // ill-formed before LWG 3802 |
241 |
| - LIBCPP_ASSERT(ks.size() == 9); // ks' size is unchanged, since it uses a different allocator |
242 |
| - assert(vs.size() == 9); // vs' value is unchanged, since it was an lvalue above |
243 |
| - assert(std::ranges::equal(vm[0], expected, std::equal_to<>())); |
244 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
245 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
246 |
| - } |
247 |
| - { |
248 |
| - using M = std::flat_map<MoveOnly, MoveOnly, std::less<>, std::pmr::vector<MoveOnly>, std::pmr::vector<MoveOnly>>; |
249 |
| - std::pmr::monotonic_buffer_resource mr; |
250 |
| - std::pmr::vector<M> vm(&mr); |
251 |
| - std::pmr::vector<MoveOnly> ks(input, input + 9); |
252 |
| - std::pmr::vector<MoveOnly> vs(input, input + 9); |
253 |
| - vm.emplace_back(std::move(ks), std::move(vs)); // ill-formed before LWG 3802 |
254 |
| - LIBCPP_ASSERT(ks.size() == 9); // ks' size is unchanged, since it uses a different allocator |
255 |
| - LIBCPP_ASSERT(vs.size() == 9); // vs' size is unchanged, since it uses a different allocator |
256 |
| - assert(std::ranges::equal(vm[0], expected, std::equal_to<>())); |
257 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
258 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
259 |
| - } |
260 |
| - } |
261 |
| - { |
262 |
| - int input[] = {1,2,3}; |
263 |
| - const P expected[] = {{1,1}, {2,2}, {3,3}}; |
264 |
| - { |
265 |
| - using M = std::flat_map<int, MoveOnly, std::less<>, std::pmr::vector<int>, std::pmr::vector<MoveOnly>>; |
266 |
| - std::pmr::monotonic_buffer_resource mr; |
267 |
| - std::pmr::vector<M> vm(&mr); |
268 |
| - std::pmr::vector<int> ks(input, input + 3); |
269 |
| - std::pmr::vector<MoveOnly> vs(input, input + 3); |
270 |
| - vm.emplace_back(std::sorted_unique, ks, std::move(vs)); // ill-formed before LWG 3802 |
271 |
| - assert(ks.size() == 3); // ks' value is unchanged, since it was an lvalue above |
272 |
| - LIBCPP_ASSERT(vs.size() == 3); // vs' size is unchanged, since it uses a different allocator |
273 |
| - assert(std::ranges::equal(vm[0], expected, std::equal_to<>())); |
274 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
275 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
276 |
| - } |
277 |
| - { |
278 |
| - using M = std::flat_map<MoveOnly, int, std::less<>, std::pmr::vector<MoveOnly>, std::pmr::vector<int>>; |
279 |
| - std::pmr::monotonic_buffer_resource mr; |
280 |
| - std::pmr::vector<M> vm(&mr); |
281 |
| - std::pmr::vector<MoveOnly> ks(input, input + 3); |
282 |
| - std::pmr::vector<int> vs(input, input + 3); |
283 |
| - vm.emplace_back(std::sorted_unique, std::move(ks), vs); // ill-formed before LWG 3802 |
284 |
| - LIBCPP_ASSERT(ks.size() == 3); // ks' size is unchanged, since it uses a different allocator |
285 |
| - assert(vs.size() == 3); // vs' value is unchanged, since it was an lvalue above |
286 |
| - assert(std::ranges::equal(vm[0], expected, std::equal_to<>())); |
287 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
288 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
289 |
| - } |
290 |
| - { |
291 |
| - using M = std::flat_map<MoveOnly, MoveOnly, std::less<>, std::pmr::vector<MoveOnly>, std::pmr::vector<MoveOnly>>; |
292 |
| - std::pmr::monotonic_buffer_resource mr; |
293 |
| - std::pmr::vector<M> vm(&mr); |
294 |
| - std::pmr::vector<MoveOnly> ks(input, input + 3); |
295 |
| - std::pmr::vector<MoveOnly> vs(input, input + 3); |
296 |
| - vm.emplace_back(std::sorted_unique, std::move(ks), std::move(vs)); // ill-formed before LWG 3802 |
297 |
| - LIBCPP_ASSERT(ks.size() == 3); // ks' size is unchanged, since it uses a different allocator |
298 |
| - LIBCPP_ASSERT(vs.size() == 3); // vs' size is unchanged, since it uses a different allocator |
299 |
| - assert(std::ranges::equal(vm[0], expected, std::equal_to<>())); |
300 |
| - assert(vm[0].keys().get_allocator().resource() == &mr); |
301 |
| - assert(vm[0].values().get_allocator().resource() == &mr); |
302 |
| - } |
303 |
| - } |
304 |
| -#endif |
305 | 183 | return 0;
|
306 | 184 | }
|
0 commit comments