#include #include #include #include namespace { // Using DummyHash to make it easier for the fuzzer struct dummy_hash { using is_avalanching = void; auto operator()(uint64_t x) const noexcept -> size_t { return static_cast(x); } }; template void insert_erase(fuzz::provider p) { auto ank = Map(); auto ref = std::unordered_map(); auto c = uint64_t(); while (p.has_remaining_bytes()) { auto key = p.integral(); ank[key] = c; ref[key] = c; ++c; key = p.integral(); REQUIRE(ank.erase(key) == ref.erase(key)); REQUIRE(ank.size() == ref.size()); } auto cpy = std::unordered_map(ank.begin(), ank.end()); REQUIRE(cpy == ref); } } // namespace TEST_CASE("fuzz_insert_erase" * doctest::test_suite("fuzz")) { fuzz::run([](fuzz::provider p) { // try all 3 different map styles with the same input insert_erase>(p.copy()); insert_erase>(p.copy()); insert_erase, std::equal_to, std::deque>>>(p.copy()); }); }