]> mj.ucw.cz Git - moe.git/blobdiff - bin/lib
Removed mo-create-floppy, it is horribly glacial.
[moe.git] / bin / lib
diff --git a/bin/lib b/bin/lib
index ea516f17ede8cf3c42a6d6be7361d1eb2cf50e2f..c9a7f27a6e36be9494b8718cef9c1b6a711fcdb8 100644 (file)
--- a/bin/lib
+++ b/bin/lib
@@ -208,6 +208,31 @@ function test-result
                P=`cat $TDIR/$TEST.pts`
                rm $TDIR/$TEST.pts
        fi
+
+       # Translate signal numbers to readable strings
+       SG=${M#Caught fatal signal }
+       SG=${SG#Committed suicide by signal }
+       if [ "$SG" != "$M" ] ; then
+               SG=`perl -MConfig -e '@s=split / /,$Config{sig_name}; print $s[$ARGV[0]]' $SG`
+               [ -z "$SG" ] || M="$M (SIG$SG)"
+       fi
+
+       # Translate Free Pascal runtime errors to readable strings
+       RE=${M#Exited with error status }
+       if [ "$FREE_PASCAL_RTE" == 1 -a "$RE" != "$M" ] ; then
+               N="Runtime error $RE"
+               case "$RE" in
+                       200)    M="$N: Division by zero" ;;
+                       201)    M="$N: Range check error" ;;
+                       202)    M="$N: Stack overflow" ;;
+                       203)    M="$N: Heap overflow" ;;
+                       205)    M="$N: Floating point overflow" ;;
+                       215)    M="$N: Arithmetic overflow" ;;
+                       216)    M="$N: Segmentation fault" ;;
+                       ???)    M="$N" ;;
+               esac
+       fi
+
        echo "Verdict: $M"
        echo "Points: $P"
        test-verdict $P "$M"
@@ -219,7 +244,7 @@ function test-prolog
        box-clean
        echo "Executable file: $TDIR/$PROBLEM"
        if [ ! -x $TDIR/$PROBLEM ] ; then
-               test-result 0 "Compile error."
+               test-result 0 "Compile error"
        fi
        cp $TDIR/$PROBLEM $BOXDIR/
        BOX_EXTRAS=
@@ -241,6 +266,10 @@ function test-prolog
                *)      die "Unknown IN_TYPE $IN_TYPE"
                        ;;
        esac
+       if [ -n "$EV_PEDANT" -a $IN_TYPE != none ] ; then
+               pcont "<pedant> "
+               bin/pedant <$TDIR/$TEST.in | tr '\n' ' ' >&2
+       fi
        case $OUT_TYPE in
                file)   echo "Output file: $PROBLEM.out"
                        [ $TASK_TYPE == interactive ] || BOX_EXTRAS="$BOX_EXTRAS -o/dev/null"
@@ -265,10 +294,10 @@ function test-epilog
        echo "Sandbox contents after exit:"
        ls -Al $BOXDIR
        case ${OUT_TYPE:-$IO_TYPE} in
-               file)   [ -f $BOXDIR/$PROBLEM.out ] || test-result 0 "No output file."
+               file)   [ -f $BOXDIR/$PROBLEM.out ] || test-result 0 "No output file"
                        cp $BOXDIR/$PROBLEM.out $TDIR/$TEST.out
                        ;;
-               stdio)  [ -f $BOXDIR/.stdout ] || test-result 0 "No output file."
+               stdio)  [ -f $BOXDIR/.stdout ] || test-result 0 "No output file"
                        cp $BOXDIR/.stdout $TDIR/$TEST.out
                        ;;
        esac
@@ -310,18 +339,27 @@ function test-run-interactive
        test-epilog
 }
 
+# "Running" of open-data problems
+
+function test-run-open-data
+{
+       [ -f $SDIR/$TEST.out ] || test-result 0 "No solution"
+       ln $SDIR/$TEST.out $TDIR/$TEST.out
+}
+
 # Syntax checks
 
 function syntax-check
 {
        [ -n "$SYNTAX_CHECK" ] || return 0
+       [ -z "$EV_NOCHECK" ] || return 0
        pcont "<syntax> "
        SCHECK=`eval echo $SYNTAX_CHECK`
        echo "Syntax check command: $SCHECK"
        if ! eval $SCHECK 2>$TMPDIR/exec.out ; then
                cat $TMPDIR/exec.out
                MSG=`tail -1 $TMPDIR/exec.out`
-               if [ -z "$MSG" ] ; then MSG="Wrong syntax." ; fi
+               if [ -z "$MSG" ] ; then MSG="Wrong syntax" ; fi
                test-result 0 "$MSG"
        fi
        cat $TMPDIR/exec.out
@@ -332,7 +370,7 @@ function syntax-check
 function output-check
 {
        MSG=
-       if [ -n "$OUTPUT_CHECK" -a "$OUT_TYPE" != none ] ; then
+       if [ -n "$OUTPUT_CHECK" -a "$OUT_TYPE" != none -a -z "$EV_NOCHECK" ] ; then
                pcont "<check> "
                [ -f $PDIR/$TEST.out ] && ln $PDIR/$TEST.out $TDIR/$TEST.ok
                OCHECK=`eval echo $OUTPUT_CHECK`
@@ -340,7 +378,7 @@ function output-check
                if ! eval $OCHECK 2>$TMPDIR/exec.out ; then
                        cat $TMPDIR/exec.out
                        MSG=`tail -1 $TMPDIR/exec.out`
-                       if [ -z "$MSG" ] ; then MSG="Wrong answer." ; fi
+                       if [ -z "$MSG" ] ; then MSG="Wrong answer" ; fi
                        test-result 0 "$MSG"
                fi
                cat $TMPDIR/exec.out
@@ -384,5 +422,5 @@ function open-locate
        else
                SRCN=$SDIR/$PROBLEM$TEST.out
        fi
-       [ -f $SRCN ] || fatal "Output file $SRCN not found"
+       [ -f "$SDIR/$SRCN" ] || fatal "Output file $SRCN not found"
 }