Skip to content

Commit 8f4ca1d

Browse files
authored
Merge pull request #4663 from danpoe/fixes/get-delta-view
Fix bug where an item was not added to the delta view of the sharing map
2 parents 5d23f21 + f82e08e commit 8f4ca1d

File tree

2 files changed

+38
-36
lines changed

2 files changed

+38
-36
lines changed

src/util/sharing_map.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -844,6 +844,8 @@ SHARING_MAPT(void)::add_item_if_not_shared(
844844
}
845845
}
846846

847+
delta_view.push_back({k, l1.get_value()});
848+
847849
return;
848850
}
849851

unit/util/sharing_map.cpp

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -49,33 +49,12 @@ void fill2(some_sharing_mapt &sm)
4949
sm.insert("n", "5");
5050
}
5151

52-
// tests
53-
54-
class some_keyt
55-
{
56-
public:
57-
some_keyt() : s(0)
58-
{
59-
}
60-
61-
explicit some_keyt(size_t s) : s(s)
62-
{
63-
}
64-
65-
size_t s;
66-
67-
bool operator==(const some_keyt &other) const
68-
{
69-
return s == other.s;
70-
}
71-
};
72-
73-
class some_key_hasht
52+
class key_hasht
7453
{
7554
public:
76-
size_t operator()(const some_keyt &k) const
55+
std::size_t operator()(const std::size_t &k) const
7756
{
78-
return k.s & 0x3;
57+
return k & 0x3;
7958
}
8059
};
8160

@@ -494,27 +473,48 @@ TEST_CASE("Sharing map copying", "[core][util]")
494473

495474
TEST_CASE("Sharing map collisions", "[core][util]")
496475
{
497-
typedef sharing_mapt<some_keyt, std::string, false, some_key_hasht>
476+
typedef sharing_mapt<std::size_t, std::string, false, key_hasht>
498477
sharing_map_collisionst;
499478

500479
sharing_map_collisionst sm;
501480

502-
sm.insert(some_keyt(0), "a");
503-
sm.insert(some_keyt(8), "b");
504-
sm.insert(some_keyt(16), "c");
481+
SECTION("Basic")
482+
{
483+
sm.insert(0, "a");
484+
sm.insert(8, "b");
485+
sm.insert(16, "c");
505486

506-
sm.insert(some_keyt(1), "d");
507-
sm.insert(some_keyt(2), "e");
487+
sm.insert(1, "d");
488+
sm.insert(2, "e");
508489

509-
sm.erase(some_keyt(8));
490+
sm.erase(8);
510491

511-
REQUIRE(sm.has_key(some_keyt(0)));
512-
REQUIRE(sm.has_key(some_keyt(16)));
492+
REQUIRE(sm.has_key(0));
493+
REQUIRE(sm.has_key(16));
513494

514-
REQUIRE(sm.has_key(some_keyt(1)));
515-
REQUIRE(sm.has_key(some_keyt(2)));
495+
REQUIRE(sm.has_key(1));
496+
REQUIRE(sm.has_key(2));
497+
498+
REQUIRE(!sm.has_key(8));
499+
}
500+
501+
SECTION("Delta view")
502+
{
503+
sm.insert(0, "a");
516504

517-
REQUIRE(!sm.has_key(some_keyt(8)));
505+
sharing_map_collisionst sm2;
506+
507+
sm2.insert(8, "b");
508+
sm2.insert(16, "c");
509+
510+
sharing_map_collisionst::delta_viewt delta_view;
511+
512+
sm.get_delta_view(sm2, delta_view, false);
513+
514+
REQUIRE(delta_view.size() == 1);
515+
REQUIRE(delta_view[0].k == 0);
516+
REQUIRE(!delta_view[0].is_in_both_maps());
517+
}
518518
}
519519

520520
TEST_CASE("Sharing map views and iteration", "[core][util]")

0 commit comments

Comments
 (0)