summaryrefslogtreecommitdiff
path: root/modules/codec/tests
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2024-01-16 15:26:46 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2024-01-16 15:26:46 +0100
commit634f55ceed45197e743c2d1c3df0c97c6f8888ae (patch)
treed1e9663c53fd719ae53745a18b0628ac43314300 /modules/codec/tests
parentb155dff8b068dc87d22eefd07150a681790247b8 (diff)
codec: Adding schema hashes and testing
Diffstat (limited to 'modules/codec/tests')
-rw-r--r--modules/codec/tests/schema.cpp66
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();
}
}