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

            Line data    Source code
       1              : /**
       2              :  * @file DAPHNEFrame_test.cxx - Comprehensive unit tests for DAPHNEFrame
       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              : 
      10              : #include "fddetdataformats/DAPHNEFrame.hpp"
      11              : 
      12              : #define BOOST_TEST_MODULE DAPHNEFrame_test // NOLINT
      13              : 
      14              : #include "boost/test/unit_test.hpp"
      15              : 
      16              : #include <algorithm>
      17              : #include <random>
      18              : #include <vector>
      19              : 
      20              : // NOLINTBEGIN(build/unsigned)
      21              : 
      22              : BOOST_AUTO_TEST_SUITE(DAPHNEFrame_test)
      23              : 
      24            2 : BOOST_AUTO_TEST_CASE(DAPHNEFrame_AllFieldsTest)
      25              : {
      26            1 :   constexpr int n_adcs = 320;
      27            1 :   constexpr int n_peaks = 5;
      28              : 
      29            1 :   std::random_device rd;
      30            1 :   std::mt19937 gen(rd());
      31            1 :   std::uniform_int_distribution<uint16_t> adc_dist(1, (1 << 14) - 1);
      32            1 :   std::uniform_int_distribution<uint16_t> u10bit(0, 0x3FF);
      33            1 :   std::uniform_int_distribution<uint16_t> u9bit(0, 0x1FF);
      34            1 :   std::uniform_int_distribution<uint16_t> u4bit(0, 0xF);
      35            1 :   std::uniform_int_distribution<uint32_t> u23bit(0, 0x7FFFFF);
      36            1 :   std::uniform_int_distribution<uint16_t> u14bit(0, 0x3FFF);
      37            1 :   std::uniform_int_distribution<uint8_t> u1bit(0, 1);
      38              : 
      39            1 :   dunedaq::fddetdataformats::DAPHNEFrame frame{};
      40              : 
      41              :   // ─── Test ADC Values ──────────────────────────────────────────────
      42            1 :   std::vector<uint16_t> adcs(n_adcs);
      43          321 :   std::generate(adcs.begin(), adcs.end(), [&]() { return adc_dist(gen); });
      44              : 
      45          321 :   for (int i = 0; i < n_adcs; ++i)
      46          320 :     frame.set_adc(i, adcs[i]);
      47              : 
      48            1 :   frame.set_adc(0, adcs[0]);
      49              : 
      50          321 :   for (int i = 0; i < n_adcs; ++i)
      51          320 :     BOOST_CHECK_EQUAL(frame.get_adc(i), adcs[i]);
      52              : 
      53              :   // ─── Test Header ──────────────────────────────────────────────────
      54            1 :   frame.set_channel(17);
      55            1 :   frame.header.algorithm_id = 9;
      56            1 :   frame.header.trigger_sample_value = 0xFACE;
      57            1 :   frame.header.threshold = 0xBEEF;
      58            1 :   frame.header.baseline = 0xABCD;
      59              : 
      60            1 :   BOOST_CHECK_EQUAL(frame.get_channel(), 17);
      61            1 :   BOOST_CHECK_EQUAL(frame.header.algorithm_id, 9);
      62            1 :   BOOST_CHECK_EQUAL(frame.header.trigger_sample_value, 0xFACE);
      63            1 :   BOOST_CHECK_EQUAL(frame.header.threshold, 0xBEEF);
      64            1 :   BOOST_CHECK_EQUAL(frame.header.get_baseline(), 0xABCD);
      65              : 
      66              :   // ─── Test Trailer ─────────────────────────────────────────────────
      67            6 :   for (int peak = 0; peak < n_peaks; ++peak) {
      68            5 :     uint8_t num_subpeaks = u4bit(gen);
      69            5 :     uint8_t found = u1bit(gen);
      70            5 :     uint32_t adc_integral = u23bit(gen);
      71            5 :     uint16_t adc_max = u14bit(gen);
      72            5 :     uint16_t sample_peak = u9bit(gen);
      73            5 :     uint16_t tob = u9bit(gen);
      74            5 :     uint16_t sob = u10bit(gen);
      75              : 
      76            5 :     frame.peaks_data.set_num_subpeaks(num_subpeaks, peak);
      77            5 :     frame.peaks_data.set_found(found, peak);
      78            5 :     frame.peaks_data.set_adc_integral(adc_integral, peak);
      79            5 :     frame.peaks_data.set_adc_max(adc_max, peak);
      80            5 :     frame.peaks_data.set_sample_max(sample_peak, peak);
      81            5 :     frame.peaks_data.set_samples_over_baseline(tob, peak);
      82            5 :     frame.peaks_data.set_sample_start(sob, peak);
      83              : 
      84            5 :     BOOST_CHECK_EQUAL(frame.peaks_data.get_num_subpeaks(peak), num_subpeaks);
      85            5 :     BOOST_CHECK_EQUAL(frame.peaks_data.is_found(peak), found);
      86            5 :     BOOST_CHECK_EQUAL(frame.peaks_data.get_adc_integral(peak), adc_integral);
      87            5 :     BOOST_CHECK_EQUAL(frame.peaks_data.get_adc_max(peak), adc_max);
      88            5 :     BOOST_CHECK_EQUAL(frame.peaks_data.get_sample_max(peak), sample_peak);
      89            5 :     BOOST_CHECK_EQUAL(frame.peaks_data.get_samples_over_baseline(peak), tob);
      90            5 :     BOOST_CHECK_EQUAL(frame.peaks_data.get_sample_start(peak), sob);
      91              :   }
      92            1 : }
      93              : 
      94              : BOOST_AUTO_TEST_SUITE_END()
      95              : 
      96              : // NOLINTEND(build/unsigned)
        

Generated by: LCOV version 2.0-1