Refactor how frames are sent from receiver
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
// Copyright (2019-2024) Paul Scherrer Institute
|
||||
|
||||
#include <catch2/catch.hpp>
|
||||
|
||||
#include "../common/SendBufferControl.h"
|
||||
|
||||
TEST_CASE("SendBuffer") {
|
||||
SendBuffer buf(2*1024*1024);
|
||||
REQUIRE_THROWS(buf.SetBufferLocationSize(4 * 1024 * 1024));
|
||||
REQUIRE_NOTHROW(buf.SetBufferLocationSize(1024 * 1024));
|
||||
|
||||
REQUIRE(buf.GetNumOfLocations() == 2);
|
||||
|
||||
REQUIRE(buf.GetBufferLocationSize() == 1024*1024);
|
||||
|
||||
REQUIRE(buf.GetBufferLocationID(buf.GetBufferLocation(0)) == 0);
|
||||
REQUIRE(buf.GetBufferLocationID(buf.GetBufferLocation(1)) == 1);
|
||||
REQUIRE_THROWS(buf.GetBufferLocation(2));
|
||||
REQUIRE_THROWS(buf.GetBufferLocationID(nullptr));
|
||||
}
|
||||
|
||||
TEST_CASE("SendBufferControl") {
|
||||
DiffractionExperiment experiment(DetectorGeometry(18,3,8,36));
|
||||
|
||||
SendBuffer buf(4*experiment.GetSendBufferLocationSize());
|
||||
SendBufferControl buf_ctrl(experiment, buf);
|
||||
|
||||
REQUIRE(buf_ctrl.GetAvailBufLocations() == 4);
|
||||
|
||||
ZeroCopyReturnValue *ret0 = buf_ctrl.GetBufLocation();
|
||||
REQUIRE(ret0 != nullptr);
|
||||
REQUIRE(buf_ctrl.GetAvailBufLocations() == 3);
|
||||
|
||||
ZeroCopyReturnValue *ret1 = buf_ctrl.GetBufLocation();
|
||||
REQUIRE(ret1 != nullptr);
|
||||
|
||||
ZeroCopyReturnValue *ret2 = buf_ctrl.GetBufLocation();
|
||||
REQUIRE(ret2 != nullptr);
|
||||
|
||||
ZeroCopyReturnValue *ret3 = buf_ctrl.GetBufLocation();
|
||||
REQUIRE(ret3 != nullptr);
|
||||
|
||||
REQUIRE(buf_ctrl.GetAvailBufLocations() == 0);
|
||||
|
||||
ZeroCopyReturnValue *ret4 = buf_ctrl.GetBufLocation();
|
||||
REQUIRE(ret4 == nullptr);
|
||||
|
||||
ret0->release();
|
||||
ret1->release();
|
||||
ret2->release();
|
||||
ret3->release();
|
||||
|
||||
REQUIRE(buf_ctrl.GetAvailBufLocations() == 4);
|
||||
|
||||
REQUIRE(buf_ctrl.CheckIfBufferReturned(std::chrono::microseconds(1)));
|
||||
}
|
||||
|
||||
TEST_CASE("SendBufferControl_BuffersNotReturned") {
|
||||
DiffractionExperiment experiment(DetectorGeometry(18,3,8,36));
|
||||
|
||||
SendBuffer buf(4*experiment.GetSendBufferLocationSize());
|
||||
SendBufferControl buf_ctrl(experiment, buf);
|
||||
|
||||
REQUIRE(buf_ctrl.GetAvailBufLocations() == 4);
|
||||
|
||||
ZeroCopyReturnValue *ret0 = buf_ctrl.GetBufLocation();
|
||||
REQUIRE(ret0 != nullptr);
|
||||
REQUIRE(buf_ctrl.GetAvailBufLocations() == 3);
|
||||
REQUIRE(!buf_ctrl.CheckIfBufferReturned(std::chrono::microseconds(1)));
|
||||
}
|
||||
Reference in New Issue
Block a user