#include // for map, operator== #include // for Rng, 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, operator== template void bench(std::string_view name) { auto a = Map(); auto rng = ankerl::nanobench::Rng(123); for (size_t i = 0; i < 1000000; ++i) { a.try_emplace(rng(), rng()); } Map b; ankerl::nanobench::Bench().batch(a.size() * 2).run(fmt::format("copy {}", name), [&] { b = a; a = b; }); REQUIRE(a == b); } #if 0 TEST_CASE("bench_copy_rhn" * doctest::test_suite("bench") * doctest::skip()) { bench>("robin_hood::unordered_node_map"); } TEST_CASE("bench_copy_rhf" * doctest::test_suite("bench") * doctest::skip()) { bench>("robin_hood::unordered_flat_map"); } #endif TEST_CASE_MAP("bench_copy_udm" * doctest::test_suite("bench") * doctest::skip(), uint64_t, uint64_t) { bench("ankerl::unordered_dense::map"); } TEST_CASE("bench_copy_std" * doctest::test_suite("bench") * doctest::skip()) { bench>("std::unordered_map"); }