#!/bin/rc prog=8.out verb=no if (~ $1 -v){ verb=yes shift } switch($#*){ case 0 tests=`{ls [0-9]* >[2]/dev/null | grep -v 'out' | grep -v new} case 1 prog=$1 tests=`{ls [0-9]* >[2]/dev/null | grep -v 'out' | grep -v new} case 2 prog=$1 shift if (test -d $1) tests=`{ls $1/[0-9]* >[2]/dev/null | grep -v 'out$' | grep -v 'new$'} if not tests=$1 case * echo usage: $0 '[-v] [prog [test|testdir]]' >[1=2] exit usage } if (! test -x $prog){ echo $prog ': not executable' >[1=2] exit prog } pname=`{basename $prog} fn fail (){ echo $* >[1=2] exit failed } for ( f in $tests) { what=`{sed 1q $f | grep '^#'} if (! ~ $#what 0) echo test $f : $what if not echo test $f broke|rc kill $pname|rc rm -f $f.new grep '^#!' $f | sed 's/..//' | rc grep -v '^#' $f | $prog $params>$f.new >[2=1] if (test -e $f.out){ diff <{grep -v '^#' $f.out} <{grep -v '^#' $f.new} || { echo ; echo mv $f.new $f.out echo output was: sed 's/^/ /' $f.new fail test $f failed } if (~ $verb yes) sed 's/^/ /' $f.new rm -f $f.new } if not { echo first time for $f if (~ $verb yes) sed 's/^/ /' $f.new mv $f.new $f.out } } echo all tests passed exit 0