1 #include <robin_hood.h>
2 
3 #include <app/CtorDtorVerifier.h>
4 #include <app/checksum.h>
5 #include <app/doctest.h>
6 #include <app/sfc64.h>
7 
8 // verified with
9 // #include <unordered_map>
10 // std::unordered_map<CtorDtorVerifier, CtorDtorVerifier, robin_hood::hash<CtorDtorVerifier>>
11 
12 TYPE_TO_STRING(robin_hood::unordered_flat_map<CtorDtorVerifier, CtorDtorVerifier>);
13 TYPE_TO_STRING(robin_hood::unordered_node_map<CtorDtorVerifier, CtorDtorVerifier>);
14 
15 TEST_CASE_TEMPLATE("random_insert_erase_with_Verifier", Map,
16                    robin_hood::unordered_node_map<CtorDtorVerifier, CtorDtorVerifier>,
17                    robin_hood::unordered_flat_map<CtorDtorVerifier, CtorDtorVerifier>) {
18     sfc64 rng(1780);
19 
20     REQUIRE(CtorDtorVerifier::mapSize() == static_cast<size_t>(0));
21     Map map;
22     for (size_t i = 1; i < 10000; ++i) {
23         auto v = rng(i);
24         auto k = rng(i);
25         map[k] = v;
26         map.erase(rng(i));
27     }
28 
29     REQUIRE(CtorDtorVerifier::mapSize() == 6606);
30     REQUIRE(checksum::map(map) == UINT64_C(0x22E9B522B3B36762));
31     map.clear();
32 
33     REQUIRE(CtorDtorVerifier::mapSize() == 0);
34     REQUIRE(checksum::map(map) == UINT64_C(0x9E3779F8));
35 }
36