#! /bin/sh # $Id$ case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac mkdir results >/dev/null 2>&1 # # Verify that all test cases match # passedct=0 failedct=0 errorct=0 for asm in ${srcdir}/$2/*.asm do a=`echo ${asm} | sed 's,^.*/,,;s,.asm$,,'` o=${a}$5 oh=${a}.hx og=`echo ${asm} | sed 's,.asm$,.hex,'` e=${a}.ew eg=`echo ${asm} | sed 's,.asm$,.errwarn,'` echo $ECHO_N "$1: Testing $3 for ${a} return value ... $ECHO_C" # Run within a subshell to prevent signal messages from displaying. sh -c "cat ${asm} | ./yasm $4 -o results/${o} 2>results/${e}" 2>/dev/null status=$? if test $status -gt 128; then # We should never get a coredump! echo "FAIL (crashed)." failedct=`expr $failedct + 1` elif test $status -gt 0; then echo ${asm} | grep err >/dev/null if test $? -gt 0; then # YASM detected errors but shouldn't have! echo "FAIL." failedct=`expr $failedct + 1` else echo "PASS." passedct=`expr $passedct + 1` echo $ECHO_N "$1: Testing $3 for ${a} error/warnings ... $ECHO_C" # We got errors, check to see if they match: #cat ${e} | sed "s,${srcdir}/,./," >${e}.2 #mv ${e}.2 ${e} diff -w ${eg} results/${e} > /dev/null if test $? -eq 0; then # Error/warnings match, it passes! echo "PASS." passedct=`expr $passedct + 1` else # Error/warnings don't match. echo "FAIL." failedct=`expr $failedct + 1` fi fi else echo ${asm} | grep -v err >/dev/null if test $? -gt 0; then # YASM detected errors but shouldn't have! echo "FAIL." failedct=`expr $failedct + 1` else echo "PASS." passedct=`expr $passedct + 1` echo $ECHO_N "$1: Testing $3 for ${a} output file ... $ECHO_C" ./test_hd results/${o} > results/${oh} diff ${og} results/${oh} > /dev/null if test $? -eq 0; then echo "PASS." passedct=`expr $passedct + 1` echo $ECHO_N "$1: Testing $3 for ${a} error/warnings ... $ECHO_C" #cat ${e} | sed "s,${srcdir}/,./," >${e}.2 #mv ${e}.2 ${e} diff -w ${eg} results/${e} > /dev/null if test $? -eq 0; then # Both object file and error/warnings match, it passes! echo "PASS." passedct=`expr $passedct + 1` else # Error/warnings don't match. echo "FAIL." failedct=`expr $failedct + 1` fi else # Object file doesn't match. echo "FAIL." failedct=`expr $failedct + 1` fi fi fi done ct=`expr $failedct + $passedct + $errorct` per=`expr 100 \* $passedct / $ct` echo "$1: $per%: Checks: $ct, Failures $failedct, Errors: $errorct" exit `expr $failedct + $errorct`