#!/bin/bash
#
# Copyright (C) 2003 Ondrej Lhotak
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
CONTEST_DIR=`dirname $0`/..;

SUBMISSION=$1;
PROBLEM=$2;

SUCCESS=115
COMPILE_ERR=99
FORMAT_ERR=102
INCORRECT=105
RUNTIME_ERR=114
TIME_ERR=116
IGNORE=103

# Run on all the test cases
RETURN=$SUCCESS;
for i in $CONTEST_DIR/data/$PROBLEM.*.dat; do
    BASE=`basename $i`
    echo -n "Test case $BASE: ";

    if [ -e ${i/%dat/diff} ]; then

        if ! diff -i -w ${i/%dat/diff} \
        $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/out} \
        > $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/diff}; then
            diff ${i/%dat/diff} \
            $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/out} \
            > $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/diff}
            RETURN=$INCORRECT;
            echo FAILED - Wrong answer;

        elif ! diff ${i/%dat/diff} \
        $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/out} \
        > $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/diff}; then
            if [ $RETURN == $SUCCESS ]; then RETURN=$FORMAT_ERR; fi
            echo FAILED - Format error;

        else
            echo SUCCESS;
        fi

    elif [ -e ${i/%dat/cmd} -o -e ${i/%.*.dat/.cmd} ]; then
        if [ -e ${i/%.*.dat/cmd} ]; then PROG=${i/%.*.dat/cmd};
        else PROG=${i/%dat/cmd}; fi
        $PROG < $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/out} \
        > $CONTEST_DIR/var/judgedirs/$SUBMISSION/${BASE/%dat/diff};
        RETCODE=$?;
        if [ $RETCODE = 2 ]; then
            if [ $RETURN == $SUCCESS ]; then RETURN=$FORMAT_ERR; fi
            echo FAILED - Format error;
            
        elif [ $RETCODE != 0 ]; then
            RETURN=$INCORRECT;
            echo FAILED - Wrong answer;

        else
            echo SUCCESS;
        fi

    else
        echo ERROR: no correct output or judging program for $i.
    fi
done

exit $RETURN;
