152 lines
4.7 KiB
C++
152 lines
4.7 KiB
C++
// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
#include <catch2/catch_all.hpp>
|
|
#include "../acquisition_device/AcquisitionCounters.h"
|
|
|
|
TEST_CASE("AcquisitionCountersTest","[AcquisitionDeviceCounters]") {
|
|
DiffractionExperiment x(DetJF(2));
|
|
x.NumTriggers(1).ImagesPerTrigger(50);
|
|
|
|
AcquisitionCounters counters;
|
|
counters.Reset(x, 0);
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 0);
|
|
REQUIRE(counters.GetFastestFrameNumber() == 0);
|
|
REQUIRE(counters.GetCurrFrameNumber(0) == 0);
|
|
REQUIRE(counters.GetCurrFrameNumber(1) == 0);
|
|
REQUIRE_THROWS(counters.GetCurrFrameNumber(32));
|
|
REQUIRE(counters.CalculateDelay(2) == 0);
|
|
|
|
REQUIRE(!counters.IsAcquisitionFinished());
|
|
|
|
Completion c{};
|
|
c.frame_number = 32;
|
|
c.module_number = 1;
|
|
c.handle = 17;
|
|
counters.UpdateCounters(&c);
|
|
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 0);
|
|
REQUIRE(counters.GetFastestFrameNumber() == 32);
|
|
REQUIRE(counters.GetCurrFrameNumber(0) == 0);
|
|
REQUIRE(counters.GetCurrFrameNumber(1) == 32);
|
|
|
|
REQUIRE(counters.CalculateDelay(31, 1) == 1);
|
|
REQUIRE(counters.CalculateDelay(33, 1) == 0);
|
|
REQUIRE(counters.GetBufferHandle(32, 1) == 17);
|
|
REQUIRE(counters.GetBufferHandle(32, 0) == AcquisitionCounters::HandleNotFound);
|
|
|
|
c.frame_number = 15;
|
|
c.module_number = 0;
|
|
counters.UpdateCounters(&c);
|
|
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 15);
|
|
REQUIRE(counters.GetFastestFrameNumber() == 32);
|
|
REQUIRE(counters.GetCurrFrameNumber(0) == 15);
|
|
REQUIRE(counters.GetCurrFrameNumber(1) == 32);
|
|
|
|
REQUIRE(counters.CalculateDelay(14) == 1);
|
|
REQUIRE(counters.CalculateDelay(16) == 0);
|
|
|
|
REQUIRE(counters.CalculateDelay(14, 0) == 1);
|
|
REQUIRE(counters.CalculateDelay(16, 0) == 0);
|
|
|
|
REQUIRE(counters.CalculateDelay(31, 1) == 1);
|
|
REQUIRE(counters.CalculateDelay(33, 1) == 0);
|
|
|
|
counters.SetAcquisitionFinished();
|
|
|
|
REQUIRE(counters.GetFastestFrameNumber() == 32);
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 15);
|
|
REQUIRE(counters.GetCurrFrameNumber(0) == 15);
|
|
REQUIRE(counters.GetCurrFrameNumber(1) == 32);
|
|
REQUIRE(counters.CalculateDelay(0) == 15);
|
|
REQUIRE(counters.CalculateDelay(50) == 0);
|
|
}
|
|
|
|
TEST_CASE("AcquisitionCountersTest_SlowestLost","[AcquisitionDeviceCounters]") {
|
|
DiffractionExperiment x(DetJF(2));
|
|
x.NumTriggers(1).ImagesPerTrigger(100);
|
|
|
|
AcquisitionCounters counters;
|
|
counters.Reset(x, 0);
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 0);
|
|
REQUIRE(counters.GetFastestFrameNumber() == 0);
|
|
|
|
REQUIRE(!counters.IsAcquisitionFinished());
|
|
|
|
Completion c{};
|
|
c.frame_number = 20;
|
|
c.module_number = 0;
|
|
c.handle = 16;
|
|
counters.UpdateCounters(&c);
|
|
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 0);
|
|
REQUIRE(counters.GetFastestFrameNumber() == 20);
|
|
|
|
c.frame_number = 80;
|
|
c.module_number = 1;
|
|
c.handle = 17;
|
|
counters.UpdateCounters(&c);
|
|
|
|
REQUIRE(counters.GetFastestFrameNumber() == 80);
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 80 - AcquisitionCounters::ThresholdFramesLost);
|
|
|
|
c.frame_number = 50;
|
|
c.module_number = 0;
|
|
c.handle = 15;
|
|
counters.UpdateCounters(&c);
|
|
|
|
REQUIRE(counters.GetSlowestFrameNumber() == 50);
|
|
REQUIRE(counters.GetFastestFrameNumber() == 80);
|
|
}
|
|
|
|
TEST_CASE("AcquisitionCountersTest_OutOfBounds","[AcquisitionDeviceCounters]") {
|
|
DiffractionExperiment x(DetJF(2));
|
|
x.NumTriggers(1).ImagesPerTrigger(50);
|
|
|
|
AcquisitionCounters counters;
|
|
counters.Reset(x, 0);
|
|
|
|
Completion c{};
|
|
c.frame_number = 50;
|
|
REQUIRE_THROWS(counters.UpdateCounters(&c));
|
|
|
|
c.frame_number = 80;
|
|
REQUIRE_THROWS(counters.UpdateCounters(&c));
|
|
|
|
c.frame_number = 20;
|
|
c.module_number = 2;
|
|
REQUIRE_THROWS(counters.UpdateCounters(&c));
|
|
}
|
|
|
|
TEST_CASE("AcquisitionCountersTest_PacketCount","[AcquisitionDeviceCounters]") {
|
|
DiffractionExperiment x(DetJF(2));
|
|
x.NumTriggers(1).ImagesPerTrigger(50).Summation(2);
|
|
|
|
AcquisitionCounters counters;
|
|
counters.Reset(x, 0);
|
|
REQUIRE(counters.GetTotalPackets() == 0);
|
|
|
|
Completion c{};
|
|
c.frame_number = 32;
|
|
c.module_number = 1;
|
|
c.handle = 17;
|
|
c.packet_count = 86;
|
|
counters.UpdateCounters(&c);
|
|
|
|
REQUIRE(counters.GetTotalPackets() == 86);
|
|
REQUIRE(counters.GetTotalPackets(0) == 0);
|
|
REQUIRE(counters.GetTotalPackets(1) == 86);
|
|
|
|
c.frame_number = 15;
|
|
c.module_number = 0;
|
|
c.packet_count = 128;
|
|
counters.UpdateCounters(&c);
|
|
|
|
REQUIRE(counters.GetTotalPackets() == 86 + 128);
|
|
REQUIRE(counters.GetTotalPackets(0) == 128);
|
|
REQUIRE(counters.GetTotalPackets(1) == 86);
|
|
|
|
REQUIRE(counters.GetTotalExpectedPackets() == 50 * 512 * 2 * 2);
|
|
REQUIRE(counters.GetTotalExpectedPacketsPerModule() == 50 * 512 * 2);
|
|
} |