#include // for map #include // for Rng, doNotOptimizeAway, Bench #include // for TestCase, skip, TEST_CASE, test_... #include // for format #include // for size_t #include // for uint64_t #include // for string_view #include // for unordered_map, swap #include // for swap namespace { template void bench(std::string_view name) { Map a; Map b; ankerl::nanobench::Rng rng(123); ankerl::nanobench::Bench bench; for (size_t j = 0; j < 10000; ++j) { a[rng()]; b[rng()]; } bench.run(fmt::format("swap {}", name), [&] { std::swap(a, b); }); ankerl::nanobench::doNotOptimizeAway(&a); ankerl::nanobench::doNotOptimizeAway(&b); } } // namespace #if 0 TEST_CASE("bench_swap_rhn" * doctest::test_suite("bench") * doctest::skip()) { bench>("robin_hood::unordered_node_map"); } TEST_CASE("bench_swap_rhf" * doctest::test_suite("bench") * doctest::skip()) { bench>("robin_hood::unordered_flat_map"); } #endif TEST_CASE("bench_swap_std" * doctest::test_suite("bench") * doctest::skip()) { bench>("std::unordered_map"); } TEST_CASE("bench_swap_udm" * doctest::test_suite("bench") * doctest::skip()) { bench>("ankerl::unordered_dense::map"); }