Files
Jungfraujoch/tests/AcquisitionCountersTest.cpp

120 lines
3.9 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#include <catch2/catch.hpp>
#include "../receiver/AcquisitionCounters.h"
TEST_CASE("AcquisitionCountersTest","[AcquisitionDeviceCounters]") {
DiffractionExperiment x(DetectorGeometry(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) == -2);
REQUIRE(!counters.IsAcquisitionFinished());
Completion c{};
c.frame_number = 32;
c.module_number = 1;
c.handle = 17;
c.bunchid = 1ul<<56;
c.debug = 1u<<31;
c.timestamp = 456;
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) == -1);
REQUIRE(counters.GetBufferHandle(32, 1) == 17);
REQUIRE(counters.GetBufferHandle(32, 0) == AcquisitionCounters::HandleNotFound);
REQUIRE(counters.GetCompletion(32, 1).bunchid == c.bunchid);
REQUIRE(counters.GetCompletion(32, 1).debug == c.debug);
REQUIRE(counters.GetCompletion(32, 1).timestamp == c.timestamp);
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) == -1);
REQUIRE(counters.CalculateDelay(14, 0) == 1);
REQUIRE(counters.CalculateDelay(16, 0) == -1);
REQUIRE(counters.CalculateDelay(31, 1) == 1);
REQUIRE(counters.CalculateDelay(33, 1) == -1);
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) == 15-50);
}
TEST_CASE("AcquisitionCountersTest_OutOfBounds","[AcquisitionDeviceCounters]") {
DiffractionExperiment x(DetectorGeometry(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(DetectorGeometry(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.GetExpectedPackets() == 50 * 128 * 2 * 2);
REQUIRE(counters.GetExpectedPacketsPerModule() == 50 * 128 * 2);
}