8#include <gtest/gtest.h>
19 auto generate_random_struct_data() ->
StructData
21 static constexpr auto MAX_NUM_SIZE = 100;
24 auto random_device = std::random_device{};
25 auto random_gen = std::mt19937_64{ random_device() };
27 auto data_size_gen = std::uniform_int_distribution<uint32_t>{ 1, MAX_NUM_SIZE };
29 const auto marker_size = data_size_gen(random_gen);
30 const auto hit_size = data_size_gen(random_gen);
32 struct_data.header.frame_counter = 1;
33 struct_data.header.vmm_tag = std::array<char, 3>{
'V',
'M',
'3' };
34 struct_data.header.udp_timestamp = std::chrono::system_clock::now().time_since_epoch().count();
37 auto vmm_id_gen = std::uniform_int_distribution<uint8_t>{ 0, (1U << 5U) - 1 };
38 auto srs_timestamp_gen = std::uniform_int_distribution<uint64_t>{ 0, (uint64_t{ 1 } << 42U) - 1 };
40 struct_data.marker_data.reserve(marker_size);
41 for (
auto idx : std::views::iota(uint32_t{ 0 }, marker_size))
43 auto& marker = struct_data.marker_data.emplace_back();
44 marker.vmm_id = vmm_id_gen(random_gen);
45 marker.srs_timestamp = srs_timestamp_gen(random_gen);
48 auto channel_num_gen = std::uniform_int_distribution<uint8_t>{ 0, (1U << 6U) - 1 };
49 auto tdc_gen = std::uniform_int_distribution<uint8_t>{ 0, (1U << 8U) - 1 };
50 auto offset_gen = std::uniform_int_distribution<uint8_t>{ 0, (1U << 5U) - 1 };
51 auto adc_gen = std::uniform_int_distribution<uint16_t>{ 0, (1U << 10U) - 1 };
52 auto bc_id_gen = std::uniform_int_distribution<uint16_t>{ 0, (1U << 12U) - 1 };
55 struct_data.hit_data.reserve(hit_size);
56 for ([[maybe_unused]]
auto idx : std::views::iota(uint32_t{ 0 }, hit_size))
58 auto& hit = struct_data.hit_data.emplace_back();
59 hit.channel_num = channel_num_gen(random_gen);
60 hit.channel_num = channel_num_gen(random_gen);
61 hit.tdc = tdc_gen(random_gen);
62 hit.offset = offset_gen(random_gen);
63 hit.adc = adc_gen(random_gen);
64 hit.bc_id = bc_id_gen(random_gen);
72TEST(data_structure, check_de_serialization)
74 auto random_data = generate_random_struct_data();
79 auto initial_converter = [&random_data](std::size_t = 0) ->
const StructData*
80 {
return &random_data; };
82 auto res = serializer_converter.run(initial_converter);
84 EXPECT_FALSE(res.has_value());
85 auto struct_data = deserializer_converter.run(serializer_converter);
86 EXPECT_FALSE(struct_data.has_value());
TEST(data_structure, check_de_serialization)