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()
|