summaryrefslogtreecommitdiff
path: root/src/hash_map.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2022-08-05 19:35:27 +1000
committerMaxime Coste <mawww@kakoune.org>2022-08-05 20:06:34 +1000
commit89cd3c52eb8484f9d03f80a3372625da07284966 (patch)
tree4f675ef2684076c3ed4efa4aa20bdc2168a51e3c /src/hash_map.cc
parent9fb7d90449ce798bbc014ac6d17261a9df5ee3f2 (diff)
Add HashSet implemented as HashMap with void value type
Diffstat (limited to 'src/hash_map.cc')
-rw-r--r--src/hash_map.cc56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/hash_map.cc b/src/hash_map.cc
index 6972f34b..245ff206 100644
--- a/src/hash_map.cc
+++ b/src/hash_map.cc
@@ -36,6 +36,7 @@ UnitTest test_hash_map{[] {
map.insert({10, 1});
map.insert({10, 2});
kak_assert(map.find_index(10) == 0);
+ kak_assert(map.size() == 1);
kak_assert(map[10] == 2);
map.remove(10);
kak_assert(map.find_index(10) == -1);
@@ -90,6 +91,61 @@ UnitTest test_hash_map{[] {
}
}};
+UnitTest test_hash_set{[] {
+ // Basic usage
+ {
+ HashSet<int> set;
+ set.insert({10});
+ set.insert({20});
+ kak_assert(set.find_index(0) == -1);
+ kak_assert(set.find_index(10) == 0);
+ kak_assert(set.find_index(20) == 1);
+ kak_assert(set[10] == 10);
+ kak_assert(set[20] == 20);
+ kak_assert(set[30] == 30);
+ set[30];
+ kak_assert(set.find_index(30) == 2);
+ set.remove(20);
+ kak_assert(set.find_index(30) == 1);
+ kak_assert(set.size() == 2);
+ }
+
+ // Replace Multiple entries with the same key
+ {
+ HashSet<int> set;
+ set.insert({10});
+ set.insert({10});
+ kak_assert(set.find_index(10) == 0);
+ kak_assert(set.size() == 1);
+ set.remove(10);
+ kak_assert(set.find_index(10) == -1);
+ }
+
+ // Multiple entries with the same key
+ {
+ MultiHashSet<int> set;
+ set.insert({10});
+ set.insert({10});
+ kak_assert(set.find_index(10) == 0);
+ set.remove(10);
+ kak_assert(set.find_index(10) == 0);
+ set.remove(10);
+ kak_assert(set.find_index(10) == -1);
+ set.insert({20});
+ set.insert({20});
+ set.remove_all(20);
+ kak_assert(set.find_index(20) == -1);
+ }
+
+ // Check hash compatible support
+ {
+ HashSet<String> set;
+ set.insert({"test"});
+ kak_assert(set["test"_sv] == "test");
+ set.remove("test"_sv);
+ }
+}};
+
template<typename Map>
void do_profile(size_t count, StringView type)
{