Adding option to check example output

This commit is contained in:
Mark Berrill 2015-03-05 12:55:24 -05:00
parent 3177cec2cc
commit e0ab2445bb
3 changed files with 82 additions and 52 deletions

50
cmake/CompareOutput.cmake Normal file
View File

@ -0,0 +1,50 @@
# This script compares the output of TEST against GOLD,
# ensuring that all lines within GOLD are int TEST.
# Note that TEST may have additional lines that are not checked
CMAKE_POLICY(SET CMP0007 OLD)
FILE(READ "${TEST}" output )
FILE(READ "${GOLD}" sol )
macro(LIST_REPLACE LIST INDEX NEWVALUE)
list(INSERT ${LIST} ${INDEX} ${NEWVALUE})
MATH(EXPR __INDEX "${INDEX} + 1")
list(REMOVE_AT ${LIST} ${__INDEX})
endmacro(LIST_REPLACE)
# Convert file contents into a CMake list (where each element in the list is one line of the file)
STRING(REGEX REPLACE ";" "\\\\;" data "${output}")
STRING(REGEX REPLACE ";" "\\\\;" sol "${sol}")
STRING(REGEX REPLACE "\n" ";" data "${data}")
STRING(REGEX REPLACE "\n" ";" sol "${sol}")
LIST( LENGTH data N_data )
LIST( LENGTH sol N_sol )
MATH( EXPR N_data "${N_data}-1" )
MATH( EXPR N_sol "${N_sol}-1" )
FOREACH( index RANGE ${N_data} )
LIST(GET data ${index} tmp )
STRING(REGEX REPLACE "(\n|\r)" "" tmp "${tmp}")
STRING(STRIP "${tmp}" tmp )
LIST_REPLACE( data ${index} "${tmp}")
ENDFOREACH()
FOREACH( index RANGE ${N_sol} )
LIST( GET sol ${index} tmp )
STRING(REGEX REPLACE "(\n|\r)" "" tmp "${tmp}")
STRING(STRIP "${tmp}" tmp )
LIST_REPLACE( sol ${index} "${tmp}")
ENDFOREACH()
# Check that each line of sol is present in data (and delete it)
FOREACH( tmp ${sol} )
LIST(FIND data "${tmp}" result )
IF ( ${result} EQUAL -1 )
MESSAGE("Test output:\n${output}\n\n")
MESSAGE(FATAL_ERROR "Did not find '${tmp}' in test output\n" )
ELSE()
LIST(REMOVE_AT data ${result} )
ENDIF()
ENDFOREACH()
# Finished
MESSAGE( "All lines in ${GOLD} were found in ${TEST}")

View File

@ -10,7 +10,9 @@ ENDIF()
IF ( NOT ${PROJ}_INSTALL_DIR )
MESSAGE(FATAL_ERROR "${PROJ}_INSTALL_DIR must be set before including macros.cmake")
ENDIF()
IF ( NOT ${PROJ}_BUILD_DIR )
MESSAGE(FATAL_ERROR "${PROJ}_BUILD_DIR must be set before including macros.cmake")
ENDIF()
# Macro to print all variables
@ -445,21 +447,40 @@ MACRO( INSTALL_EXAMPLE EXAMPLE )
ENDMACRO()
# Copy an example folder
# Create an example test
CONFIGURE_FILE( "${${PROJ}_SOURCE_DIR}/cmake/CompareOutput.cmake" "${${PROJ}_BUILD_DIR}/CompareOutput.cmake" COPYONLY )
MACRO( TEST_EXAMPLE EXAMPLE EXEFILE PROCS ${ARGN} )
SET( EXAMPLE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}" )
# Copy the example directory
ADD_CUSTOM_TARGET(
${EXAMPLE} ALL
${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/${EXAMPLE}" "${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}"
${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/${EXAMPLE}" "${EXAMPLE_DIR}"
DEPENDS ${EXEFILE}
)
# Create a wrapper script to run the test and copy the output to ${EXAMPLE}.out
SET( FILENAME "${EXAMPLE_DIR}/run-${EXAMPLE}" )
FILE(WRITE "${FILENAME}" "# This is a automatically generated file to run example--${EXAMPLE}\n" )
FILE(APPEND "${FILENAME}" "${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${PROCS} \"${LBPM_INSTALL_DIR}/bin/${EXEFILE}\" ${ARGN} 2>&1 | tee ${EXAMPLE}.out\n\n" )
# Create the test to run the example
SET( TESTNAME example--${EXAMPLE} )
EXECUTE_PROCESS(COMMAND chmod 755 "${FILENAME}")
ADD_TEST(
NAME ${TESTNAME}
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}"
COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${PROCS} "${LBPM_INSTALL_DIR}/bin/${EXEFILE}" ${ARGN} )
WORKING_DIRECTORY "${EXAMPLE_DIR}"
COMMAND "${FILENAME}"
)
SET_TESTS_PROPERTIES( ${TESTNAME} PROPERTIES FAIL_REGULAR_EXPRESSION "${TEST_FAIL_REGULAR_EXPRESSION}" PROCESSORS ${PROCS} )
SET_TESTS_PROPERTIES( ${TESTNAME} PROPERTIES RESOURCE_LOCK ${EXEFILE} )
# Create a test that checks the output against the data in EXAMPLE/OutputAns.txt
IF ( EXISTS "${EXAMPLE_DIR}/ExampleOutput.txt" )
ADD_TEST(
NAME ${TESTNAME}-output
WORKING_DIRECTORY "${EXAMPLE_DIR}"
COMMAND ${CMAKE_COMMAND} -DTEST=${EXAMPLE}.out -DGOLD=ExampleOutput.txt -P "${${PROJ}_BUILD_DIR}/CompareOutput.cmake"
)
SET_TESTS_PROPERTIES( ${TESTNAME} PROPERTIES FAIL_REGULAR_EXPRESSION "${TEST_FAIL_REGULAR_EXPRESSION}" PROCESSORS 1 )
SET_TESTS_PROPERTIES( ${TESTNAME} PROPERTIES DEPENDS ${TESTNAME} )
ENDIF()
ENDMACRO()

View File

@ -1,46 +1,5 @@
********************************************************
Running Hybrid Implementation of Color LBM
********************************************************
********************************************************
tau = 1.000000
alpha = 0.010000
beta = 0.950000
das = 0.100000
dbs = 0.900000
Value of phi at solid surface = 0.800000
Distance to phi = 0.0: 1.156434
gamma_{wn} = 0.057960
Force(x) = 0.000000
Force(y) = 0.000000
Force(z) = 0.000000
Sub-domain size = 80 x 80 x 80
Parallel domain size = 1 x 1 x 1
********************************************************
Number of blocks = 32
Threads per block = 128
Sweeps per thread = 135
Number of nodes per side = 82
Total Number of nodes = 551368
********************************************************
Read input media...
Setting up communication control structures
Preparing the sendlists
SendLists are ready on host
Prepare to copy send/recv Lists to device
Devices are ready to communicate.
Copying phase ID to device
Allocating distributions
********************************************************
No. of timesteps: 1000
--------------------------------------------------------------------------------------
radius sw pw pn awn Jwn Gwn [xx, yy, zz, xy, xz, yz] --------------------------------------------------------------------------------------
8 0.34906 0.33333 0.0013898 0.26946 0.33334 0.33333 0.33333 -5.3309e-06 1.1201e-05 -1.3209e-05
10 0.34568 0.33333 0.0022109 0.21364 0.33334 0.33333 0.33333 -4.1967e-06 1.0265e-05 -1.2941e-05
12 0.34355 0.33333 0.0031972 0.1779 0.33334 0.33333 0.33333 -5.6086e-06 1.1842e-05 -1.4445e-05
15 0.34143 0.33332 0.005043 0.14164 0.33334 0.33333 0.33333 -5.5737e-06 1.0229e-05 -1.2561e-05
-------------------------------------------------------------------
********************************************************
CPU time = inf
Lattice update rate (per core)= 0.000000 MLUPS
Lattice update rate (total)= 0.000000 MLUPS
********************************************************
8 0.34914 0.33333 0.001388 0.25364 0.33333 0.33333 0.33333 -1.6662e-06 2.1469e-06 -2.3454e-06
10 0.34583 0.33333 0.0022065 0.20135 0.33333 0.33333 0.33333 -8.5941e-07 1.734e-06 -2.071e-06
12 0.34377 0.33332 0.0031884 0.1675 0.33333 0.33333 0.33333 -7.089e-07 1.4714e-06 -1.7527e-06
15 0.3417 0.33332 0.0050284 0.13345 0.33333 0.33333 0.33333 -7.8226e-07 1.4551e-06 -1.6459e-06