LCOV - code coverage report
Current view: top level - fddetdataformats/unittest - DAPHNEEthFrame_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 100.0 % 59 59
Test Date: 2026-05-24 15:29:04 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /**
       2              :  * @file DAPHNEEthFrame_test.cxx DAPHNEEthFrame class Unit Tests
       3              :  *
       4              :  * This is part of the DUNE DAQ Application Framework, copyright 2022.
       5              :  * Licensing/copyright details are in the COPYING file that you should have
       6              :  * received with this code.
       7              :  */
       8              : 
       9              : #include "fddetdataformats/DAPHNEEthFrame.hpp"
      10              : 
      11              : #define BOOST_TEST_MODULE DAPHNEEthFrame_test // NOLINT
      12              : 
      13              : #include "boost/test/unit_test.hpp"
      14              : 
      15              : #include <random>
      16              : #include <vector>
      17              : 
      18              : // NOLINTBEGIN(build/unsigned)
      19              : 
      20              : BOOST_AUTO_TEST_SUITE(DAPHNEEthFrame_test)
      21              : 
      22            2 : BOOST_AUTO_TEST_CASE(DAPHNEEthFrame_ADCDataMutators)
      23              : {
      24            1 :   using dunedaq::fddetdataformats::DAPHNEEthFrame;
      25              : 
      26            1 :   std::random_device dev;
      27            1 :   std::mt19937 rng(dev());
      28            1 :   std::uniform_int_distribution<uint16_t> dist(0, (1 << DAPHNEEthFrame::s_bits_per_adc) - 1);
      29              : 
      30            1 :   std::vector<uint16_t> adcs(DAPHNEEthFrame::s_num_adcs);
      31         1025 :   for (auto& adc : adcs) {
      32         1024 :     adc = dist(rng);
      33              :   }
      34              : 
      35            1 :   DAPHNEEthFrame frame{};
      36              : 
      37         1025 :   for (int i = 0; i < DAPHNEEthFrame::s_num_adcs; ++i) {
      38         1024 :     frame.set_adc(i, adcs[i]);
      39              :   }
      40              : 
      41         1025 :   for (int i = 0; i < DAPHNEEthFrame::s_num_adcs; ++i) {
      42         1024 :     BOOST_REQUIRE_EQUAL(frame.get_adc(i), adcs[i]);
      43              :   }
      44              : 
      45            1 :   frame.set_adc(0, adcs[0]);
      46              : 
      47         1025 :   for (int i = 0; i < DAPHNEEthFrame::s_num_adcs; ++i) {
      48         1024 :     BOOST_REQUIRE_EQUAL(frame.get_adc(i), adcs[i]);
      49              :   }
      50            1 : }
      51              : 
      52            2 : BOOST_AUTO_TEST_CASE(DAPHNEEthFrame_IndexAndValueBounds)
      53              : {
      54            1 :   using dunedaq::fddetdataformats::DAPHNEEthFrame;
      55              : 
      56            1 :   DAPHNEEthFrame frame{};
      57              : 
      58            1 :   BOOST_CHECK_THROW(frame.get_adc(-1), std::out_of_range);
      59            1 :   BOOST_CHECK_THROW(frame.get_adc(DAPHNEEthFrame::s_num_adcs), std::out_of_range);
      60              : 
      61            1 :   BOOST_CHECK_THROW(frame.set_adc(-1, 123), std::out_of_range);
      62            1 :   BOOST_CHECK_THROW(frame.set_adc(DAPHNEEthFrame::s_num_adcs, 123), std::out_of_range);
      63            1 :   BOOST_CHECK_THROW(frame.set_adc(0, static_cast<uint16_t>(1 << DAPHNEEthFrame::s_bits_per_adc)), std::out_of_range);
      64              : 
      65            1 :   BOOST_CHECK_NO_THROW(frame.set_adc(0, static_cast<uint16_t>((1 << DAPHNEEthFrame::s_bits_per_adc) - 1)));
      66            1 :   BOOST_CHECK_EQUAL(frame.get_adc(0), static_cast<uint16_t>((1 << DAPHNEEthFrame::s_bits_per_adc) - 1));
      67            1 : }
      68              : 
      69            2 : BOOST_AUTO_TEST_CASE(DAPHNEEthFrame_BitPackingBoundaryIsolation)
      70              : {
      71            1 :   using dunedaq::fddetdataformats::DAPHNEEthFrame;
      72              : 
      73            1 :   DAPHNEEthFrame frame{};
      74            1 :   constexpr auto max_adc = static_cast<uint16_t>((1u << DAPHNEEthFrame::s_bits_per_adc) - 1u);
      75              : 
      76            1 :   constexpr int boundary_adc = 4;
      77            1 :   frame.set_adc(boundary_adc - 1, 0x0000u);
      78            1 :   frame.set_adc(boundary_adc, 0x0000u);
      79            1 :   frame.set_adc(boundary_adc + 1, 0x0000u);
      80              : 
      81            1 :   frame.set_adc(boundary_adc, 0x2AAAu);
      82            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc - 1), 0x0000u);
      83            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc), 0x2AAAu);
      84            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc + 1), 0x0000u);
      85              : 
      86            1 :   frame.set_adc(boundary_adc - 1, max_adc);
      87            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc - 1), max_adc);
      88            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc), 0x2AAAu);
      89            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc + 1), 0x0000u);
      90              : 
      91            1 :   frame.set_adc(boundary_adc + 1, 0x1555u);
      92            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc - 1), max_adc);
      93            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc), 0x2AAAu);
      94            1 :   BOOST_CHECK_EQUAL(frame.get_adc(boundary_adc + 1), 0x1555u);
      95            1 : }
      96              : 
      97            2 : BOOST_AUTO_TEST_CASE(DAPHNEEthFrame_MetadataMutators)
      98              : {
      99            1 :   using dunedaq::fddetdataformats::DAPHNEEthFrame;
     100              : 
     101            1 :   DAPHNEEthFrame frame{};
     102              : 
     103            1 :   frame.set_timestamp(0x0123456789ABCDEFuLL);
     104            1 :   BOOST_CHECK_EQUAL(frame.get_timestamp(), 0x0123456789ABCDEFuLL);
     105              : 
     106            1 :   frame.set_channel(0);
     107            1 :   BOOST_CHECK_EQUAL(frame.get_channel(), 0);
     108              : 
     109            1 :   frame.set_channel(255);
     110            1 :   BOOST_CHECK_EQUAL(frame.get_channel(), 255);
     111            1 : }
     112              : 
     113              : BOOST_AUTO_TEST_SUITE_END()
     114              : 
     115              : // NOLINTEND(build/unsigned)
        

Generated by: LCOV version 2.0-1