1919
2020# generate a test name based on the file name
2121function (espresso_unit_test_make_name)
22- cmake_parse_arguments (TEST "" "SRC;NAME" "" ${ARGN} )
22+ cmake_parse_arguments (TEST "" "SRC;NAME;SUFFIX " "" ${ARGN} )
2323 if (NOT DEFINED TEST_NAME)
2424 cmake_path(GET TEST_SRC STEM TEST_NAME)
2525 set (TEST_NAME ${TEST_NAME} PARENT_SCOPE)
26+ if (DEFINED TEST_SUFFIX)
27+ set (TEST_NAME ${TEST_NAME} _${TEST_SUFFIX} PARENT_SCOPE)
28+ endif ()
29+ elseif (DEFINED TEST_SUFFIX)
30+ message (FATAL_ERROR "Cannot provide both a NAME and SUFFIX (test: ${TEST_SRC} )" )
2631 endif ()
2732endfunction ()
2833
2934# create the executable of a unit test
3035function (espresso_unit_test_executable)
31- cmake_parse_arguments (TEST "" "SRC;NAME;NUM_PROC;NUM_THREADS" "DEPENDS" ${ARGN} )
32- espresso_unit_test_make_name(SRC ${TEST_SRC} NAME ${TEST_NAME} )
33- if (${TEST_SRC} MATCHES ".*\. cu$" )
34- espresso_add_gpu_executable(${TEST_NAME} ${TEST_SRC} )
35- else ()
36- add_executable (${TEST_NAME} ${TEST_SRC} )
36+ cmake_parse_arguments (TEST "" "SRC;NAME;SUFFIX;NUM_PROC;NUM_THREADS" "DEPENDS" ${ARGN} )
37+ if (DEFINED TEST_UNPARSED_ARGUMENTS)
38+ message (FATAL_ERROR "Cannot parse arguments ${TEST_UNPARSED_ARGUMENTS} " )
3739 endif ()
40+ espresso_unit_test_make_name(${ARGV} )
41+ add_executable (${TEST_NAME} ${TEST_SRC} )
3842 espresso_set_common_target_properties(${TEST_NAME} )
3943 # Build tests only when testing
4044 set_target_properties (${TEST_NAME} PROPERTIES EXCLUDE_FROM_ALL ON )
41- target_link_libraries (${TEST_NAME} PRIVATE Boost::unit_test_framework)
42- if (TEST_DEPENDS)
43- target_link_libraries (${TEST_NAME} PRIVATE ${TEST_DEPENDS} )
44- endif ()
45+ target_link_libraries (
46+ ${TEST_NAME} PRIVATE Boost::unit_test_framework espresso::config
47+ espresso::compiler_flags espresso::tests::compiler_flags ${TEST_DEPENDS} )
4548 target_include_directories (${TEST_NAME} PRIVATE ${CMAKE_SOURCE_DIR} /src/core)
46- if (${TEST_SRC} MATCHES ".*\. cu$" )
47- target_link_libraries (${TEST_NAME} PRIVATE espresso::config CUDA::cudart)
48- else ()
49- target_link_libraries (${TEST_NAME} PRIVATE espresso::config espresso::cpp_flags espresso::tests::cpp_flags)
50- endif ()
5149 if (ESPRESSO_BUILD_WITH_CUDA)
5250 espresso_add_cuda_rpaths(${TEST_NAME} ) # for GPU-aware MPI vendors
5351 endif ()
5452endfunction ()
5553
5654# register the executable of a unit test in the CTest suite
5755function (espresso_unit_test_register)
58- cmake_parse_arguments (TEST "" "SRC;NAME;NUM_PROC;NUM_THREADS;TARGET" "DEPENDS" ${ARGN} )
59- espresso_unit_test_make_name(SRC ${TEST_SRC} NAME ${TEST_NAME} )
56+ cmake_parse_arguments (TEST "" "SRC;NAME;SUFFIX;NUM_PROC;NUM_THREADS;TARGET" "DEPENDS" ${ARGN} )
57+ if (DEFINED TEST_UNPARSED_ARGUMENTS)
58+ message (FATAL_ERROR "Cannot parse arguments ${TEST_UNPARSED_ARGUMENTS} " )
59+ endif ()
60+ espresso_unit_test_make_name(${ARGV} )
6061 if (NOT DEFINED TEST_TARGET)
6162 set (TEST_TARGET ${TEST_NAME} )
6263 endif ()
@@ -66,8 +67,8 @@ function(espresso_unit_test_register)
6667 set (TEST_NUM_PROC ${ESPRESSO_TEST_NP} )
6768 endif ()
6869 espresso_set_mpiexec_tmpdir(${TEST_NAME} )
69- add_test (NAME ${TEST_NAME} COMMAND ${MPIEXEC} ${ESPRESSO_MPIEXEC_PREFLAGS }
70- ${MPIEXEC_NUMPROC_FLAG } ${TEST_NUM_PROC } ${MPIEXEC_PREFLAGS }
70+ add_test (NAME ${TEST_NAME} COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS }
71+ ${ESPRESSO_MPIEXEC_PREFLAGS } ${MPIEXEC_NUMPROC_FLAG } ${TEST_NUM_PROC }
7172 ${ESPRESSO_MPIEXEC_TMPDIR} ${CMAKE_CURRENT_BINARY_DIR} /${TEST_TARGET}
7273 ${MPIEXEC_POSTFLAGS} )
7374 else ()
@@ -97,9 +98,11 @@ function(espresso_unit_test_register)
9798 math (EXPR TEST_NUM_CORES "${TEST_NUM_CORES} * ${TEST_NUM_THREADS} " )
9899 endif ()
99100 set_tests_properties (
100- ${TEST_NAME} PROPERTIES ENVIRONMENT "${TEST_ENV_VARIABLES} " PROCESSORS ${TEST_NUM_CORES} )
101+ ${TEST_NAME} PROPERTIES ENVIRONMENT "${TEST_ENV_VARIABLES} "
102+ PROCESSORS ${TEST_NUM_CORES}
103+ LABELS "unit_test" )
101104
102- add_dependencies (check_unit_tests ${TEST_TARGET} )
105+ add_dependencies (unit_tests_executables ${TEST_TARGET} )
103106endfunction ()
104107
105108# create the executable of a unit test and register it in the CTest suite
0 commit comments