diff options
| author | Maxime Coste <mawww@kakoune.org> | 2022-08-05 19:35:27 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2022-08-05 20:06:34 +1000 |
| commit | 89cd3c52eb8484f9d03f80a3372625da07284966 (patch) | |
| tree | 4f675ef2684076c3ed4efa4aa20bdc2168a51e3c /src/hash_map.cc | |
| parent | 9fb7d90449ce798bbc014ac6d17261a9df5ee3f2 (diff) | |
Add HashSet implemented as HashMap with void value type
Diffstat (limited to 'src/hash_map.cc')
| -rw-r--r-- | src/hash_map.cc | 56 |
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) { |
