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