Add size() and empty() to WaitFreeHashMap.
This commit is contained in:
parent
061c4f65d5
commit
ac8af37872
@ -61,6 +61,31 @@ class WaitFreeHashMap {
|
|||||||
size_t erase(const KeyT &key) {
|
size_t erase(const KeyT &key) {
|
||||||
return get_storage(key).erase(key);
|
return get_storage(key).erase(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t size() const {
|
||||||
|
if (wait_free_storage_ == nullptr) {
|
||||||
|
return default_map_.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t result = 0;
|
||||||
|
for (size_t i = 0; i < MAX_STORAGE_COUNT; i++) {
|
||||||
|
result += wait_free_storage_->maps_[i].size();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool empty() const {
|
||||||
|
if (wait_free_storage_ == nullptr) {
|
||||||
|
return default_map_.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < MAX_STORAGE_COUNT; i++) {
|
||||||
|
if (!wait_free_storage_->maps_[i].empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -30,6 +30,8 @@ TEST(WaitFreeHashMap, stress_test) {
|
|||||||
reference[key] = value;
|
reference[key] = value;
|
||||||
map.set(key, value);
|
map.set(key, value);
|
||||||
ASSERT_EQ(reference[key], map.get(key));
|
ASSERT_EQ(reference[key], map.get(key));
|
||||||
|
ASSERT_EQ(reference.size(), map.size());
|
||||||
|
ASSERT_EQ(reference.empty(), map.empty());
|
||||||
});
|
});
|
||||||
|
|
||||||
add_step(2000, [&] {
|
add_step(2000, [&] {
|
||||||
@ -37,6 +39,8 @@ TEST(WaitFreeHashMap, stress_test) {
|
|||||||
auto ref_it = reference.find(key);
|
auto ref_it = reference.find(key);
|
||||||
auto ref_value = ref_it == reference.end() ? 0 : ref_it->second;
|
auto ref_value = ref_it == reference.end() ? 0 : ref_it->second;
|
||||||
ASSERT_EQ(ref_value, map.get(key));
|
ASSERT_EQ(ref_value, map.get(key));
|
||||||
|
ASSERT_EQ(reference.size(), map.size());
|
||||||
|
ASSERT_EQ(reference.empty(), map.empty());
|
||||||
});
|
});
|
||||||
|
|
||||||
add_step(500, [&] {
|
add_step(500, [&] {
|
||||||
@ -44,6 +48,8 @@ TEST(WaitFreeHashMap, stress_test) {
|
|||||||
size_t reference_erased_count = reference.erase(key);
|
size_t reference_erased_count = reference.erase(key);
|
||||||
size_t map_erased_count = map.erase(key);
|
size_t map_erased_count = map.erase(key);
|
||||||
ASSERT_EQ(reference_erased_count, map_erased_count);
|
ASSERT_EQ(reference_erased_count, map_erased_count);
|
||||||
|
ASSERT_EQ(reference.size(), map.size());
|
||||||
|
ASSERT_EQ(reference.empty(), map.empty());
|
||||||
});
|
});
|
||||||
|
|
||||||
td::RandomSteps runner(std::move(steps));
|
td::RandomSteps runner(std::move(steps));
|
||||||
|
Loading…
Reference in New Issue
Block a user