From e18b054779766269a4b9ca68729c380d24c0535d Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Mon, 6 Jan 2025 22:25:09 +0100 Subject: Some more work on hashing --- asl/tests/hash_tests.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 asl/tests/hash_tests.cpp (limited to 'asl/tests') diff --git a/asl/tests/hash_tests.cpp b/asl/tests/hash_tests.cpp new file mode 100644 index 0000000..d0df77a --- /dev/null +++ b/asl/tests/hash_tests.cpp @@ -0,0 +1,58 @@ +#include "asl/testing/testing.hpp" +#include "asl/hash.hpp" +#include "asl/string_view.hpp" +#include "asl/string.hpp" + +static_assert(asl::hashable); +static_assert(asl::hashable); +static_assert(asl::hashable); +static_assert(asl::hashable); +static_assert(asl::hashable); + +static_assert(asl::hashable); +static_assert(asl::hashable); +static_assert(asl::hashable); +static_assert(asl::hashable); + +ASL_TEST(integers) +{ + uint64_t a = asl::hash_value(45); + uint64_t b = asl::hash_value(45); + uint64_t c = asl::hash_value(46); + uint64_t d = asl::hash_value(45); + + ASL_TEST_EXPECT(a == b); + ASL_TEST_EXPECT(a != c); + ASL_TEST_EXPECT(a != d); +} + +static_assert(asl::hashable); + +ASL_TEST(bool) +{ + ASL_TEST_EXPECT(asl::hash_value(true) == asl::hash_value(true)); + ASL_TEST_EXPECT(asl::hash_value(false) == asl::hash_value(false)); + ASL_TEST_EXPECT(asl::hash_value(true) != asl::hash_value(false)); +} + +static_assert(asl::hashable); +static_assert(asl::hashable>); + +ASL_TEST(strings) +{ + ASL_TEST_EXPECT(asl::hash_value("hello"_sv) == asl::hash_value("hello"_sv)); + ASL_TEST_EXPECT(asl::hash_value("hello"_sv) != asl::hash_value("hello "_sv)); + ASL_TEST_EXPECT(asl::hash_value("hello"_sv) != asl::hash_value("HELLO"_sv)); + + ASL_TEST_EXPECT(asl::hash_value(asl::string("hello"_sv)) == asl::hash_value(asl::string("hello"_sv))); + ASL_TEST_EXPECT(asl::hash_value(asl::string("hello"_sv)) != asl::hash_value(asl::string("hello "_sv))); + ASL_TEST_EXPECT(asl::hash_value(asl::string("hello"_sv)) != asl::hash_value(asl::string("HELLO"_sv))); + + ASL_TEST_EXPECT(asl::hash_value("hello"_sv) == asl::hash_value(asl::string("hello"_sv))); +} + +// @Todo span, buffer (add combine_contiguous (optimize uniquely_represented)) +// @Todo enum classes +// @Todo option (optimize uniquely_represented + has_niche) +// @Todo status, status_or +// @Todo box -- cgit