95 lines
1.6 KiB
C++
95 lines
1.6 KiB
C++
#include <luna/HashMap.h>
|
|
#include <luna/HashTable.h>
|
|
#include <os/File.h>
|
|
#include <test.h>
|
|
|
|
struct TwoInts
|
|
{
|
|
int a;
|
|
int b;
|
|
|
|
bool operator==(TwoInts other) const
|
|
{
|
|
return other.a == a;
|
|
}
|
|
};
|
|
|
|
template <> u64 hash(const TwoInts& value, u64 salt)
|
|
{
|
|
return hash(value.a, salt);
|
|
}
|
|
|
|
TestResult test_empty_hash_table()
|
|
{
|
|
HashTable<int> table;
|
|
|
|
validate(table.try_find(0) == nullptr);
|
|
|
|
test_success;
|
|
}
|
|
|
|
TestResult test_hash_table_find()
|
|
{
|
|
HashTable<int> table;
|
|
|
|
validate(TRY(table.try_set(0)));
|
|
|
|
validate(table.try_find(0));
|
|
validate(table.try_find(1) == nullptr);
|
|
|
|
test_success;
|
|
}
|
|
|
|
TestResult test_hash_table_remove()
|
|
{
|
|
HashTable<int> table;
|
|
|
|
validate(TRY(table.try_set(0)));
|
|
|
|
validate(table.try_find(0));
|
|
|
|
validate(table.try_remove(0));
|
|
|
|
validate(table.try_find(0) == nullptr);
|
|
|
|
test_success;
|
|
}
|
|
|
|
TestResult test_hash_table_duplicates()
|
|
{
|
|
HashTable<TwoInts> table;
|
|
|
|
validate(TRY(table.try_set(TwoInts { 1, 5 })));
|
|
validate(!TRY(table.try_set(TwoInts { 1, 3 })));
|
|
|
|
validate(table.try_find(TwoInts { 1, 0 })->b == 5);
|
|
|
|
test_success;
|
|
}
|
|
|
|
TestResult test_hash_map_set_and_get()
|
|
{
|
|
HashMap<int, int> map;
|
|
|
|
validate(TRY(map.try_set(1, 42)));
|
|
|
|
validate(map.try_get(1).release_value() == 42);
|
|
|
|
validate(!map.try_get(6).has_value());
|
|
|
|
test_success;
|
|
}
|
|
|
|
Result<void> test_main()
|
|
{
|
|
test_prelude;
|
|
|
|
run_test(test_empty_hash_table);
|
|
run_test(test_hash_table_find);
|
|
run_test(test_hash_table_remove);
|
|
run_test(test_hash_table_duplicates);
|
|
run_test(test_hash_map_set_and_get);
|
|
|
|
return {};
|
|
}
|