LCOV - code coverage report
Current view: top level - fddetdataformats/unittest - DAPHNEFrame_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 100.0 % 52 52
Test Date: 2025-12-21 13:07:08 Functions: 100.0 % 3 3

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

Generated by: LCOV version 2.0-1