diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake index a653dc4a1df385d4babc3cbacea14ad3161638aa..3107d2a9aaf0ad67df6da6ffc8e28f1963ff4f23 100644 --- a/scripts/cmake/test/AddTest.cmake +++ b/scripts/cmake/test/AddTest.cmake @@ -20,6 +20,10 @@ # - DIFF_DATA <list of files to diff> # # the given file is compared to [filename]_expected.[extension] # +# numdiff-tester +# - DIFF_DATA <list of files to numdiff> +# # the given file is compared to [filename]_expected.[extension] +# function (AddTest) @@ -86,7 +90,10 @@ function (AddTest) if(AddTest_TESTER STREQUAL "diff" AND NOT DIFF_TOOL_PATH) message(FATAL_ERROR "diff-command is required for diff tester but was not found!") endif() - if(AddTest_TESTER STREQUAL "diff" AND NOT AddTest_DIFF_DATA) + if(AddTest_TESTER STREQUAL "numdiff" AND NOT NUMDIFF_TOOL_PATH) + message(FATAL_ERROR "numdiff-command is required for numdiff tester but was not found!") + endif() + if((AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER STREQUAL "numdiff") AND NOT AddTest_DIFF_DATA) message(FATAL_ERROR "AddTest(): ${AddTest_NAME} - no DIFF_DATA given!") endif() if(AddTest_TESTER STREQUAL "memcheck" AND NOT GREP_TOOL_PATH) @@ -94,6 +101,7 @@ function (AddTest) endif() if(AddTest_TESTER STREQUAL "diff") + message("DIFF ADDTESTDIFF_DATA ${AddTest_DIFF_DATA}") foreach(FILE ${AddTest_DIFF_DATA}) get_filename_component(FILE_NAME ${FILE} NAME_WE) get_filename_component(FILE_EXT ${FILE} EXT) @@ -107,6 +115,20 @@ function (AddTest) endforeach() string(REPLACE ";" " && " TESTER_COMMAND "${TESTER_COMMAND}") set(AddTest_DIFF_DATA_PARSED "${AddTest_SOURCE_PATH}/${AddTest_DIFF_DATA_PARSED}") + elseif(AddTest_TESTER STREQUAL "numdiff") + foreach(FILE ${AddTest_DIFF_DATA}) + get_filename_component(FILE_NAME ${FILE} NAME_WE) + get_filename_component(FILE_EXT ${FILE} EXT) + set(FILE_EXPECTED ${FILE_NAME}_expected${FILE_EXT}) + set(TESTER_COMMAND ${TESTER_COMMAND} "${NUMDIFF_TOOL_PATH} -a 1e-5 -r 1e-4 DATA{${AddTest_SOURCE_PATH}/${FILE_EXPECTED}} ${AddTest_BINARY_PATH}/${FILE}") + if(AddTest_DIFF_DATA_PARSED) + set(AddTest_DIFF_DATA_PARSED "${AddTest_DIFF_DATA_PARSED},${FILE_EXPECTED}") + else() + set(AddTest_DIFF_DATA_PARSED "${FILE_EXPECTED}") + endif() + endforeach() + string(REPLACE ";" " && " TESTER_COMMAND "${TESTER_COMMAND}") + set(AddTest_DIFF_DATA_PARSED "${AddTest_SOURCE_PATH}/${AddTest_DIFF_DATA_PARSED}") elseif(tester STREQUAL "memcheck") set(TESTER_COMMAND "! ${GREP_TOOL_PATH} definitely ${AddTest_SOURCE_PATH}/${AddTest_NAME}_memcheck.log") endif() @@ -137,7 +159,7 @@ function (AddTest) endif() # Run the tester - if(AddTest_TESTER STREQUAL "diff") + if(AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER STREQUAL "numdiff") ExternalData_Add_Test(data NAME "${AddTest_EXECUTABLE}-${AddTest_NAME}-${AddTest_WRAPPER}-${AddTest_TESTER}" COMMAND ${CMAKE_COMMAND} diff --git a/scripts/cmake/test/Test.cmake b/scripts/cmake/test/Test.cmake index 36a4a1ae0562e31382891b38cb6eac630a0e2a1e..35982ff7560c78d0b2f608bda32f86cc4a69e7b2 100644 --- a/scripts/cmake/test/Test.cmake +++ b/scripts/cmake/test/Test.cmake @@ -1,5 +1,6 @@ # Find tools and data FIND_PROGRAM(DIFF_TOOL_PATH diff) +FIND_PROGRAM(NUMDIFF_TOOL_PATH numdiff) # FIND_PROGRAM(TIME_TOOL_PATH time) # TODO: does not work Travis SET(TIME_TOOL_PATH time) FIND_PROGRAM(GREP_TOOL_PATH grep)