// Copyright (2019-2024) Paul Scherrer Institute #include #include "../receiver/LossyFilter.h" TEST_CASE("LossyFilterDisabled","[LossyFilter]") { LossyFilter filter(false, 0.0); DataMessage message{ .number = 123, .indexing_result = 0 }; filter.ApplyFilter(message); REQUIRE(message.number == 123); REQUIRE(message.indexing_result == 0); filter.ApplyFilter(message); REQUIRE(message.number == 123); REQUIRE(message.indexing_result == 0); filter.ApplyFilter(message); REQUIRE(message.number == 123); REQUIRE(message.indexing_result == 0); } TEST_CASE("LossyFilterEnable","[LossyFilter]") { LossyFilter filter(true, 0.0); DataMessage message_1{ .number = 123, .indexing_result = 1 }; DataMessage message_2{ .number = 124, .indexing_result = 0 }; filter.ApplyFilter(message_1); REQUIRE(message_1.number == 0); filter.ApplyFilter(message_2); REQUIRE(message_2.number == -1); filter.ApplyFilter(message_1); REQUIRE(message_1.number == 1); filter.ApplyFilter(message_1); REQUIRE(message_1.number == 2); } TEST_CASE("LossyFilterEnable_Prob","[LossyFilter]") { LossyFilter filter(true, 0.5); int64_t accepted = 0; int64_t count = 0; for (int i = 0; i < 1000000; i++) { DataMessage message{ .number = 124, .indexing_result = 0 }; filter.ApplyFilter(message); count++; if (message.number < 0) accepted++; } double frac = static_cast(accepted) / static_cast(count); REQUIRE(frac < 0.51); REQUIRE(frac > 0.49); }