diff options
Diffstat (limited to 'testing/eval_oneprogram.sh')
-rwxr-xr-x | testing/eval_oneprogram.sh | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/testing/eval_oneprogram.sh b/testing/eval_oneprogram.sh new file mode 100755 index 0000000..45edfc0 --- /dev/null +++ b/testing/eval_oneprogram.sh @@ -0,0 +1,138 @@ +#!/bin/sh +# +# eval_oneprogram.sh [-h][-lk] <program> [<program_args>] +# +# CALLED BY: eval_suite.sh +# +# +# Runs <program> and reports how many instances of the strings SUCCESS +# or FAILED occur. +# +# +# FIX Output from $PROGRAM on stderr is separated out and comes first. +# +# +USAGE_LONG=' +# +# -h Help. +# -k Save the program output in "__<program_args>__<pid>o". +# -l Long form. (Short form by default.) +# +# <program> is the executable to run and collect the output of. +' + +USAGE="Usage: `basename $0` [-h][-lk] <program>" + + + + +#------------------------------------ -o- +# Globals. +# +AWKFILE="_`basename $0`$$.awk" +SCRIPTFILE= + +dolongform=0 +dokeepoutput= + +TOTALFAILED=0 + + + +#------------------------------------ -o- +# Parse & setup. +# +while [ -n "$1" ]; do + case "$1" in + -k) dokeepoutput=true + ;; + -l) dolongform=1 + ;; + -h) echo $USAGE + cat <<BLIK | sed 's/^#//' | sed '1d' 1>&2 +$USAGE_LONG +BLIK + exit 0 + ;; + *) PROGRAM="$*" + shift `expr $# - 1` + ;; + esac + + shift +done + +[ -z "$PROGRAM" ] && echo $USAGE && exit 1 + + +SCRIPTFILE="__`echo \`basename $PROGRAM\` | sed 's/ /_/g'`__$$o" + + + +#------------------------------------ -o- +# Create awk script. +# + +cat <<GRONK >$AWKFILE + +BEGIN { + pass = 0 + passlist[0] = "" + + fail = 0 + faillist[0] = "" + + longform = $dolongform + 0 +} + +/SUCCESS/ { + passlist[pass] = \$0 + pass += 1 +} + +/FAILED/ { + faillist[fail] = \$0 + fail += 1 +} + +END { + printf "$PROGRAM SUCCESS: %d\n", pass + printf "$PROGRAM FAILED: %d\n", fail + + if (longform) { + printf "\n" + for (i=0; i<pass; i++) + print passlist[i] + + for (i=0; i<fail; i++) + print faillist[i] + } + + exit fail +} +GRONK + + + + +#------------------------------------ -o- +# Get and print results. +# + +{ $PROGRAM $* 2>&1 ; } >$SCRIPTFILE + +awk -f $AWKFILE $SCRIPTFILE +TOTALFAILED=$? + +rm -f $AWKFILE +[ -z "$dokeepoutput" ] && rm -f $SCRIPTFILE + + + + +#------------------------------------ -o- +# Exit, cleanup. +# +exit $TOTALFAILED + + |