43 const int nPages = 64;
44 const int nParts = 16;
45 std::vector<InputSpec> inputspecs = {
46 InputSpec{
"tpc",
"TPC",
"RAWDATA", 0, Lifetime::Timeframe}};
48 std::vector<DataHeader> dataheaders;
49 dataheaders.emplace_back(
"RAWDATA",
"TPC", 0, nPages *
PAGESIZE, 0, nParts);
51 std::random_device
rd;
52 std::uniform_int_distribution<> lengthDist(1, nPages);
53 auto randlength = [&
rd, &lengthDist]() {
54 return lengthDist(
rd);
60 std::vector<uint16_t> feeids;
61 auto nextlength = randlength();
62 auto createFEEID = [&rdhCount, &feeids, &nPages, &randlength, &nextlength]() {
63 if (rdhCount % nPages == 0 || rdhCount - feeids.back() > nextlength) {
64 feeids.emplace_back(rdhCount);
65 nextlength = randlength();
70 rdh.feeId = createFEEID();
74 auto dataset = test::createData(inputspecs, dataheaders, amendRdh);
76 REQUIRE(dataset.messages.size() > 0);
77 REQUIRE(dataset.messages[0].at(0) !=
nullptr);
78 REQUIRE(inputs.
size() > 0);
79 CHECK((*inputs.
begin()).header == dataset.messages[0].at(0)->data());
80 REQUIRE(rdhCount == nPages * nParts);
83 auto isSameRdh = [](
const char*
left,
const char*
right) ->
bool {
87 if (
left ==
nullptr ||
right ==
nullptr) {
93 std::vector<std::pair<const char*, size_t>> pages;
94 auto insertPages = [&pages](
const char*
ptr,
size_t n, uint32_t subSpec) ->
void {
95 pages.emplace_back(
ptr,
n);
97 int retVal = parser(isSameRdh, insertPages);
101 std::vector<std::pair<const char*, size_t>> pagesByForwardSearch;
102 auto insertForwardPages = [&pagesByForwardSearch](
const char*
ptr,
size_t n, uint32_t subSpec) ->
void {
103 pagesByForwardSearch.emplace_back(
ptr,
n);
107 LOG(info) <<
"called RDH amend: " << rdhCount;
108 LOG(info) <<
"created " << feeids.size() <<
" id(s), got " << pages.size() <<
" page(s)";
109 REQUIRE(pages.size() == feeids.size());
110 REQUIRE(pages.size() == pagesByForwardSearch.size());
112 feeids.emplace_back(rdhCount);
113 for (
auto i = 0;
i < pages.size();
i++) {
114 auto length = feeids[
i + 1] - feeids[
i];
117 fmt::format(
"{} [{},{}][{},{}]",
i, ((
void*)pages[
i].
first), (
void*)pagesByForwardSearch[
i].
first, pages[
i].second, pagesByForwardSearch[
i].second));
A parser and sequencer utility for raw pages within DPL input.
Raw page test data generator.
This utility handles transparently the DPL inputs and triggers a customizable action on sequences of ...
int forward(Predicate pred, Inserter inserter)
#define CHECK_MESSAGE(cond, msg)
#define REQUIRE_MESSAGE(cond, msg)