- #!/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: %dn", pass
- printf "$PROGRAM FAILED: %dn", 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