|
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