diff options
Diffstat (limited to 'tools/testh5dump.sh')
-rwxr-xr-x | tools/testh5dump.sh | 280 |
1 files changed, 85 insertions, 195 deletions
diff --git a/tools/testh5dump.sh b/tools/testh5dump.sh index ea607d9..cb68db7 100755 --- a/tools/testh5dump.sh +++ b/tools/testh5dump.sh @@ -1,213 +1,103 @@ -#! /bin/sh -# Test scripts for h5dump. -# See the USAGE function for command usage. +#!/bin/sh +h5dump=h5dump # a relative name +cmp='cmp -s' +diff='diff -c' -# Definitions of commands and variables -CMD='../h5dump' -RM='rm -f' -DIFF=diff -CMP='cmp -s' -nerrors=0 # number of errors (0) -quitonerr=0 # quit on error (not) -noclean=0 # no cleaning temp. files (yes) -only="" # dumper sub-command to test only -except="" # dumper sub-command to test not +nerrors=0 +verbose=yes - -# Definitions of functions/shorthands -# - -# Print Usage of the command -USAGE() +# Print a line-line message left justified in a field of 70 characters +# beginning with the word "Testing". +TESTING() { - echo "Usage: $0 [-help] [-noclean] [-quit] [-except <command>] [-only <command>]" - echo " -help: display help information" - echo " -noclean: do not clean away temporary files" - echo " -quit: quit immediately if any test fails" - echo " -except: skip one specific command" - echo " -only: test one specific command" - echo "<command> can be one of {list, dumpsds, dumprig, dumpvd, dumpvg, dumpgr}" + SPACES=" " + echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\n' } -# Print message with formats according to message level ($1) -MESG() +# Run a test and print PASS or *FAIL*. If a test fails then increment +# the `nerrors' global variable and (if $verbose is set) display the +# difference between the actual output and the expected output. The +# expected output is given as the first argument to this function and +# the actual output file is calculated by replacing the `.ddl' with +# `.out'. The actual output is not removed if $HDF5_NOCLEANUP has a +# non-zero value. +DUMP() { - level=$1 + expect=testfiles/$1 + actual="testfiles/`basename $1 .ddl`.out" shift - case $level in - 0) - echo '=============================' - echo $* - echo '=============================' - ;; - 3) - echo '-----------------------------' - echo $* - echo '-----------------------------' - ;; - 6) - echo "*** $* ***" - ;; - *) - echo "MESG(): Unknown level ($level)" - exit 1 - ;; - esac - -} - -# Run the test to produce an output file which is then -# compared with the expected ($1) output. -# Note that this can be used to produce the expected -# output files by replace "$output" with "$expected" -# in the run-the-test commands. -TEST() -{ - # parse the arguments - output=tmp.out - expected=testfiles/$1 - shift - # print a id banner - MESG 6 $@ - # run the test - ( + # Run test. + TESTING $h5dump $@ + ( echo "#############################" - echo "Expected output for '$CMD $@'" + echo "Expected output for '$h5dump $@'" echo "#############################" cd testfiles - $CMD "$@" - ) > $output - $CMP $expected $output - if [ $? -ne 0 ] - then - echo $DIFF $expected $output - $DIFF $expected $output - echo " <<< FAILED >>>" - nerrors=`expr $nerrors + 1` - if [ $quitonerr -gt 0 ]; - then - FINISH - fi + ../$h5dump "$@" 2>/dev/null + ) >$actual + + # Results. We normalize the result to account for different output + # widths. That is, the test should succeed if the only + # differences are in white space. We have to do this the hard way + # because diff isn't always smart enough. + tr '\n' ' ' <$actual |tr -s ' \t' |fold >$actual-norm + tr '\n' ' ' <$expect |tr -s ' \t' |fold >$expect-norm + + if $cmp $expect-norm $actual-norm; then + echo " PASSED" + else + echo "*FAILED*" + echo " Actual result (*.out) differs from expected result (*.ddl)" + nerrors="`expr $nerrors + 1`" + test yes = "$verbose" && $diff $expect $actual |sed 's/^/ /' fi -# if [ $noclean -eq 0 ] -# then -# $RM $output -# fi -} - -# Report the result and exit -FINISH() -{ - if [ $nerrors -eq 0 ] - then - MESG 0 "All h5dump tests passed" - else - MESG 0 "h5dump tests failed: $nerrors" + # Clean up output file + rm -f $expect-norm $actual-norm + if [ X = ${HDF5_NOCLEANUP:-X} ]; then + rm -f $actual fi - exit $nerrors } -#=============== -# Main Body -#=============== - -# parse arguments -while [ $# -gt 0 ] -do - case "$1" in - "-quit") - quitonerr=1 - ;; - "-noclean") - noclean=1 - ;; - "-help") - USAGE - exit 0 - ;; - "-only") - shift - case "$1" in - "h5dump") - only="$1" - ;; - *) - echo "Unknown command: $1" - USAGE - exit 1 - ;; - esac - ;; - "-except") - shift - case "$1" in - "h5dump") - except="$1" - ;; - *) - echo "Unknown command: $1" - USAGE - exit 1 - ;; - esac - ;; - * ) - echo "Unknow option: $1" - USAGE - exit 1 - ;; - esac - shift -done - -# Print a beginning banner -MESG 0 "Running h5dump tests" - -# Test command list -TestCmd=h5dump -TestName="Test command $TestCmd" -if [ "$except" != $TestCmd -a \( -z "$only" -o "$only" = $TestCmd \) ] -then -MESG 3 "$TestName" -TEST tgroup-1.ddl tgroup.h5 -TEST tgroup-2.ddl -g / tgroup.h5 -TEST tgroup-3.ddl -g /g2 /y tgroup.h5 - -TEST tdset-1.ddl tdset.h5 -TEST tdset-2.ddl -d dset1 /dset2 tdset.h5 -TEST tdset-3.ddl -d /dset1 -header tdset.h5 -TEST tdset-4.ddl -d dset3 tdset.h5 - -TEST tattr-1.ddl tattr.h5 -TEST tattr-2.ddl -a attr1 attr3 tattr.h5 -TEST tattr-3.ddl -header -a attr2 tattr.h5 -TEST tattr-4.ddl -a attr4 tattr.h5 - -TEST tslink-1.ddl tslink.h5 -TEST tslink-2.ddl -l slink2 tslink.h5 - -TEST thlink-1.ddl thlink.h5 -TEST thlink-2.ddl -d /g1/link2 /dset /g1/link1/link3 thlink.h5 -TEST thlink-3.ddl -d /dset /g1/link1/link3 /g1/link2 thlink.h5 -TEST thlink-4.ddl -g /g1 thlink.h5 -TEST thlink-5.ddl -d /dset -g /g2 -d /g1/link2 thlink.h5 - -TEST tcomp-1.ddl tcompound.h5 -TEST tcomp-2.ddl -t /type1 /type2 /group1/type3 tcompound.h5 -TEST tcomp-3.ddl -d /group2/dset5 -g /group1 tcompound.h5 -TEST tcomp-4.ddl -t /#3432:0 -g /group2 tcompound.h5 - -TEST tall-1.ddl tall.h5 -TEST tall-2.ddl -header -g /g1/g1.1 -a attr2 tall.h5 -TEST tall-3.ddl -d /g2/dset2.1 -l /g1/g1.2/g1.2.1/slink tall.h5 - -else -MESG 3 "$TestName <<<SKIPPED>>>" -fi - -# End of test -FINISH + +############################################################################## +############################################################################## +### T H E T E S T S ### +############################################################################## +############################################################################## + +DUMP tgroup-1.ddl tgroup.h5 +DUMP tgroup-2.ddl -g / tgroup.h5 +DUMP tgroup-3.ddl -g /g2 /y tgroup.h5 + +DUMP tdset-1.ddl tdset.h5 +DUMP tdset-2.ddl -d dset1 /dset2 tdset.h5 +DUMP tdset-3.ddl -d /dset1 -header tdset.h5 +DUMP tdset-4.ddl -d dset3 tdset.h5 + +DUMP tattr-1.ddl tattr.h5 +DUMP tattr-2.ddl -a attr1 attr3 tattr.h5 +DUMP tattr-3.ddl -header -a attr2 tattr.h5 +DUMP tattr-4.ddl -a attr4 tattr.h5 + +DUMP tslink-1.ddl tslink.h5 +DUMP tslink-2.ddl -l slink2 tslink.h5 + +DUMP thlink-1.ddl thlink.h5 +DUMP thlink-2.ddl -d /g1/link2 /dset /g1/link1/link3 thlink.h5 +DUMP thlink-3.ddl -d /dset /g1/link1/link3 /g1/link2 thlink.h5 +DUMP thlink-4.ddl -g /g1 thlink.h5 +DUMP thlink-5.ddl -d /dset -g /g2 -d /g1/link2 thlink.h5 + +DUMP tcomp-1.ddl tcompound.h5 +DUMP tcomp-2.ddl -t /type1 /type2 /group1/type3 tcompound.h5 +DUMP tcomp-3.ddl -d /group2/dset5 -g /group1 tcompound.h5 +DUMP tcomp-4.ddl -t /#3432:0 -g /group2 tcompound.h5 + +DUMP tall-1.ddl tall.h5 +DUMP tall-2.ddl -header -g /g1/g1.1 -a attr2 tall.h5 +DUMP tall-3.ddl -d /g2/dset2.1 -l /g1/g1.2/g1.2.1/slink tall.h5 + |