1 #include "artdaq/DAQrate/EventStore.hh"
2 #include <fhiclcpp/ParameterSet.h>
6 #define BOOST_TEST_MODULE(EventStore_t)
7 #include "boost/test/auto_unit_test.hpp"
9 BOOST_AUTO_TEST_SUITE(EventStore_test)
16 int bogusApp(
int,
char**)
18 artdaq::RawEventQueue& queue(artdaq::getGlobalQueue());
19 artdaq::RawEvent_ptr incomingEvent;
20 std::vector<artdaq::RawEvent_ptr> receivedEvents;
24 queue.deqWait(incomingEvent);
25 if (incomingEvent ==
nullptr)
27 for (std::vector<artdaq::RawEvent_ptr>::iterator it = receivedEvents.begin();
28 it != receivedEvents.end(); ++it)
33 queue.enqNowait(artdaq::RawEvent_ptr(0));
37 receivedEvents.emplace_back(incomingEvent);
48 std::unique_ptr<artdaq::EventStore> eventStore;
50 fhicl::ParameterSet pset;
53 int sequenceID[8] = {1, 2, 1, 2, 1, 2, 2, 1};
54 int fragmentID[8] = {1, 2, 3, 4, 1, 2, 3, 4};
55 std::unique_ptr<artdaq::Fragment> testFragment;
56 for (
int i = 0; i < 8; i++)
58 testFragment.reset(
new artdaq::Fragment(sequenceID[i], fragmentID[i]));
59 eventStore->
insert(std::move(testFragment));
61 int readerReturnValue;
64 artdaq::RawEventQueue& queue(artdaq::getGlobalQueue());
66 artdaq::RawEvent_ptr r1;
67 artdaq::RawEvent_ptr r2;
68 artdaq::RawEvent_ptr r3;
69 artdaq::RawEvent_ptr r4;
71 BOOST_REQUIRE_EQUAL(queue.deqNowait(r1),
true);
72 BOOST_REQUIRE_EQUAL(queue.deqNowait(r2),
true);
73 BOOST_REQUIRE_EQUAL(queue.deqNowait(r3),
true);
74 BOOST_REQUIRE_EQUAL(queue.deqNowait(r4),
false);
76 BOOST_REQUIRE_EQUAL(r1->numFragments(), (size_t) 4);
77 BOOST_REQUIRE_EQUAL(r2->numFragments(), (size_t) 4);
85 std::unique_ptr<artdaq::EventStore> eventStore;
87 fhicl::ParameterSet pset;
91 int sequenceID[8] = {1, 5, 4, 6, 7, 2, 8, 3};
92 int fragmentID[8] = {1, 2, 3, 4, 1, 2, 3, 4};
93 std::unique_ptr<artdaq::Fragment> testFragment;
94 for (
int i = 0; i < 8; i++)
96 testFragment.reset(
new artdaq::Fragment(sequenceID[i], fragmentID[i]));
97 eventStore->
insert(std::move(testFragment));
99 int readerReturnValue;
100 eventStore->
endOfData(readerReturnValue);
102 artdaq::RawEventQueue& queue(artdaq::getGlobalQueue());
104 artdaq::RawEvent_ptr r1;
105 artdaq::RawEvent_ptr r2;
106 artdaq::RawEvent_ptr r3;
107 artdaq::RawEvent_ptr r4;
109 BOOST_REQUIRE_EQUAL(queue.deqNowait(r1),
true);
110 BOOST_REQUIRE_EQUAL(queue.deqNowait(r2),
true);
111 BOOST_REQUIRE_EQUAL(queue.deqNowait(r3),
true);
112 BOOST_REQUIRE_EQUAL(queue.deqNowait(r4),
false);
114 BOOST_REQUIRE_EQUAL(r1->numFragments(), (size_t) 4);
115 BOOST_REQUIRE_EQUAL(r2->numFragments(), (size_t) 4);
120 std::unique_ptr<std::vector<artdaq::Fragment>> fragments1 = r1->releaseProduct();
121 int sequenceIDb[8] = {5, 6, 7, 8};
122 for (
int i = 0; i < 4; i++)
124 BOOST_REQUIRE_EQUAL(sequenceIDb[i], (
int)fragments1->at(i).sequenceID());
127 std::unique_ptr<std::vector<artdaq::Fragment>> fragments2 = r2->releaseProduct();
128 int sequenceIDc[8] = {1, 4, 2, 3};
129 for (
int i = 0; i < 4; i++)
131 BOOST_REQUIRE_EQUAL(sequenceIDc[i], (
int)fragments2->at(i).sequenceID());
135 BOOST_AUTO_TEST_SUITE_END()
void insert(FragmentPtr pfrag, bool printWarningWhenFragmentIsDropped=true)
Give ownership of the Fragment to the EventStore.
bool endOfData(int &readerReturnValue)
Indicate that the end of input has been reached to the art thread.
The EventStore class collects Fragment objects, until it receives a complete event, at which point the event is handed over to the art thread.
int( ART_CMDLINE_FCN)(int, char **)
An art function that accepts standard C main arguments.
void setSeqIDModulus(unsigned int seqIDModulus)
Set the parameter that will be used to determine which sequence IDs get grouped together into events...