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)