summaryrefslogtreecommitdiff
path: root/modules/codec/tests/schema.cpp
blob: 871feb7316400a818867ce937b611fc084136b0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <forstio/test/suite.h>

#include <forstio/templates.h>
#include "../c++/schema.h"
#include "../c++/schema_hash.h"

namespace {
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();

		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();
}
}