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

            Line data    Source code
       1              : /**
       2              :  * @file FragmentHeader_test.cxx FragmentHeader class Unit Tests
       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              : #include "daqdataformats/FragmentHeader.hpp"
      10              : 
      11              : /**
      12              :  * @brief Name of this test module
      13              :  */
      14              : #define BOOST_TEST_MODULE FragmentHeader_test // NOLINT
      15              : 
      16              : #include "boost/test/unit_test.hpp"
      17              : 
      18              : #include <string>
      19              : #include <vector>
      20              : 
      21              : using namespace dunedaq::daqdataformats;
      22              : 
      23              : BOOST_AUTO_TEST_SUITE(FragmentHeader_test)
      24              : 
      25            2 : BOOST_AUTO_TEST_CASE(FragmentTypeConversion)
      26              : {
      27            1 :   BOOST_REQUIRE_EQUAL(static_cast<fragment_type_t>(string_to_fragment_type("WIB")),
      28              :                       static_cast<fragment_type_t>(FragmentType::kWIB));
      29            1 :   BOOST_REQUIRE_EQUAL(fragment_type_to_string(FragmentType::kWIB), "WIB");
      30              : 
      31            1 :   auto type_map = get_fragment_type_names();
      32              :   // sanity check
      33           21 :   for (auto& type_pair : type_map) {
      34           20 :     BOOST_TEST_MESSAGE("Fragment type" << int(type_pair.first) << " " << type_pair.second << " with converters: " << int(string_to_fragment_type(type_pair.second)) << " " << fragment_type_to_string(type_pair.first));
      35           20 :     BOOST_REQUIRE_EQUAL(static_cast<fragment_type_t>(string_to_fragment_type(type_pair.second)),
      36              :                         static_cast<fragment_type_t>(type_pair.first));
      37           20 :     BOOST_REQUIRE_EQUAL(fragment_type_to_string(type_pair.first), type_pair.second);
      38              :   }
      39              : 
      40            1 :   BOOST_REQUIRE_EQUAL(static_cast<fragment_type_t>(string_to_fragment_type("thisIsABadFragmentType")),
      41              :                       static_cast<fragment_type_t>(FragmentType::kUnknown));
      42            1 :   BOOST_REQUIRE_EQUAL(fragment_type_to_string(static_cast<FragmentType>(-10)), "Unknown");
      43            1 : }
      44              : 
      45              : /**
      46              :  * @brief Test that FragmentHeader::operator<< functions as expected
      47              :  */
      48            2 : BOOST_AUTO_TEST_CASE(StreamOperator)
      49              : {
      50            1 :   FragmentHeader header;
      51            1 :   header.size = sizeof(FragmentHeader) + 4;
      52            1 :   header.trigger_number = 1;
      53            1 :   header.trigger_timestamp = 2;
      54            1 :   header.run_number = 3;
      55            1 :   header.sequence_number = 4;
      56            1 :   header.detector_id = 1;
      57            1 :   header.element_id = { SourceID::Subsystem::kTrigger, 0x7766 };
      58              : 
      59            1 :   std::ostringstream ostr;
      60            1 :   ostr << header;
      61            1 :   std::string output = ostr.str();
      62            1 :   BOOST_TEST_MESSAGE("Stream operator: " << output);
      63              : 
      64            1 :   BOOST_REQUIRE(!output.empty());
      65            1 :   auto pos = output.find("trigger_number: 1,");
      66            1 :   BOOST_REQUIRE(pos != std::string::npos);
      67            1 :   pos = output.find("trigger_timestamp: 2,");
      68            1 :   BOOST_REQUIRE(pos != std::string::npos);
      69            1 :   pos = output.find("run_number: 3,");
      70            1 :   BOOST_REQUIRE(pos != std::string::npos);
      71              : 
      72            1 :   std::istringstream iss(ostr.str());
      73            1 :   FragmentHeader header_from_stream;
      74            1 :   iss >> header_from_stream;
      75            1 :   BOOST_REQUIRE_EQUAL(header_from_stream.run_number, header.run_number);
      76            1 :   BOOST_REQUIRE_EQUAL(header_from_stream.trigger_number, header.trigger_number);
      77            1 :   BOOST_REQUIRE_EQUAL(header_from_stream.trigger_timestamp, header.trigger_timestamp);
      78            1 :   BOOST_REQUIRE_EQUAL(header_from_stream.sequence_number, header.sequence_number);
      79            1 :   BOOST_REQUIRE_EQUAL(header_from_stream.detector_id, header.detector_id);
      80            1 :   BOOST_REQUIRE_EQUAL(header_from_stream.element_id, header.element_id);
      81            1 : }
      82              : 
      83              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1