diff --git a/Framework/Core/CMakeLists.txt b/Framework/Core/CMakeLists.txt index 1aed1f776b775..cefb903c29895 100644 --- a/Framework/Core/CMakeLists.txt +++ b/Framework/Core/CMakeLists.txt @@ -237,6 +237,7 @@ add_executable(o2-test-framework-core test/test_InputSpec.cxx test/test_LogParsingHelpers.cxx test/test_Mermaid.cxx + test/test_MessageSet.cxx test/test_OptionsHelpers.cxx test/test_OverrideLabels.cxx test/test_O2DataModelHelpers.cxx diff --git a/Framework/Core/test/test_MessageSet.cxx b/Framework/Core/test/test_MessageSet.cxx new file mode 100644 index 0000000000000..373cd7c8e5115 --- /dev/null +++ b/Framework/Core/test/test_MessageSet.cxx @@ -0,0 +1,95 @@ +// Copyright 2019-2025 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. + +#include +#include "Framework/MessageSet.h" +#include + +using namespace o2::framework; + +TEST_CASE("MessageSet") { + o2::framework::MessageSet msgSet; + std::vector ptrs; + std::unique_ptr msg(nullptr); + std::unique_ptr msg2(nullptr); + ptrs.emplace_back(std::move(msg)); + ptrs.emplace_back(std::move(msg2)); + msgSet.add([&ptrs](size_t i) -> fair::mq::MessagePtr& { return ptrs[i]; }, 2); + + REQUIRE(msgSet.messages.size() == 2); + REQUIRE(msgSet.messageMap.size() == 1); + REQUIRE(msgSet.pairMap.size() == 1); + REQUIRE(msgSet.messageMap[0].position == 0); + REQUIRE(msgSet.messageMap[0].size == 1); + + REQUIRE(msgSet.pairMap[0].partIndex == 0); + REQUIRE(msgSet.pairMap[0].payloadIndex == 0); +} + +TEST_CASE("MessageSetWithFunction") { + std::vector ptrs; + std::unique_ptr msg(nullptr); + std::unique_ptr msg2(nullptr); + ptrs.emplace_back(std::move(msg)); + ptrs.emplace_back(std::move(msg2)); + o2::framework::MessageSet msgSet([&ptrs](size_t i) -> fair::mq::MessagePtr& { return ptrs[i]; }, 2); + + REQUIRE(msgSet.messages.size() == 2); + REQUIRE(msgSet.messageMap.size() == 1); + REQUIRE(msgSet.pairMap.size() == 1); + REQUIRE(msgSet.messageMap[0].position == 0); + REQUIRE(msgSet.messageMap[0].size == 1); + + REQUIRE(msgSet.pairMap[0].partIndex == 0); + REQUIRE(msgSet.pairMap[0].payloadIndex == 0); +} + +TEST_CASE("MessageSetWithMultipart") { + std::vector ptrs; + std::unique_ptr msg(nullptr); + std::unique_ptr msg2(nullptr); + std::unique_ptr msg3(nullptr); + ptrs.emplace_back(std::move(msg)); + ptrs.emplace_back(std::move(msg2)); + ptrs.emplace_back(std::move(msg3)); + o2::framework::MessageSet msgSet([&ptrs](size_t i) -> fair::mq::MessagePtr& { return ptrs[i]; }, 3); + + REQUIRE(msgSet.messages.size() == 3); + REQUIRE(msgSet.messageMap.size() == 1); + REQUIRE(msgSet.pairMap.size() == 2); + REQUIRE(msgSet.messageMap[0].position == 0); + REQUIRE(msgSet.messageMap[0].size == 2); + + REQUIRE(msgSet.pairMap[0].partIndex == 0); + REQUIRE(msgSet.pairMap[0].payloadIndex == 0); + REQUIRE(msgSet.pairMap[1].partIndex == 0); + REQUIRE(msgSet.pairMap[1].payloadIndex == 1); +} + +TEST_CASE("MessageSetAddPartRef") { + std::vector ptrs; + std::unique_ptr msg(nullptr); + std::unique_ptr msg2(nullptr); + ptrs.emplace_back(std::move(msg)); + ptrs.emplace_back(std::move(msg2)); + PartRef ref {std::move(msg), std::move(msg2)}; + o2::framework::MessageSet msgSet; + msgSet.add(std::move(ref)); + + REQUIRE(msgSet.messages.size() == 2); + REQUIRE(msgSet.messageMap.size() == 1); + REQUIRE(msgSet.pairMap.size() == 1); + REQUIRE(msgSet.messageMap[0].position == 0); + REQUIRE(msgSet.messageMap[0].size == 1); + + REQUIRE(msgSet.pairMap[0].partIndex == 0); + REQUIRE(msgSet.pairMap[0].payloadIndex == 0); +}