]> mj.ucw.cz Git - moe.git/blobdiff - eval/libeval.sh
Doc: Note that Isolate has moved
[moe.git] / eval / libeval.sh
index 542b07d31a97b23f431b3e48db51da92ffc19d04..676dbef399f3b6ea2ddd5df1029ef95c747b694c 100644 (file)
@@ -75,16 +75,22 @@ function override-vars
 function box-init
 {
        pstart "Preparing sandbox... "
-       if [ -z "$TEST_USER" -o "$TEST_USER" == $EVAL_USER ] ; then
+
+       # Default values for user/group
+       EVAL_USER=${EVAL_USER:-$USER}
+       EVAL_GROUP=${EVAL_GROUP:-$GROUP}
+       TEST_USER=${TEST_USER:-$EVAL_USER}
+
+       if [ -z "$TEST_USER" -o "$TEST_USER" == "$EVAL_USER" ] ; then
                pcont "running locally (INSECURE), "
-               TEST_USER=$EVAL_USER
-               BOXDIR=`pwd`/box
-               BOXCMD=bin/box
-               mkdir -p box
+               TEST_USER="$EVAL_USER"
+               BOXDIR=$HDIR/box
+               BOXCMD=$HDIR/bin/box
+               mkdir -p $BOXDIR
        else
                pcont "used account $TEST_USER, "
-               BOXDIR=$MO_ROOT/eval/$TEST_USER
-               BOXCMD=bin/box-$TEST_USER
+               BOXDIR=$HDIR/box
+               BOXCMD=$HDIR/bin/box-$TEST_USER
        fi
        [ -d $BOXDIR -a -f $BOXCMD ] || die "Sandbox set up incorrectly"
        BOXCMD="$BOXCMD -c$BOXDIR"
@@ -105,11 +111,12 @@ function box-clean
 function dir-init
 {
        pstart "Initializing... "
-       HDIR=.
-       PDIR=problems/$PROBLEM
-       SDIR=solutions/$CONTESTANT/$PROBLEM
-       TDIR=testing/$CONTESTANT/$PROBLEM
-       TMPDIR=tmp
+       [ -z "$HDIR" ] && HDIR=.
+       PDIR=$HDIR/problems/$PROBLEM
+       SDIR=$HDIR/solutions/$CONTESTANT/$PROBLEM
+       TDIR=$HDIR/testing/$CONTESTANT/$PROBLEM
+       TMPDIR=$HDIR/tmp/
+
        [ -d $PDIR ] || die "Problem $PROBLEM not known"
        [ -d $SDIR ] || fatal "Solution of $PROBLEM not found"
        mkdir -p $TDIR $TMPDIR
@@ -118,6 +125,7 @@ function dir-init
        cat >$TDIR/log <<EOF
 Testing solution of $PROBLEM by $CONTESTANT
 Test started at `date`
+Eval base directory: $HDIR
 Contestant's solution directory: $SDIR
 Problem directory: $PDIR
 Testing directory: $TDIR
@@ -255,14 +263,14 @@ function test-result
        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`
+               SG=`kill -l $SG 2>/dev/null` || SG=
                [ -z "$SG" ] || M="$M (SIG$SG)"
        fi
 
        # Translate runtime errors to readable strings
        RE=${M#Exited with error status }
        if [ -n "$EXIT_CODE_HOOK" -a "$RE" != "$M" ] ; then
-               NEWMSG=`$EXIT_CODE_HOOK $RE`
+               NEWMSG=`$EXIT_CODE_HOOK $RE` || NEWMSG=
                if [ -n "$NEWMSG" ] ; then
                        M="Runtime error $RE: $NEWMSG"
                fi
@@ -297,6 +305,15 @@ function test-prolog
                        ;;
                none)   echo "Input file: <none>"
                        ;;
+               dir)    echo "Input file: files in directory $PDIR/$TEST.in/"
+                       [ -d $PDIR/$TEST.in ] || die "Not a directory: $PDIR/$TEST.in"
+                       # TODO: recursive ln to $TDIR
+                       cp -r $PDIR/$TEST.in $TDIR/$TEST.in
+                       cp -r $PDIR/$TEST.in/* $BOXDIR/
+                       # Can have .stdin, but empty by default
+                       touch $BOXDIR/.stdin
+                       BOX_EXTRAS="$BOX_EXTRAS -i.stdin"
+                       ;;
                *)      die "Unknown IN_TYPE $IN_TYPE"
                        ;;
        esac
@@ -374,7 +391,10 @@ function test-run-file
        pcont "<run> "
        BOXOPTS=$(expand-var TEST_SANDBOX_OPTS)
        echo "Sandbox options: $BOXOPTS"
-       if ! $BOXCMD $BOXOPTS -- ./$PROBLEM 2>$TMPDIR/exec.out ; then
+       EXECMD=$(expand-var TEST_EXEC_CMD)
+       [ -z "$EXECMD" ] || echo "Exec command: $EXECMD" 
+       [ -z "$EXECMD" ] && EXECMD="./$PROBLEM" 
+       if ! $BOXCMD $BOXOPTS -- $EXECMD 2>$TMPDIR/exec.out ; then
                cat $TMPDIR/exec.out
                MSG=`tail -1 $TMPDIR/exec.out`
                test-result 0 "$MSG"
@@ -393,7 +413,10 @@ function test-run-interactive
        echo "Sandbox options: $BOXOPTS"
        ICCMD=$(expand-var IA_CHECK)
        echo "Interactive checker: $ICCMD"
-       if ! $HDIR/bin/iwrapper $BOXCMD $BOXOPTS -- ./$PROBLEM @@ $ICCMD 2>$TMPDIR/exec.out ; then
+       EXECMD=$(expand-var TEST_EXEC_CMD)
+       [ -z "$EXECMD" ] || echo "Exec command: $EXECMD" 
+       [ -z "$EXECMD" ] && EXECMD="./$PROBLEM" 
+       if ! $HDIR/bin/iwrapper $BOXCMD $BOXOPTS -- $EXECMD @@ $ICCMD 2>$TMPDIR/exec.out ; then
                cat $TMPDIR/exec.out
                MSG="`head -1 $TMPDIR/exec.out`"
                test-result 0 "$MSG"
@@ -407,7 +430,7 @@ function test-run-interactive
 function test-run-open-data
 {
        [ -f $SDIR/$TEST.out ] || test-result 0 "No solution"
-       ln $SDIR/$TEST.out $TDIR/$TEST.out
+       try-ln $SDIR/$TEST.out $TDIR/$TEST.out
 }
 
 # Syntax checks
@@ -435,7 +458,7 @@ function output-check
        MSG=
        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
+               [ -f $PDIR/$TEST.out ] && try-ln $PDIR/$TEST.out $TDIR/$TEST.ok
                OCHECK=$(expand-var OUTPUT_CHECK)
                echo "Output check command: $OCHECK"
                if ! eval $OCHECK 2>$TMPDIR/exec.out ; then