Files
ankerl_unordered_dense/test/bench/swap.cpp
Martin Leitner-Ankerl 39f9a06655 Fix compile issues with recent compilers
* Update wrap files
* Ignore clang's warning in doctest:

<ciso646> is not a standard header since C++20, use <version> to detect implementation-specific macros" [-Werror,-W#warnings]

Make sure app/doctest.h is used everywhere instead of directly including the header, so the warning is disabled everywhere
2025-10-05 15:50:02 +02:00

54 lines
1.6 KiB
C++

#include <ankerl/unordered_dense.h> // for map
#include <app/doctest.h> // for TestCase, skip, TEST_CASE, test_...
#include <third-party/nanobench.h> // for Rng, doNotOptimizeAway, Bench
#include <fmt/core.h> // for format
#include <cstddef> // for size_t
#include <cstdint> // for uint64_t
#include <string_view> // for string_view
#include <unordered_map> // for unordered_map, swap
#include <utility> // for swap
namespace {
template <typename Map>
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<uint64_t, uint64_t>>("robin_hood::unordered_node_map");
}
TEST_CASE("bench_swap_rhf" * doctest::test_suite("bench") * doctest::skip()) {
bench<robin_hood::unordered_flat_map<uint64_t, uint64_t>>("robin_hood::unordered_flat_map");
}
#endif
TEST_CASE("bench_swap_std" * doctest::test_suite("bench") * doctest::skip()) {
bench<std::unordered_map<uint64_t, uint64_t>>("std::unordered_map");
}
TEST_CASE("bench_swap_udm" * doctest::test_suite("bench") * doctest::skip()) {
bench<ankerl::unordered_dense::map<uint64_t, uint64_t>>("ankerl::unordered_dense::map");
}