71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
// Copyright (2019-2024) Paul Scherrer Institute
|
|
|
|
#include <catch2/catch_all.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)));
|
|
}
|