diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2024-01-16 15:26:46 +0100 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2024-01-16 15:26:46 +0100 |
commit | 634f55ceed45197e743c2d1c3df0c97c6f8888ae (patch) | |
tree | d1e9663c53fd719ae53745a18b0628ac43314300 /modules/codec/tests/schema.cpp | |
parent | b155dff8b068dc87d22eefd07150a681790247b8 (diff) |
codec: Adding schema hashes and testing
Diffstat (limited to 'modules/codec/tests/schema.cpp')
-rw-r--r-- | modules/codec/tests/schema.cpp | 66 |
1 files changed, 60 insertions, 6 deletions
diff --git a/modules/codec/tests/schema.cpp b/modules/codec/tests/schema.cpp index df90eb1..871feb7 100644 --- a/modules/codec/tests/schema.cpp +++ b/modules/codec/tests/schema.cpp @@ -1,14 +1,68 @@ #include <forstio/test/suite.h> + +#include <forstio/templates.h> #include "../c++/schema.h" #include "../c++/schema_hash.h" namespace { -SAW_TEST("Schema String Hash"){ - using namespace saw; - data<schema::String> str{"foo"}; - uint64_t hash = schema_hash<schema::String>::apply(0, str); - uint64_t expected_hash = 1524024712123765130u; +template<typename T> +struct schema_hash_test { + static_assert(saw::always_false<T>, "Needs the test pair"); +}; + +template<typename T, uint64_t expected> +struct schema_test_pair{}; + +template<typename T, uint64_t expected> +struct schema_hash_test<schema_test_pair<T,expected>> { + static void check(){ + using namespace saw; + uint64_t hash = schema_hash<T>::apply(); + SAW_EXPECT( hash == expected, std::string{"Hash for "} + std::string{T::name.view()} + " is " + std::to_string(hash) +", but should be "+ std::to_string(expected) + "."); + } +}; + +template<typename... T> +struct schema_hash_test_multi { + template<uint64_t i> + static void check_ele(){ + using type = typename saw::parameter_pack_type<i,T...>::type; + + schema_hash_test<type>::check(); - SAW_EXPECT( hash == expected_hash, std::string{"Hash is "} + std::to_string(hash) +", but should be 0."); + if constexpr ( (i+1) < sizeof...(T)){ + check_ele<i+1>(); + } + } + + static void check(){ + if constexpr (sizeof...(T) > 0){ + check_ele<0>(); + } + } +}; + +namespace schema { +using namespace saw::schema; +} + +SAW_TEST("Schema Hashes"){ + using namespace saw; + schema_hash_test_multi< + schema_test_pair<schema::UInt8 , 17448981058701187403u>, + schema_test_pair<schema::UInt16, 17448981058701187400u>, + schema_test_pair<schema::UInt32, 17448981058701187398u>, + schema_test_pair<schema::UInt64, 17448981058701187394u>, + schema_test_pair<schema::Int8 , 856492552766770219u>, + schema_test_pair<schema::Int16, 856492552766770216u>, + schema_test_pair<schema::Int32, 856492552766770214u>, + schema_test_pair<schema::Int64, 856492552766770210u>, + schema_test_pair<schema::Float32, 14974566471626763725u>, + schema_test_pair<schema::Float64, 14974566471626763729u>, + schema_test_pair<schema::SignedInteger, 17576067307413535420u>, + schema_test_pair<schema::UnsignedInteger, 15327325027193222152u>, + schema_test_pair<schema::FloatingPoint, 18201377588738489119u>, + schema_test_pair<schema::String, 3005399793615731798u> + >::check(); } } |