diff --git a/src/util/sharing_map.h b/src/util/sharing_map.h index 15cdc1a5673..03e094ea960 100644 --- a/src/util/sharing_map.h +++ b/src/util/sharing_map.h @@ -844,6 +844,8 @@ SHARING_MAPT(void)::add_item_if_not_shared( } } + delta_view.push_back({k, l1.get_value()}); + return; } diff --git a/unit/util/sharing_map.cpp b/unit/util/sharing_map.cpp index 365b4d252fa..1484fec8886 100644 --- a/unit/util/sharing_map.cpp +++ b/unit/util/sharing_map.cpp @@ -49,33 +49,12 @@ void fill2(some_sharing_mapt &sm) sm.insert("n", "5"); } -// tests - -class some_keyt -{ -public: - some_keyt() : s(0) - { - } - - explicit some_keyt(size_t s) : s(s) - { - } - - size_t s; - - bool operator==(const some_keyt &other) const - { - return s == other.s; - } -}; - -class some_key_hasht +class key_hasht { public: - size_t operator()(const some_keyt &k) const + std::size_t operator()(const std::size_t &k) const { - return k.s & 0x3; + return k & 0x3; } }; @@ -494,27 +473,48 @@ TEST_CASE("Sharing map copying", "[core][util]") TEST_CASE("Sharing map collisions", "[core][util]") { - typedef sharing_mapt + typedef sharing_mapt sharing_map_collisionst; sharing_map_collisionst sm; - sm.insert(some_keyt(0), "a"); - sm.insert(some_keyt(8), "b"); - sm.insert(some_keyt(16), "c"); + SECTION("Basic") + { + sm.insert(0, "a"); + sm.insert(8, "b"); + sm.insert(16, "c"); - sm.insert(some_keyt(1), "d"); - sm.insert(some_keyt(2), "e"); + sm.insert(1, "d"); + sm.insert(2, "e"); - sm.erase(some_keyt(8)); + sm.erase(8); - REQUIRE(sm.has_key(some_keyt(0))); - REQUIRE(sm.has_key(some_keyt(16))); + REQUIRE(sm.has_key(0)); + REQUIRE(sm.has_key(16)); - REQUIRE(sm.has_key(some_keyt(1))); - REQUIRE(sm.has_key(some_keyt(2))); + REQUIRE(sm.has_key(1)); + REQUIRE(sm.has_key(2)); + + REQUIRE(!sm.has_key(8)); + } + + SECTION("Delta view") + { + sm.insert(0, "a"); - REQUIRE(!sm.has_key(some_keyt(8))); + sharing_map_collisionst sm2; + + sm2.insert(8, "b"); + sm2.insert(16, "c"); + + sharing_map_collisionst::delta_viewt delta_view; + + sm.get_delta_view(sm2, delta_view, false); + + REQUIRE(delta_view.size() == 1); + REQUIRE(delta_view[0].k == 0); + REQUIRE(!delta_view[0].is_in_both_maps()); + } } TEST_CASE("Sharing map views and iteration", "[core][util]")