diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt index a3f98e7075ca28c7c28ef8bc6c4b87121063795f..b7d83336ca0b9830ac92c5ebc693e474bbc23521 100644 --- a/algo/CMakeLists.txt +++ b/algo/CMakeLists.txt @@ -1,6 +1,5 @@ add_subdirectory (data) - - +add_subdirectory (test) # Create a library libCbmAlgo diff --git a/algo/test/CMakeLists.txt b/algo/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..04f7c81c4e90aac3161c342be29e66822fbfe607 --- /dev/null +++ b/algo/test/CMakeLists.txt @@ -0,0 +1,73 @@ +Macro(CreateGTestExeAndAddTest _testname _includeDirs _linkDirs _sources _dependencies _testdepend) + + Include_Directories(SYSTEM "${_includeDirs}") + Link_Directories(${_linkDirs}) + + Add_Executable(${_testname} ${_sources}) + if(CBM_LOCAL_GTEST) + Add_Dependencies(${_testname} GTEST) + endif() + Target_Link_Libraries(${_testname} ${_dependencies}) + Gen_Exe_Script(${_testname}) + string(REPLACE ${PROJECT_SOURCE_DIR} + ${PROJECT_BINARY_DIR} new_path ${CMAKE_CURRENT_SOURCE_DIR} + ) + Add_Test(${_testname} ${new_path}/${_testname}.sh) + If(NOT ${_testdepend} STREQUAL "") + Set_Tests_Properties(${_testname} PROPERTIES DEPENDS ${_testdepend}) + EndIf() +EndMacro(CreateGTestExeAndAddTest) + +FIND_PACKAGE(Threads REQUIRED) + +Set(INCLUDE_DIRECTORIES + ${CBMBASE_DIR} + ${CBMDATA_DIR} + ${CBMDATA_DIR}/base + ${CBMDATA_DIR}/global + ${CBMDATA_DIR}/sts + ${CBMDATA_DIR}/tof + ${CBMDATA_DIR}/rich + ${CBMDATA_DIR}/much + ${CBMDATA_DIR}/psd + ${CBMDATA_DIR}/trd + ${CMAKE_SOURCE_DIR}/external/ipc/ipc/lib/fles_ipc + ${CMAKE_SOURCE_DIR}/algo + ${CMAKE_SOURCE_DIR}/algo/trigger + ${CMAKE_SOURCE_DIR}/algo/evbuild + ${BASE_INCLUDE_DIRECTORIES} + ${GTEST_INCLUDE_DIR} +) + +MESSAGE("FAIRROOT_LIBRARY_DIR: ${FAIRROOT_LIBRARY_DIR}") +Set(LINK_DIRECTORIES + ${FAIRROOT_LIBRARY_DIR} +) + +Set(DEPENDENCIES + ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + CbmData +) + +if (CMAKE_SYSTEM_NAME MATCHES Linux) + set(DEPENDENCIES ${DEPENDENCIES} rt) +endif() + +Set(TimeClusterTriggerSources + ${CMAKE_SOURCE_DIR}/algo/trigger/TimeClusterTrigger.cxx + _GTestTimeClusterTrigger.cxx +) + +CreateGTestExeAndAddTest(_GTestTimeClusterTrigger "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}" + "${TimeClusterTriggerSources}" "${DEPENDENCIES}" "") + +Set(EventBuilderSources + ${CMAKE_SOURCE_DIR}/algo/evbuild/EventBuilder.cxx + _GTestEventBuilder.cxx +) + +CreateGTestExeAndAddTest(_GTestEventBuilder "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}" + "${EventBuilderSources}" "${DEPENDENCIES}" "") + + diff --git a/algo/test/_GTestEventBuilder.cxx b/algo/test/_GTestEventBuilder.cxx new file mode 100644 index 0000000000000000000000000000000000000000..a6a52d53bf952fed372f7b26a2e609fbc87ac08c --- /dev/null +++ b/algo/test/_GTestEventBuilder.cxx @@ -0,0 +1,39 @@ +/* Copyright (C) 2016-2017 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: Dominik Smith [committer] */ + +#include "EventBuilder.h" +#include "gtest/gtest-spi.h" +#include "gtest/gtest.h" + +TEST(_GTestEventBuilder, CheckEventBuilderAlgorithmSimple) +{ + SCOPED_TRACE("CheckEventBuilderAlgorithSimple"); + + cbm::algo::EventBuilder evbuild; + evbuild.SetTriggerWindow(ECbmModuleId::kSts, -45.0, 45.0); + + CbmDigiTimeslice tsIn; + const uint nInput = 1000; + const double inputSpacing = 10.0; + + for (uint i = 0; i < nInput; i++) { + tsIn.fData.fSts.fDigis.push_back(CbmStsDigi(268502050, 1, i * inputSpacing, 1.0)); + } + + std::vector<double> triggerIn; + const uint nTrigger = 99; + const double triggerSpacing = 100.0; + + for (uint i = 1; i <= nTrigger; i++) { + triggerIn.push_back(i * triggerSpacing); + } + + std::vector<CbmDigiEvent> eventsOut = evbuild(tsIn, triggerIn); + EXPECT_EQ(eventsOut.size(), nTrigger); + + for (uint i = 0; i < eventsOut.size(); i++) { + EXPECT_EQ(eventsOut[i].fData.fSts.fDigis.size(), 9); + EXPECT_EQ(eventsOut[i].fTime, triggerIn[i]); + } +} diff --git a/algo/test/_GTestTimeClusterTrigger.cxx b/algo/test/_GTestTimeClusterTrigger.cxx new file mode 100644 index 0000000000000000000000000000000000000000..7113b5f4c78042291be0e6226daf94804f89d8e8 --- /dev/null +++ b/algo/test/_GTestTimeClusterTrigger.cxx @@ -0,0 +1,33 @@ +/* Copyright (C) 2016-2017 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt + SPDX-License-Identifier: GPL-3.0-only + Authors: Dominik Smith [committer] */ + +#include "TimeClusterTrigger.h" + +#include "gtest/gtest-spi.h" +#include "gtest/gtest.h" + +TEST(_GTestTimeClusterTrigger, CheckTriggerAlgorithmSimple) +{ + SCOPED_TRACE("CheckTriggerAlgorithSimple"); + + cbm::algo::TimeClusterTrigger trigger; + std::vector<double> dataIn; + + const uint nInput = 1000.; + const double inputSpacing = 10.0; + const double deadTime = 5.; + const double windowSize = 1000.; + const uint nMinNumber = 100; + + for (uint i = 0; i < nInput; i++) { + dataIn.push_back(i * inputSpacing); + } + + std::vector<double> dataOut = trigger(dataIn, windowSize, nMinNumber, deadTime); + EXPECT_EQ(dataOut.size(), 10); + + for (uint i = 0; i < dataOut.size(); i++) { + EXPECT_EQ(dataOut[i], 495. + i * 1000.); + } +}