summaryrefslogtreecommitdiff
path: root/testing/eval_oneprogram.sh
diff options
context:
space:
mode:
Diffstat (limited to 'testing/eval_oneprogram.sh')
-rwxr-xr-xtesting/eval_oneprogram.sh138
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
+
+