@@ -296,83 +296,131 @@ TYPED_TEST(SparseSet, ShrinkToFit) {
296
296
ASSERT_EQ (set.capacity (), 0u );
297
297
ASSERT_EQ (set.extent (), 0u );
298
298
299
- set.reserve (8u );
299
+ switch (policy) {
300
+ case entt::deletion_policy::swap_and_pop: {
301
+ set.push (entity_type{traits_type::page_size - 1u });
302
+ set.push (entity_type{traits_type::page_size});
300
303
301
- set.push (entity_type{traits_type::page_size - 1u });
302
- set.push (entity_type{traits_type::page_size});
303
- set.erase (entity_type{traits_type::page_size - 1u });
304
+ set.erase (entity_type{traits_type::page_size - 1u });
304
305
305
- ASSERT_EQ (set.capacity (), 8u );
306
- ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
306
+ ASSERT_GE (set.capacity (), 2u );
307
+ ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
307
308
308
- ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
309
- ASSERT_TRUE (set.contains (entity_type{traits_type::page_size}));
309
+ set.shrink_to_fit ();
310
310
311
- set.shrink_to_fit ();
311
+ ASSERT_EQ (set.capacity (), 1u );
312
+ ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
312
313
313
- switch (policy) {
314
- case entt::deletion_policy::swap_only:
315
- case entt::deletion_policy::in_place: {
316
- ASSERT_EQ (set.capacity (), 2u );
314
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
315
+ ASSERT_TRUE (set.contains (entity_type{traits_type::page_size}));
316
+
317
+ set.push (entity_type{traits_type::page_size - 1u });
318
+ set.erase (entity_type{traits_type::page_size});
319
+
320
+ ASSERT_GE (set.capacity (), 2u );
317
321
ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
318
- } break ;
319
- case entt::deletion_policy::swap_and_pop: {
322
+
323
+ set.shrink_to_fit ();
324
+
320
325
ASSERT_EQ (set.capacity (), 1u );
321
- ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
326
+ ASSERT_EQ (set.extent (), traits_type::page_size);
327
+
328
+ ASSERT_TRUE (set.contains (entity_type{traits_type::page_size - 1u }));
329
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
330
+
331
+ set.erase (entity_type{traits_type::page_size - 1u });
332
+
333
+ set.shrink_to_fit ();
334
+
335
+ ASSERT_EQ (set.capacity (), 0u );
336
+ ASSERT_EQ (set.extent (), 0u );
337
+
338
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
339
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
322
340
} break ;
323
- }
341
+ case entt::deletion_policy::in_place: {
342
+ set.push (entity_type{traits_type::page_size - 1u });
343
+ set.push (entity_type{traits_type::page_size});
324
344
325
- set.reserve ( 8u );
345
+ set.erase (entity_type{traits_type::page_size - 1u } );
326
346
327
- set.push (entity_type{traits_type::page_size - 1u } );
328
- set.erase (entity_type{ traits_type::page_size} );
347
+ ASSERT_GE ( set.capacity (), 2u );
348
+ ASSERT_EQ ( set.extent (), 2 * traits_type::page_size);
329
349
330
- ASSERT_EQ (set.capacity (), 8u );
331
- ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
350
+ set.shrink_to_fit ();
332
351
333
- ASSERT_TRUE (set.contains (entity_type{traits_type::page_size - 1u }) );
334
- ASSERT_FALSE (set.contains (entity_type{ traits_type::page_size}) );
352
+ ASSERT_GE (set.capacity (), 2u );
353
+ ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
335
354
336
- set.shrink_to_fit ();
355
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
356
+ ASSERT_TRUE (set.contains (entity_type{traits_type::page_size}));
337
357
338
- switch (policy) {
339
- case entt::deletion_policy::in_place: {
340
- ASSERT_EQ (set.capacity (), 2u );
341
- ASSERT_EQ (set.extent (), traits_type::page_size);
342
- } break ;
343
- case entt::deletion_policy::swap_only: {
344
- ASSERT_EQ (set.capacity (), 2u );
358
+ set.push (entity_type{traits_type::page_size - 1u });
359
+ set.erase (entity_type{traits_type::page_size});
360
+
361
+ ASSERT_GE (set.capacity (), 2u );
345
362
ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
346
- } break ;
347
- case entt::deletion_policy::swap_and_pop: {
348
- ASSERT_EQ (set.capacity (), 1u );
363
+
364
+ set.shrink_to_fit ();
365
+
366
+ ASSERT_GE (set.capacity (), 2u );
349
367
ASSERT_EQ (set.extent (), traits_type::page_size);
350
- } break ;
351
- }
352
368
353
- ASSERT_TRUE (set.contains (entity_type{traits_type::page_size - 1u }));
354
- ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
369
+ ASSERT_TRUE (set.contains (entity_type{traits_type::page_size - 1u }));
370
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
355
371
356
- set.erase (entity_type{traits_type::page_size - 1u });
357
- set.shrink_to_fit ();
372
+ set.erase (entity_type{traits_type::page_size - 1u });
358
373
359
- switch (policy) {
360
- case entt::deletion_policy::in_place: {
361
- ASSERT_EQ (set.capacity (), 2u );
374
+ set. shrink_to_fit ();
375
+
376
+ ASSERT_GE (set.capacity (), 2u );
362
377
ASSERT_EQ (set.extent (), 0u );
378
+
379
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
380
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
363
381
} break ;
364
382
case entt::deletion_policy::swap_only: {
365
- ASSERT_EQ (set.capacity (), 2u );
383
+ set.push (entity_type{traits_type::page_size - 1u });
384
+ set.push (entity_type{traits_type::page_size});
385
+
386
+ set.erase (entity_type{traits_type::page_size - 1u });
387
+
388
+ ASSERT_GE (set.capacity (), 2u );
366
389
ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
367
- } break ;
368
- case entt::deletion_policy::swap_and_pop: {
369
- ASSERT_EQ (set.capacity (), 0u );
370
- ASSERT_EQ (set.extent (), 0u );
390
+
391
+ set.shrink_to_fit ();
392
+
393
+ ASSERT_GE (set.capacity (), 2u );
394
+ ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
395
+
396
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
397
+ ASSERT_TRUE (set.contains (entity_type{traits_type::page_size}));
398
+
399
+ set.push (entity_type{traits_type::page_size - 1u });
400
+ set.erase (entity_type{traits_type::page_size});
401
+
402
+ ASSERT_GE (set.capacity (), 2u );
403
+ ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
404
+
405
+ set.shrink_to_fit ();
406
+
407
+ ASSERT_GE (set.capacity (), 2u );
408
+ ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
409
+
410
+ ASSERT_TRUE (set.contains (entity_type{traits_type::page_size - 1u }));
411
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
412
+
413
+ set.erase (entity_type{traits_type::page_size - 1u });
414
+
415
+ set.shrink_to_fit ();
416
+
417
+ ASSERT_GE (set.capacity (), 2u );
418
+ ASSERT_EQ (set.extent (), 2 * traits_type::page_size);
419
+
420
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
421
+ ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
371
422
} break ;
372
423
}
373
-
374
- ASSERT_FALSE (set.contains (entity_type{traits_type::page_size - 1u }));
375
- ASSERT_FALSE (set.contains (entity_type{traits_type::page_size}));
376
424
}
377
425
}
378
426
0 commit comments