Line data Source code
1 : /**
2 : * @file datahandlinglibs_SkiplistLatencyBufferModel_test.cxx Unit Tests for SkiplistLatencyBufferModel
3 : *
4 : * This is part of the DUNE DAQ Application Framework, copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 :
9 : /**
10 : * @brief Name of this test module
11 : */
12 : #define BOOST_TEST_MODULE datahandlinglibs_SkiplistLatencyBufferModel_test // NOLINT
13 :
14 : #include "boost/test/unit_test.hpp"
15 :
16 : #include "datahandlinglibs/ReadoutTypes.hpp"
17 : #include "datahandlinglibs/models/SkipListLatencyBufferModel.hpp"
18 :
19 : #include <utility>
20 :
21 : BOOST_AUTO_TEST_SUITE(datahandlinglibs_SkiplistLatencyBufferModel_test)
22 :
23 : using namespace dunedaq::datahandlinglibs;
24 :
25 : using ReadoutType = types::DUMMY_FRAME_STRUCT;
26 :
27 2 : BOOST_AUTO_TEST_CASE(datahandlinglibs_SkiplistLatencyBufferModel_write_and_return)
28 : {
29 1 : SkipListLatencyBufferModel<ReadoutType> buffer;
30 :
31 1 : ReadoutType frame1;
32 1 : frame1.timestamp = 2;
33 1 : frame1.another_key = 1;
34 1 : const auto [written1, result1] = buffer.write_and_return(std::move(frame1)); // NOLINT(performance-move-const-arg)
35 1 : BOOST_REQUIRE_EQUAL(result1, true);
36 1 : BOOST_REQUIRE_EQUAL(written1->get_timestamp(), 2);
37 :
38 : // Last written != back() in skip list since it is ordered
39 1 : ReadoutType frame2;
40 1 : frame2.timestamp = 1;
41 1 : frame2.another_key = 1;
42 1 : const auto [written2, result2] = buffer.write_and_return(std::move(frame2)); // NOLINT(performance-move-const-arg)
43 1 : BOOST_REQUIRE_EQUAL(result2, true);
44 1 : BOOST_REQUIRE_EQUAL(written2->get_timestamp(), 1);
45 1 : BOOST_REQUIRE_NE(written2, buffer.back());
46 1 : BOOST_REQUIRE_EQUAL(buffer.back()->get_timestamp(), 2);
47 :
48 : // Skip list doesn't accept duplicates, it returns an iterator to the existing element
49 1 : ReadoutType frame3;
50 1 : frame3.timestamp = 1;
51 1 : frame3.another_key = 1;
52 1 : const auto [written3, result3] = buffer.write_and_return(std::move(frame3)); // NOLINT(performance-move-const-arg)
53 1 : BOOST_REQUIRE_EQUAL(result3, false);
54 1 : BOOST_REQUIRE_EQUAL(written3, written2);
55 1 : }
56 :
57 2 : BOOST_AUTO_TEST_CASE(datahandlinglibs_SkiplistLatencyBufferModel_write)
58 : {
59 1 : SkipListLatencyBufferModel<ReadoutType> buffer;
60 :
61 1 : ReadoutType frame1;
62 1 : frame1.timestamp = 2;
63 1 : frame1.another_key = 1;
64 1 : BOOST_REQUIRE_EQUAL(buffer.write(std::move(frame1)), true);
65 :
66 : // Duplicate returns false
67 1 : ReadoutType frame2;
68 1 : frame2.timestamp = 2;
69 1 : frame2.another_key = 1;
70 1 : BOOST_REQUIRE_EQUAL(buffer.write(std::move(frame2)), false);
71 1 : }
72 :
73 : BOOST_AUTO_TEST_SUITE_END()
|