Arbutils/tests/DictionaryTests.cpp

122 lines
2.9 KiB
C++

#ifdef TESTS_BUILD
#include <doctest.h>
#include "../src/Collections/Dictionary.hpp"
#include "../src/Collections/StringViewDictionary.hpp"
using namespace ArbUt;
TEST_CASE("Create Dictionary, insert values") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
dic.Insert(2, 100);
dic.Insert(9, 2000);
}
TEST_CASE("Create Dictionary with initializer list") {
auto dic = Dictionary<i32, i32>({{5, 100}, {10, 200}, {50, 2}});
CHECK(dic.Get(5) == 100);
CHECK(dic.Get(10) == 200);
CHECK(dic.Get(50) == 2);
}
TEST_CASE("Create Dictionary, insert values, get values") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
dic.Insert(2, 100);
dic.Insert(9, 2000);
CHECK(dic.Get(2) == 100);
CHECK(dic.Get(9) == 2000);
CHECK(dic.Get(10) == 5);
}
TEST_CASE("Create Dictionary, insert values twice should throw") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
CHECK_THROWS(dic.Insert(10, 100));
CHECK(dic.Get(10) == 5);
}
TEST_CASE("Create Dictionary, insert value, then update value") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
dic[10] = 200;
CHECK(dic.Get(10) == 200);
}
TEST_CASE("Create Dictionary, insert value, try get value") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
auto v = dic.TryGet(10);
CHECK(v.has_value());
CHECK(v.value() == 5);
}
TEST_CASE("Create Dictionary, insert value, try get non existing value") {
auto dic = Dictionary<i32, i32>(5);
CHECK_FALSE(dic.TryGet(10).has_value());
}
TEST_CASE("Create Dictionary, insert value, Has") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
CHECK(dic.Has(10));
}
TEST_CASE("Create Dictionary, set value") {
auto dic = Dictionary<i32, i32>(5);
dic.Set(5, 100);
CHECK(dic.Has(5));
}
TEST_CASE("Create Dictionary, insert values, get count") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
dic.Insert(2, 100);
dic.Insert(9, 2000);
CHECK(dic.Count() == 3);
}
TEST_CASE("Create Dictionary, insert values, iterate over keys") {
auto dic = Dictionary<i32, i32>(5);
dic.Insert(10, 5);
dic.Insert(2, 100);
dic.Insert(9, 2000);
size_t i = 0;
for (auto val : dic) {
CHECK(dic.Has(val.first));
i++;
}
CHECK(i == 3);
}
TEST_CASE("Create Dictionary with different types, insert values, iterate over keys") {
auto dic = Dictionary<char, char>(5);
dic.Insert(10, 5);
dic.Insert(2, 100);
dic.Insert(9, 105);
size_t i = 0;
for (auto val : dic) {
CHECK(dic.Has(val.first));
i++;
}
CHECK(i == 3);
}
TEST_CASE("Create StringViewDictionary, insert values, get values by hash") {
auto dic = StringViewDictionary<i32>(5);
dic.Insert("foo"_cnc, 5);
dic.Insert("bar"_cnc, 100);
dic.Insert("zet"_cnc, 2000);
CHECK(dic.GetFromHash("bar"_cnc) == 100);
dic.Remove("zet"_cnc.GetHash());
CHECK(dic.Count() == 2);
}
#endif