diff options
Diffstat (limited to 'contrib/byacc/test/run_test.sh')
-rwxr-xr-x | contrib/byacc/test/run_test.sh | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/contrib/byacc/test/run_test.sh b/contrib/byacc/test/run_test.sh new file mode 100755 index 0000000..ae8591b --- /dev/null +++ b/contrib/byacc/test/run_test.sh @@ -0,0 +1,82 @@ +#!/bin/sh +# $Id: run_test.sh,v 1.8 2012/01/15 11:50:35 tom Exp $ +# vi:ts=4 sw=4: + +if test $# = 1 +then + PROG_DIR=`pwd` + TEST_DIR=$1 +else + PROG_DIR=.. + TEST_DIR=. +fi + +YACC=$PROG_DIR/yacc + +tmpfile=temp$$ +rm -f test-* + +echo '** '`date` +for input in ${TEST_DIR}/*.y +do + case $input in + test*) + echo "?? ignored $input" + ;; + *) + root=`basename $input .y` + ROOT="test-$root" + prefix=${root}_ + + OPTS= + OPT2= + TYPE=".output .tab.c .tab.h" + case $input in + ${TEST_DIR}/code_*) + OPTS="$OPTS -r" + TYPE="$TYPE .code.c" + prefix=`echo "$prefix" | sed -e 's/^code_//'` + ;; + ${TEST_DIR}/pure_*) + OPTS="$OPTS -P" + prefix=`echo "$prefix" | sed -e 's/^pure_//'` + ;; + ${TEST_DIR}/quote_*) + OPT2="-s" + ;; + esac + + for opt2 in "" $OPT2 + do + $YACC $OPTS $opt2 -v -d -p $prefix -b $ROOT${opt2} $input + for type in $TYPE + do + REF=${TEST_DIR}/${root}${opt2}${type} + CMP=${ROOT}${opt2}${type} + if test ! -f $CMP + then + echo "...not found $CMP" + else + sed -e s,$CMP,$REF, \ + -e /YYPATCH/d \ + -e 's,#line \([1-9][0-9]*\) "'$TEST_DIR'/,#line \1 ",' \ + < $CMP >$tmpfile \ + && mv $tmpfile $CMP + if test ! -f $REF + then + mv $CMP $REF + echo "...saved $REF" + elif ( cmp -s $REF $CMP ) + then + echo "...ok $REF" + rm -f $CMP + else + echo "...diff $REF" + diff -u $REF $CMP + fi + fi + done + done + ;; + esac +done |