From ad8beff36b511beaa9f73d831707d455fa341055 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Tue, 2 Jun 2015 18:04:33 +0200
Subject: [PATCH] Replace numdiff tests with vtkdiff tests.

---
 Applications/CLI/Tests.cmake     | 16 +++++++--------
 scripts/cmake/test/AddTest.cmake | 35 +++++++++++++++++++++++++++++++-
 scripts/cmake/test/Test.cmake    |  1 +
 3 files changed, 43 insertions(+), 9 deletions(-)

diff --git a/Applications/CLI/Tests.cmake b/Applications/CLI/Tests.cmake
index daf0ae6c3e4..f3230511ecf 100644
--- a/Applications/CLI/Tests.cmake
+++ b/Applications/CLI/Tests.cmake
@@ -10,8 +10,8 @@ foreach(mesh_size 1e0 1e1 1e2 1e3)
 		EXECUTABLE ogs
 		EXECUTABLE_ARGS cube_${mesh_size}.prj
 		WRAPPER time
-		TESTER numdiff
-		DIFF_DATA cube_${mesh_size}_result.dat
+		TESTER vtkdiff
+		DIFF_DATA cube_${mesh_size}.vtu Linear_1_to_minus1 Result
 		DATA cube_${mesh_size}.prj cube_1x1x1_hex_${mesh_size}.vtu cube_1x1x1.gml
 	)
 
@@ -32,8 +32,8 @@ foreach(mesh_size 1e4 2e4 3e4 4e4 5e4 1e5 1e6)
 		EXECUTABLE ogs
 		EXECUTABLE_ARGS cube_${mesh_size}.prj
 		WRAPPER time
-		TESTER numdiff
-		DIFF_DATA cube_${mesh_size}_result.dat
+		TESTER vtkdiff
+		DIFF_DATA cube_${mesh_size}.vtu Linear_1_to_minus1 Result
 		DATA cube_${mesh_size}.prj cube_1x1x1_hex_${mesh_size}.vtu cube_1x1x1.gml
 	)
 
@@ -55,8 +55,8 @@ foreach(mesh_size 1e0 1e1 1e2 1e3 1e4)
 		EXECUTABLE ogs
 		EXECUTABLE_ARGS square_${mesh_size}.prj
 		WRAPPER time
-		TESTER numdiff
-		DIFF_DATA square_${mesh_size}_result.dat
+		TESTER vtkdiff
+		DIFF_DATA square_${mesh_size}.vtu Linear_1_to_minus1 Result
 		DATA square_${mesh_size}.prj square_1x1_quad_${mesh_size}.vtu square_1x1.gml
 	)
 
@@ -77,8 +77,8 @@ foreach(mesh_size 1e5 1e6)
 		EXECUTABLE ogs
 		EXECUTABLE_ARGS square_${mesh_size}.prj
 		WRAPPER time
-		TESTER numdiff
-		DIFF_DATA square_${mesh_size}_result.dat
+		TESTER vtkdiff
+		DIFF_DATA square_${mesh_size}.vtu Linear_1_to_minus1 Result
 		DATA square_${mesh_size}.prj square_1x1_quad_${mesh_size}.vtu square_1x1.gml
 	)
 
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index 10b5bf12a89..b7472779e47 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -24,6 +24,10 @@
 #     - DIFF_DATA <list of files to numdiff>
 #       # the given file is compared to [filename]_expected.[extension]
 #
+#   vtkdiff-tester
+#     - DIFF_DATA <vtk file> <data array a name> <data array b name>
+#       # the given data arrays in the vtk file are compared
+#
 
 function (AddTest)
 
@@ -93,11 +97,14 @@ function (AddTest)
 	if(AddTest_TESTER STREQUAL "numdiff" AND NOT NUMDIFF_TOOL_PATH)
 		return()
 	endif()
+	if(AddTest_TESTER STREQUAL "vtkdiff" AND NOT VTKDIFF_TOOL_PATH)
+		return()
+	endif()
 	if(AddTest_TESTER STREQUAL "memcheck" AND NOT GREP_TOOL_PATH)
 		return()
 	endif()
 
-	if((AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER STREQUAL "numdiff") AND NOT AddTest_DIFF_DATA)
+	if((AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER STREQUAL "numdiff" OR AddTest_TESTER STREQUAL "vtkdiff") AND NOT AddTest_DIFF_DATA)
 		message(FATAL_ERROR "AddTest(): ${AddTest_NAME} - no DIFF_DATA given!")
 	endif()
 
@@ -107,6 +114,9 @@ function (AddTest)
 	elseif(AddTest_TESTER STREQUAL "numdiff")
 		set(SELECTED_DIFF_TOOL_PATH ${NUMDIFF_TOOL_PATH})
 		set(TESTER_ARGS "--statistics --absolute-tolerance=1e-5 --relative-tolerance=1e-4")
+	elseif(AddTest_TESTER STREQUAL "vtkdiff")
+		set(SELECTED_DIFF_TOOL_PATH ${VTKDIFF_TOOL_PATH})
+		set(TESTER_ARGS "-q --abs 1e-5 --rel 1e-4")
 	endif()
 
 	if(AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER STREQUAL "numdiff")
@@ -123,6 +133,19 @@ 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 "vtkdiff")
+		list(LENGTH AddTest_DIFF_DATA DiffDataLength)
+        if (NOT ${DiffDataLength} EQUAL 3)
+			message(FATAL_ERROR "For vtkdiff tester 3 diff data arguments are required.")
+		endif()
+		list(GET AddTest_DIFF_DATA 0 VTK_FILE)
+		list(GET AddTest_DIFF_DATA 1 NAME_A)
+		list(GET AddTest_DIFF_DATA 2 NAME_B)
+
+		set(TESTER_COMMAND ${TESTER_COMMAND} "${SELECTED_DIFF_TOOL_PATH} \
+			${AddTest_BINARY_PATH}/${VTK_FILE} -a ${NAME_A} -b ${NAME_B} \
+			${TESTER_ARGS}")
+		string(REPLACE ";" " && " TESTER_COMMAND "${TESTER_COMMAND}")
 	elseif(tester STREQUAL "memcheck")
 		set(TESTER_COMMAND "! ${GREP_TOOL_PATH} definitely ${AddTest_SOURCE_PATH}/${AddTest_NAME}_memcheck.log")
 	endif()
@@ -164,6 +187,16 @@ function (AddTest)
 			-P ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestTester.cmake
 			DATA{${AddTest_DIFF_DATA_PARSED}}
 		)
+	elseif(AddTest_TESTER STREQUAL "vtkdiff")
+		add_test(
+			NAME "${AddTest_EXECUTABLE}-${AddTest_NAME}-${AddTest_WRAPPER}-${AddTest_TESTER}"
+			COMMAND ${CMAKE_COMMAND}
+			-Dcase_path=${AddTest_SOURCE_PATH}
+			-Dcase_name=${AddTest_NAME}
+			-DTESTER_COMMAND=${TESTER_COMMAND}
+			-DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
+			-P ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestTester.cmake
+		)
 	else()
 		add_test(
 			NAME "${AddTest_EXECUTABLE}-${AddTest_NAME}-${AddTest_WRAPPER}-${AddTest_TESTER}"
diff --git a/scripts/cmake/test/Test.cmake b/scripts/cmake/test/Test.cmake
index 58dea305f8b..4201aa8e147 100644
--- a/scripts/cmake/test/Test.cmake
+++ b/scripts/cmake/test/Test.cmake
@@ -1,6 +1,7 @@
 # Find tools and data
 find_program(DIFF_TOOL_PATH diff)
 find_program(NUMDIFF_TOOL_PATH numdiff)
+find_program(VTKDIFF_TOOL_PATH vtkdiff ${CMAKE_BINARY_DIR}/bin)
 # find_program(TIME_TOOL_PATH time) # TODO: does not work Travis
 set(TIME_TOOL_PATH time)
 find_program(GREP_TOOL_PATH grep)
-- 
GitLab