diff --git a/Apps/Common/CMakeLists.txt b/Apps/Common/CMakeLists.txt index bfea747f..5e9bec35 100644 --- a/Apps/Common/CMakeLists.txt +++ b/Apps/Common/CMakeLists.txt @@ -20,6 +20,7 @@ install(FILES ${AppCommon_HEADERS} DESTINATION include/IFEM) install(FILES scripts/regtest.sh.in scripts/clang-check-test.sh.in scripts/cppcheck-test.sh.in + scripts/iotest.sh.in DESTINATION lib/IFEM/scripts PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE diff --git a/Apps/Common/scripts/iotest.sh.in b/Apps/Common/scripts/iotest.sh.in new file mode 100755 index 00000000..af40a263 --- /dev/null +++ b/Apps/Common/scripts/iotest.sh.in @@ -0,0 +1,41 @@ +#!/bin/bash + +# This script performs a single IO regression test. +# It is used by the 'make test' target in the buildsystems +# Usually you should use 'make test' rather than calling this script directly +# +# Parameters: $1 = Application binary +# $2 = Regression test file +# $3 = File type to generate/test +# A IO regression test file is of the format: +# parameters to application +# blank line +# output from listing application + +mysim=$1 + +cd `dirname $2` +MAPFILE=`head -n1 $2` +tmpnew=`mktemp -t ifemlogXXXXXX` +tmpold=`mktemp -t ifemlogXXXXXX` +output=`mktemp -t ifemXXXXXX.$3` +if [ "$3" == "hdf5" ] +then + $mysim $MAPFILE -hdf5 $output 2>&1 > /dev/null +else + $mysim $MAPFILE -vtf 0 -vtffile $output 2>&1 > /dev/null +fi +test $? -eq 0 || exit 1 +tail -n +3 $2 > $tmpold +if [ "$3" == "hdf5" ] +then + @H5LS_COMMAND@ -r $output > $tmpnew +else + @VTFLS_COMMAND@ $output > $tmpnew +fi + +diff -u $tmpold $tmpnew +res=$? +rm $tmpnew $tmpold $tmplog $output + +exit $res diff --git a/cmake/Modules/FindIFEMDeps.cmake b/cmake/Modules/FindIFEMDeps.cmake index 02b1b41c..9c15eef8 100644 --- a/cmake/Modules/FindIFEMDeps.cmake +++ b/cmake/Modules/FindIFEMDeps.cmake @@ -276,3 +276,4 @@ endif() set(IFEM_REGTEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/regtest.sh.in) set(IFEM_CLANG_CHECK_TEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/clang-check-test.sh.in) set(IFEM_CPPCHECK_TEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/cppcheck-test.sh.in) +set(IFEM_IOTEST_SCRIPT ${IFEM_PATH}/Apps/Common/scripts/iotest.sh.in) diff --git a/cmake/Scripts/IFEMTesting.cmake b/cmake/Scripts/IFEMTesting.cmake index 9112232e..0d66178b 100644 --- a/cmake/Scripts/IFEMTesting.cmake +++ b/cmake/Scripts/IFEMTesting.cmake @@ -127,6 +127,32 @@ function(IFEM_add_restart_test name binary rlevel) endif(IFEM_TEST_MEMCHECK) endfunction() +function(IFEM_add_vtf_test name binary) + if(NOT VTFWRITER_FOUND OR NOT VTFLS_COMMAND) + return() + endif() + separate_arguments(MEMCHECK_COMMAND) + if(IFEM_TEST_EXTRA) + set(test-name "vtf+${binary}+${IFEM_TEST_EXTRA}+${name}") + else() + set(test-name "vtf+${binary}+${name}") + endif() + add_test("${test-name}" iotest.sh ${EXECUTABLE_OUTPUT_PATH}/${binary} ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} vtf) +endfunction() + +function(IFEM_add_hdf5_test name binary) + if(NOT HDF5_FOUND OR NOT H5LS_COMMAND) + return() + endif() + separate_arguments(MEMCHECK_COMMAND) + if(IFEM_TEST_EXTRA) + set(test-name "hdf5+${binary}+${IFEM_TEST_EXTRA}+${name}") + else() + set(test-name "hdf5+${binary}+${name}") + endif() + add_test("${test-name}" iotest.sh ${EXECUTABLE_OUTPUT_PATH}/${binary} ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} hdf5) +endfunction() + macro(add_check_target) add_custom_target(check ${CMAKE_CTEST_COMMAND} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) add_custom_command(TARGET check PRE_BUILD COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/failed.log) @@ -208,10 +234,14 @@ elseif(NOT IFEM_AS_SUBMODULE AND NOT IFEM_LIBRARY_BUILD endif() endif() +find_program(VTFLS_COMMAND vtfls) +find_program(H5LS_COMMAND h5ls) + # Generate regtest script with correct paths configure_file(${IFEM_REGTEST_SCRIPT} regtest.sh) configure_file(${IFEM_CLANG_CHECK_TEST_SCRIPT} clang-check-test.sh) configure_file(${IFEM_CPPCHECK_TEST_SCRIPT} cppcheck-test.sh) +configure_file(${IFEM_IOTEST_SCRIPT} iotest.sh) if(IFEM_BUILD_TESTING) set(EXCL_ALL) diff --git a/cmake/Templates/IFEMConfig.cmake.in b/cmake/Templates/IFEMConfig.cmake.in index 96669c50..a9233589 100644 --- a/cmake/Templates/IFEMConfig.cmake.in +++ b/cmake/Templates/IFEMConfig.cmake.in @@ -13,10 +13,12 @@ if(NOT IFEM_FOUND) set(MPI_FOUND @MPI_FOUND@) set(HDF5_FOUND @HDF5_FOUND@) set(CEREAL_FOUND @CEREAL_FOUND@) + set(VTFWRITER_FOUND @VTFWRITER_FOUND@) set(IFEM_REGTEST_SCRIPT ${IFEM_PATH}/scripts/regtest.sh.in) set(IFEM_CLANG_CHECK_TEST_SCRIPT ${IFEM_PATH}/scripts/clang-check-test.sh.in) set(IFEM_CPPCHECK_TEST_SCRIPT ${IFEM_PATH}/scripts/cppcheck-test.sh.in) + set(IFEM_IOTEST_SCRIPT ${IFEM_PATH}/scripts/iotest.sh.in) set(IFEM_CHECKCOMMITS_SCRIPT ${IFEM_PATH}/CheckCommits.cmake) set(CMAKE_INSTALL_DOCDIR @CMAKE_INSTALL_DOCDIR@)