Skip to content
Snippets Groups Projects
Commit 2d012f4a authored by Lars Bilke's avatar Lars Bilke Committed by Dmitri Naumov
Browse files

[cmake] Removed MeshTest(), replaced by vtkdiff-mesh tester.

parent d1f9df16
No related branches found
No related tags found
No related merge requests found
......@@ -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: "*"
......
......@@ -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})
......
#
# 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()
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment