diff --git a/.cmake-format.yaml b/.cmake-format.yaml index 52d892d02be32f96be80cdc491d9880a89a23159..04c795a59f8e202e7fabd0b573e81beb4603715d 100644 --- a/.cmake-format.yaml +++ b/.cmake-format.yaml @@ -57,28 +57,6 @@ parse: RUNTIME: 1 WRAPPER: + - meshtest: - pargs: - nargs: "*" - flags: - - NONE - spelling: MeshTest - kwargs: - EXECUTABLE: 1 - PATH: 1 - NAME: 1 - WRAPPER: 1 - RUNTIME: 1 - WORKING_DIRECTORY: 1 - EXECUTABLE_ARGS: + - DATA: + - DIFF_DATA: - pargs: - tags: - - cmdline - WRAPPER_ARGS: + - REQUIREMENTS: + - cpmaddpackage: pargs: nargs: "*" diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake index 6d177aa70253eba93fef4662d8eac95ba97ff4e5..b7c6515136c42f4ba12385bd826489e1bf0544b1 100644 --- a/scripts/cmake/test/AddTest.cmake +++ b/scripts/cmake/test/AddTest.cmake @@ -12,7 +12,7 @@ # EXECUTABLE_ARGS <arguments> # WRAPPER <time|mpirun> # optional # WRAPPER_ARGS <arguments> # optional -# TESTER <diff|vtkdiff|gmldiff|memcheck> # optional +# TESTER <diff|vtkdiff|vtkdiff-mesh|gmldiff|memcheck> # optional # TESTER_ARGS <argument> # optional # REQUIREMENTS # optional simple boolean expression which has to be true to # enable the test, e.g. @@ -134,8 +134,7 @@ function(AddTest) endforeach() endif() - # --- Implement wrappers --- - # check if exe is part of build + # check requirements, disable if not met if(NOT TARGET ${AddTest_EXECUTABLE}) set(DISABLED_TESTS_LOG "${DISABLED_TESTS_LOG}\nTest exe ${AddTest_EXECUTABLE} not built! Disabling test ${AddTest_NAME}." @@ -143,7 +142,6 @@ function(AddTest) ) return() endif() - # check requirements, disable if not met if(${AddTest_REQUIREMENTS}) message(DEBUG "Enabling test ${AddTest_NAME}.") else() @@ -154,6 +152,7 @@ function(AddTest) return() endif() + # --- Implement wrappers --- if(AddTest_WRAPPER STREQUAL "time") if(TIME_TOOL_PATH) set(WRAPPER_COMMAND time) @@ -192,6 +191,9 @@ function(AddTest) if(AddTest_TESTER STREQUAL "vtkdiff" AND NOT TARGET vtkdiff) return() endif() + if(AddTest_TESTER STREQUAL "vtkdiff-mesh" AND NOT TARGET vtkdiff) + return() + endif() if(AddTest_TESTER STREQUAL "xdmfdiff" AND NOT TARGET xdmfdiff) return() endif() @@ -215,7 +217,7 @@ function(AddTest) endif() endif() - if((AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER STREQUAL "vtkdiff" + if((AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER MATCHES "vtkdiff" OR AddTest_TESTER STREQUAL "xdmfdiff") AND NOT AddTest_DIFF_DATA ) message(FATAL_ERROR "AddTest(): ${AddTest_NAME} - no DIFF_DATA given!") @@ -224,7 +226,7 @@ function(AddTest) if(AddTest_TESTER STREQUAL "diff") set(SELECTED_DIFF_TOOL_PATH ${DIFF_TOOL_PATH}) set(TESTER_ARGS "-sbB") - elseif(AddTest_TESTER STREQUAL "vtkdiff") + elseif(AddTest_TESTER MATCHES "vtkdiff") set(SELECTED_DIFF_TOOL_PATH $<TARGET_FILE:vtkdiff>) elseif(AddTest_TESTER STREQUAL "xdmfdiff") set(SELECTED_DIFF_TOOL_PATH $<TARGET_FILE:xdmfdiff>) @@ -331,6 +333,34 @@ Use six arguments version of AddTest with absolute and relative tolerances" "For vtkdiff tester the number of diff data arguments must be a multiple of six." ) endif() + elseif(AddTest_TESTER STREQUAL "vtkdiff-mesh") + list(LENGTH AddTest_DIFF_DATA DiffDataLength) + math(EXPR DiffDataLengthMod3 "${DiffDataLength} % 3") + if(${DiffDataLengthMod3} EQUAL 0) + math(EXPR DiffDataLastIndex "${DiffDataLength}-1") + foreach(DiffDataIndex RANGE 0 ${DiffDataLastIndex} 4) + list(GET AddTest_DIFF_DATA "${DiffDataIndex}" + REFERENCE_VTK_FILE + ) + math(EXPR DiffDataAuxIndex "${DiffDataIndex}+1") + list(GET AddTest_DIFF_DATA "${DiffDataAuxIndex}" VTK_FILE) + math(EXPR DiffDataAuxIndex "${DiffDataIndex}+2") + list(GET AddTest_DIFF_DATA "${DiffDataAuxIndex}" ABS_TOLERANCE) + + list( + APPEND + TESTER_COMMAND + "${SELECTED_DIFF_TOOL_PATH} -m \ + ${AddTest_SOURCE_PATH}/${REFERENCE_VTK_FILE} \ + ${AddTest_BINARY_PATH}/${VTK_FILE} \ + --abs ${ABS_TOLERANCE}" + ) + endforeach() + else() + message(FATAL_ERROR "The number of diff data arguments must be a + multiple of three: expected.vtu output.vtu absolute_tolerance." + ) + endif() elseif(AddTest_TESTER STREQUAL "gmldiff") list(LENGTH AddTest_DIFF_DATA DiffDataLength) math(EXPR DiffDataLastIndex "${DiffDataLength}-1") @@ -423,7 +453,7 @@ Use six arguments version of AddTest with absolute and relative tolerances" if(NOT (TEST ${AddTest_DEPENDS} OR TARGET ${AddTest_DEPENDS})) message( FATAL_ERROR - "AddTest ${AddTest_Name}: dependency ${AddTest_DEPENDS} does not exist!" + "AddTest ${TEST_NAME}: dependency ${AddTest_DEPENDS} does not exist!" ) endif() set_tests_properties(${TEST_NAME} PROPERTIES DEPENDS ${AddTest_DEPENDS}) diff --git a/scripts/cmake/test/MeshTest.cmake b/scripts/cmake/test/MeshTest.cmake deleted file mode 100644 index 1dc89efcc8ab9f80dc8d5596ce4aa23d82530c81..0000000000000000000000000000000000000000 --- a/scripts/cmake/test/MeshTest.cmake +++ /dev/null @@ -1,219 +0,0 @@ -# -# MeshTest -# ------- -# -# ~~~ -# MeshTest( -# NAME <name of the the test> -# PATH <working directory> # relative to SourceDir/Tests/Data -# EXECUTABLE <executable target> # optional, defaults to ogs -# EXECUTABLE_ARGS <arguments> -# WRAPPER <time|mpirun> # optional -# WRAPPER_ARGS <arguments> # optional -# REQUIREMENTS # optional simple boolean expression which has to be true to -# enable the test, e.g. -# OGS_USE_PETSC AND (FOO OR BAR) -# RUNTIME <in seconds> # optional for optimizing ctest duration -# values should be taken from envinf1 serial job -# ) -# ~~~ -# cmake-lint: disable=C0103,R0912,R0915 -function(MeshTest) - if(NOT OGS_BUILD_TESTING) - return() - endif() - # parse arguments - set(options NONE) - set(oneValueArgs EXECUTABLE PATH NAME WRAPPER RUNTIME WORKING_DIRECTORY) - set(multiValueArgs EXECUTABLE_ARGS DATA DIFF_DATA WRAPPER_ARGS REQUIREMENTS) - cmake_parse_arguments( - MeshTest "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} - ) - - set(MeshTest_SOURCE_PATH "${Data_SOURCE_DIR}/${MeshTest_PATH}") - set(MeshTest_BINARY_PATH "${Data_BINARY_DIR}/${MeshTest_PATH}") - file(MAKE_DIRECTORY ${MeshTest_BINARY_PATH}) - file(TO_NATIVE_PATH "${MeshTest_BINARY_PATH}" MeshTest_BINARY_PATH_NATIVE) - set(MeshTest_STDOUT_FILE_PATH - "${MeshTest_BINARY_PATH}/${MeshTest_NAME}_stdout.log" - ) - - # set defaults - if(NOT DEFINED MeshTest_REQUIREMENTS) - set(MeshTest_REQUIREMENTS TRUE) - endif() - set(timeout ${ogs.ctest.large_runtime}) - if(DEFINED MeshTest_RUNTIME) - math(EXPR timeout "${MeshTest_RUNTIME} * 3") - else() - set(MeshTest_RUNTIME 1) - endif() - if(NOT DEFINED MeshTest_WORKING_DIRECTORY) - set(MeshTest_WORKING_DIRECTORY ${MeshTest_BINARY_PATH}) - endif() - - if(DEFINED OGS_EXCLUDE_CTESTS) - foreach(regexp ${OGS_EXCLUDE_CTESTS}) - if("${MeshTest_NAME}" MATCHES "${regexp}") - message( - STATUS "Disabled by OGS_EXCLUDE_CTESTS: ${MeshTest_NAME}" - ) - return() - endif() - endforeach() - endif() - - # --- Implement wrappers --- - # check requirements, disable if not met - if(${MeshTest_REQUIREMENTS}) - # message(STATUS "Enabling test ${MeshTest_NAME}.") - else() - set(DISABLED_TESTS_LOG - "${DISABLED_TESTS_LOG}\nRequirement ${MeshTest_REQUIREMENTS} not met! Disabling test ${MeshTest_NAME}." - CACHE INTERNAL "" - ) - return() - endif() - - if(MeshTest_WRAPPER STREQUAL "time") - if(TIME_TOOL_PATH) - set(WRAPPER_COMMAND time) - else() - set(DISABLED_TESTS_LOG - "${DISABLED_TESTS_LOG}\nDisabling time wrapper for ${MeshTest_NAME} as time exe was not found!" - CACHE INTERNAL "" - ) - set(MeshTest_WRAPPER_ARGS "") - endif() - elseif(MeshTest_WRAPPER STREQUAL "mpirun") - if(MPIRUN_TOOL_PATH) - set(WRAPPER_COMMAND ${MPIRUN_TOOL_PATH}) - else() - message( - STATUS - "ERROR: mpirun was not found but is required for ${MeshTest_NAME}!" - ) - return() - endif() - endif() - - # --- Implement testers --- - if(NOT MeshTest_DIFF_DATA) - message( - FATAL_ERROR "MeshTest(): ${MeshTest_NAME} - no DIFF_DATA given!" - ) - endif() - - string(LENGTH "${MeshTest_DIFF_DATA}" DIFF_DATA_LENGTH) - if(${DIFF_DATA_LENGTH} GREATER 7500) - message( - FATAL_ERROR - "${MeshTest_NAME}: DIFF_DATA to long! Consider using regex-syntax: TODO" - ) - endif() - - set(SELECTED_DIFF_TOOL_PATH $<TARGET_FILE:vtkdiff>) - - list(LENGTH MeshTest_DIFF_DATA DiffDataLength) - math(EXPR DiffDataLengthMod3 "${DiffDataLength} % 3") - if(${DiffDataLengthMod3} EQUAL 0) - math(EXPR DiffDataLastIndex "${DiffDataLength}-1") - foreach(DiffDataIndex RANGE 0 ${DiffDataLastIndex} 4) - list(GET MeshTest_DIFF_DATA "${DiffDataIndex}" REFERENCE_VTK_FILE) - math(EXPR DiffDataAuxIndex "${DiffDataIndex}+1") - list(GET MeshTest_DIFF_DATA "${DiffDataAuxIndex}" VTK_FILE) - math(EXPR DiffDataAuxIndex "${DiffDataIndex}+2") - list(GET MeshTest_DIFF_DATA "${DiffDataAuxIndex}" ABS_TOLERANCE) - - list( - APPEND - TESTER_COMMAND - "${SELECTED_DIFF_TOOL_PATH} -m \ - ${MeshTest_SOURCE_PATH}/${REFERENCE_VTK_FILE} \ - ${MeshTest_BINARY_PATH}/${VTK_FILE} \ - --abs ${ABS_TOLERANCE}" - ) - endforeach() - else() - message(FATAL_ERROR "The number of diff data arguments must be a - multiple of three: expected.vtu output.vtu absolute_tolerance." - ) - endif() - - # ----------- - if(TARGET ${MeshTest_EXECUTABLE}) - set(MeshTest_EXECUTABLE_PARSED $<TARGET_FILE:${MeshTest_EXECUTABLE}>) - else() - set(MeshTest_EXECUTABLE_PARSED ${MeshTest_EXECUTABLE}) - endif() - - set(FILES_TO_DELETE "") - list(APPEND FILES_TO_DELETE "${MeshTest_STDOUT_FILE_PATH}") - foreach(ITEM ${MeshTest_DIFF_DATA}) - if(ITEM MATCHES "^.*\.(vtu|vtk)$") - list(APPEND FILES_TO_DELETE "${ITEM}") - endif() - endforeach() - - # Run the wrapper - if(DEFINED MeshTest_WRAPPER) - set(MeshTest_WRAPPER_STRING "-${MeshTest_WRAPPER}") - endif() - set(TEST_NAME - "${MeshTest_EXECUTABLE}-${MeshTest_NAME}${MeshTest_WRAPPER_STRING}" - ) - add_test( - NAME ${TEST_NAME} - COMMAND - ${CMAKE_COMMAND} -DEXECUTABLE=${MeshTest_EXECUTABLE_PARSED} - "-DEXECUTABLE_ARGS=${MeshTest_EXECUTABLE_ARGS}" # Quoted because - # passed as list see - # https://stackoverflow.com/a/33248574/80480 - -DBINARY_PATH=${MeshTest_BINARY_PATH} - -DWRAPPER_COMMAND=${WRAPPER_COMMAND} - "-DWRAPPER_ARGS=${MeshTest_WRAPPER_ARGS}" - "-DFILES_TO_DELETE=${FILES_TO_DELETE}" - -DSTDOUT_FILE_PATH=${MeshTest_STDOUT_FILE_PATH} - -DWORKING_DIRECTORY=${MeshTest_WORKING_DIRECTORY} - -DLOG_FILE=${PROJECT_BINARY_DIR}/logs/${TEST_NAME}.log -P - ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestWrapper.cmake - ) - current_dir_as_list(ProcessLib labels) - if(${MeshTest_RUNTIME} LESS_EQUAL ${ogs.ctest.large_runtime}) - list(APPEND labels default) - else() - list(APPEND labels large) - endif() - set_tests_properties( - ${TEST_NAME} PROPERTIES COST ${MeshTest_RUNTIME} LABELS - "meshtest;${labels}" - ) - - if(TARGET ${MeshTest_EXECUTABLE}) - add_dependencies(ctest ${MeshTest_EXECUTABLE}) - add_dependencies(ctest-large ${MeshTest_EXECUTABLE}) - endif() - - # Run the tester - set(MeshTest_TESTER "vtkdiff") - set(TESTER_NAME "${TEST_NAME}-${MeshTest_TESTER}") - add_test( - NAME ${TESTER_NAME} - COMMAND - ${CMAKE_COMMAND} -DSOURCE_PATH=${MeshTest_SOURCE_PATH} - -DBINARY_PATH=${${MeshTest_BINARY_PATH}} - -DSELECTED_DIFF_TOOL_PATH=${SELECTED_DIFF_TOOL_PATH} - "-DTESTER_COMMAND=${TESTER_COMMAND}" - -DBINARY_PATH=${MeshTest_BINARY_PATH} - -DLOG_FILE_BASE=${PROJECT_BINARY_DIR}/logs/${TESTER_NAME} - -DGLOB_MODE=${GLOB_MODE} -P - ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestTester.cmake - --debug-output - WORKING_DIRECTORY ${MeshTest_SOURCE_PATH} - ) - set_tests_properties( - ${TESTER_NAME} PROPERTIES DEPENDS ${TEST_NAME} LABELS - "tester;${labels}" - ) - -endfunction() diff --git a/scripts/cmake/test/Test.cmake b/scripts/cmake/test/Test.cmake index 5ca9b90a1ba24991519f591a19764ca35384ce77..118e3f957b6d876f10bffce266066b1477df6d08 100644 --- a/scripts/cmake/test/Test.cmake +++ b/scripts/cmake/test/Test.cmake @@ -33,7 +33,6 @@ endif() enable_testing() # Enable CTest include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/AddTest.cmake) -include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/MeshTest.cmake) include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/OgsTest.cmake) include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/NotebookTest.cmake)