// Copyright (2019-2022) Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-or-later #include #include #include "../jungfrau/JFModulePedestal.h" TEST_CASE("JFPedestal_Serialize","[ProtoBuf][JFModulePedestal]") { // Predictable random number generator std::mt19937 g1(1576); std::normal_distribution distribution(12000, 100); JFModulePedestal pedestal; for (int i = 0; i < RAW_MODULE_SIZE; i++) { pedestal.GetPedestal()[i] = static_cast(distribution(g1)); pedestal.GetPedestalMask()[i] = static_cast(i % UINT8_MAX); } pedestal.SetCollectionTime(3456); pedestal.SetFrameCount(5000); JFJochProtoBuf::JFPedestal serialized = pedestal; JFModulePedestal deserialized = serialized; size_t diff = 0, diff_rms = 0, diff_mask = 0; for (int i = 0; i < RAW_MODULE_SIZE; i++) { if (pedestal.GetPedestal()[i] != deserialized.GetPedestal()[i]) diff++; if (pedestal.GetPedestalMask()[i] != deserialized.GetPedestalMask()[i]) diff_mask++; } REQUIRE(diff == 0); REQUIRE(diff_rms == 0); REQUIRE(diff_mask == 0); REQUIRE(deserialized.GetCollectionTime() == pedestal.GetCollectionTime()); REQUIRE(deserialized.GetFrameCount() == pedestal.GetFrameCount()); } TEST_CASE("JFPedestal_Mean","[JFModulePedestal]") { JFModulePedestal pedestal; auto pedestal_arr = pedestal.GetPedestal(); for (int i = 0; i < RAW_MODULE_SIZE; i++) pedestal_arr[i] = 2455; REQUIRE(pedestal.Mean() == Approx(2455)); } TEST_CASE("JFPedestal_GetPedestal","[JFModulePedestal]") { JFModulePedestal pedestal; auto pedestal_arr = pedestal.GetPedestal(); for (int i = 0; i < RAW_MODULE_SIZE; i++) pedestal_arr[i] = i; auto fp = pedestal.GetPedestal(); REQUIRE(fp[0] == 0.0); REQUIRE(fp[1] == 1); REQUIRE(fp[2] == 2); REQUIRE(fp[65535] == 65535); }