44# It is used by the 'make test' target in the buildsystems
55# Usually you should use 'make test' rather than calling this script directly
66#
7- # Parameters: $1 = Application binary
8- # $2 = Regression test file
9- # $3 = If given, number of MPI nodes
7+ # Parameters: -a = Application binary
8+ # -r = Regression test file
9+ # Optional parameters:
10+ # -v = Valgrind binary
11+ # -m = Number of MPI nodes
12+ # -s = Restart step
1013# A regression test file is of the format:
1114# parameters to application
1215# blank line
@@ -29,43 +32,67 @@ function atomic_log_file {
2932) 200> /var/lock/ifemloglock
3033}
3134
32- mysim=$1
35+ OPTIND=1
36+ while getopts " a:r:m:v:s:" OPT
37+ do
38+ case " ${OPT} " in
39+ a) MYSIM=${OPTARG} ;;
40+ r) REG_FILE=${OPTARG} ;;
41+ m) MPI_NODES=${OPTARG} ;;
42+ v) VALGRIND=${OPTARG} ;;
43+ s) RSTEP=${OPTARG} ;;
44+ esac
45+ done
3346
34- cd ` dirname $2 `
35- MAPFILE=` head -n1 $2 `
36- test $? -eq 0 || exit 1
37- if test -z " $4 "
47+ if test -z ${MYSIM} || test -z ${REG_FILE}
3848then
39- test -n " $3 " && mysim=" mpirun -n $3 $mysim "
40- else
41- test -n " $5 " && mysim=" mpirun -n $5 $mysim "
49+ echo " Need simulator and regression file"
50+ exit 1
4251fi
52+
53+ cd ` dirname ${REG_FILE} `
54+ MAPFILE=` head -n1 ${REG_FILE} `
55+ test $? -eq 0 || exit 1
4356hdf5=" "
4457tmplog=` mktemp -t ifemlogXXXXXX`
4558faillog=` mktemp -t ifemfailXXXXXX`
46- if test -n " $4 "
59+ if test -n " ${RSTEP} "
4760then
48- hdf5=" -hdf5 @CMAKE_BINARY_DIR@/Testing/$3 "
49- rm -f @CMAKE_BINARY_DIR@/Testing/$3 .hdf5
50- rm -f @CMAKE_BINARY_DIR@/Testing/$3 _restart.hdf5
61+ REG_NAME=` head -n1 $REG_FILE | awk -F ' .xinp' ' {print $1}' `
62+ if grep -q " ../" <<< $REG_NAME
63+ then
64+ REG_NAME=` echo $REG_NAME | awk -F ' ../' ' {print $2}' `
65+ fi
66+ h5file=` mktemp -t ${REG_NAME} _XXXXXX`
67+ hdf5=" -hdf5 ${h5file} "
5168fi
52- $mysim $hdf5 $MAPFILE 2>&1 | tee $tmplog
69+ if test -n " ${VALGRIND} "
70+ then
71+ vallog=` mktemp -t ifemvallogXXXXXX`
72+ MYSIM=" ${VALGRIND} --log-file=${vallog} ${MYSIM} "
73+ fi
74+ test -n " ${MPI_NODES} " && MYSIM=" mpirun -n ${MPI_NODES} ${MYSIM} "
75+
76+ ${MYSIM} ${hdf5} ${MAPFILE} 2>&1 | tee ${tmplog}
5377retcode=$?
54- if test $retcode -ne 0
78+ if test ${ retcode} -ne 0
5579then
5680 atomic_log " Application returned error code: $retcode "
5781 echo Application returned error code: $retcode >> /dev/stderr
5882 exit 1
5983fi
60- if test -n " $4 "
84+ if test -n " ${RSTEP} "
6185then
62- MAPFILE=` echo $MAPFILE | sed ' s/ -restartInc [1-9][0-9]*//' `
63- $mysim $MAPFILE -restart @CMAKE_BINARY_DIR@/Testing/$3 _restart.hdf5 $4 2>&1 | tee $tmplog
86+ MAPFILE=` echo ${MAPFILE} | sed ' s/ -restartInc [1-9][0-9]*//' `
87+ ${MYSIM} ${MAPFILE} -restart ${h5file} _restart.hdf5 ${RSTEP} 2>&1 | tee $tmplog
88+ rm -f ${h5file} .hdf5
89+ rm -f ${h5file} _restart.hdf5
6490fi
6591appres=$?
6692globres=1
6793IFS=$' \n '
68- for line in ` cat $2 `
94+ echo $REG_FILE
95+ for line in ` cat $REG_FILE `
6996do
7097 test -z " $line " && continue
7198 echo " $line " | grep -q " .inp" && continue
77104 then
78105 if test $globres -eq 1
79106 then
80- echo " -------- $2 --------" > $faillog
107+ echo " -------- ${REG_FILE} --------" > $faillog
81108 fi
82109 globres=0
83110 echo " Failed to find output: $line " >> $faillog
86113done
87114cat $tmplog >> $faillog
88115
89- if [ " @IFEM_TEST_MEMCHECK@ " == " 1 " ] || [ " @IFEM_TEST_MEMCHECK@ " == " ON " ]
116+ if test -n " $VALGRIND "
90117then
91- if ! grep -q " ERROR SUMMARY: 0 errors" @CMAKE_BINARY_DIR@/valgrindlog
118+ if ! grep -q " ERROR SUMMARY: 0 errors" $vallog
92119 then
93- cat @CMAKE_BINARY_DIR@/valgrindlog >> $faillog
94- rm -f @CMAKE_BINARY_DIR@/valgrindlog
120+ cat $vallog >> $faillog
95121 appres=1
96122 fi
123+ rm -f $vallog
97124fi
98125
99126if test $globres -eq 0 || test $appres -ne 0
0 commit comments