#! /bin/sh
# $Id: out_test.sh 2226 2009-07-30 02:19:38Z peter $

YASM_TEST_SUITE=1
export YASM_TEST_SUITE

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

echo $ECHO_N "Test $1: $ECHO_C"
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,'`
    if test \! -f ${eg}; then
        eg=/dev/null
    fi

    # Run within a subshell to prevent signal messages from displaying.
    sh -c "cat ${asm} | ./yasm $4 -o results/${o} - 2>results/${e}" >/dev/null 2>/dev/null
    status=$?
    if test $status -gt 128; then
        # We should never get a coredump!
        echo $ECHO_N "C$ECHO_C"
        eval "failed$failedct='C: ${a} 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 $ECHO_N "E$ECHO_C"
            eval "failed$failedct='E: ${a} returned an error code!'"
            failedct=`expr $failedct + 1`
        else
            # We got errors, check to see if they match:
            if diff -w ${eg} results/${e} >/dev/null; then
                # Error/warnings match, it passes!
                echo $ECHO_N ".$ECHO_C"
                passedct=`expr $passedct + 1`
            else
                # Error/warnings don't match.
                echo $ECHO_N "W$ECHO_C"
                eval "failed$failedct='W: ${a} did not match errors and warnings!'"
                failedct=`expr $failedct + 1`
            fi
        fi
    else
        echo ${asm} | grep -v err >/dev/null
        if test $? -gt 0; then
            # YASM didn't detect errors but should have!
            echo $ECHO_N "E$ECHO_C"
            eval "failed$failedct='E: ${a} did not return an error code!'"
            failedct=`expr $failedct + 1`
        else
            ./test_hd results/${o} > results/${oh}
            if diff -w ${og} results/${oh} >/dev/null; then
                if diff -w ${eg} results/${e} >/dev/null; then
                    # Both object file and error/warnings match, it passes!
                    echo $ECHO_N ".$ECHO_C"
                    passedct=`expr $passedct + 1`
                else
                    # Error/warnings don't match.
                    echo $ECHO_N "W$ECHO_C"
                    eval "failed$failedct='W: ${a} did not match errors and warnings!'"
                    failedct=`expr $failedct + 1`
                fi
            else
                # Object file doesn't match.
                echo $ECHO_N "O$ECHO_C"
                eval "failed$failedct='O: ${a} did not match object file!'"
                failedct=`expr $failedct + 1`
            fi
        fi
    fi
done

ct=`expr $failedct + $passedct`
per=`expr 100 \* $passedct / $ct`

echo " +$passedct-$failedct/$ct $per%"
i=0
while test $i -lt $failedct; do
    eval "failure=\$failed$i"
    echo " ** $failure"
    i=`expr $i + 1`
done

exit $failedct
