+#!/bin/bash
# The Evaluator -- Master Control Script
# (c) 2001 Martin Mares <mj@ucw.cz>
set -e
-cd
+if [ ! -f config -o ! -f bin/lib ] ; then
+ echo "Unable to find evaluator files!"
+ exit 1
+fi
. bin/lib
. config
-[ -n "$TEST_USER" ] || die "TEST_USER not set. Please fix."
-[ -d $MO_ROOT/$TEST_USER ] || die "TEST_USER set incorrectly. Please fix."
-[ -n "$2" ] || die "Usage: ev <contestant> <problem>"
-CT=$1
-PROBLEM=$2
-. bin/lib
-# Initialize the testing directory
-echo >&2 "Testing contestant $CT, problem $PROBLEM"
-echo >&2
-PDIR=problems/$PROBLEM
-SDIR=solutions/$CT/$PROBLEM
-TDIR=testing/$CT/$PROBLEM
-. bin/task-init
-. $PDIR/config
+# Set up environment:
+# HDIR home dir of the evaluator
+# PDIR problem specific data
+# SDIR contestant's solution
+# TDIR test results
+# BOXDIR sandbox
+# PROBLEM problem we're evaluating
-# Set up logging
-exec >>$TDIR/log
-HAVE_LOG=1
+[ -n "$2" ] || die "Usage: ev <contestant> <problem> [<program>]"
+CONTESTANT=$1
+PROBLEM=$2
+dir-init
+log-init
+. $PDIR/config
+box-init
-# Compile the solution
-( . bin/task-compile )
+# Compile the program
+locate-source $3
+compile
# Perform the tests
+PTSFILE=$TDIR/points
for TEST in $TESTS ; do
(
- pstart "Test $TEST: "
[ -f $PDIR/$TEST.config ] && . $PDIR/$TEST.config
exec >$TDIR/$TEST.log
- PTSFILE=$TDIR/$TEST.pts
- if [ ! -f $TDIR/compile.out ] ; then
- echo >$PTSFILE "0 --"
- die "No source file"
- fi
+ pstart "Test $TEST ($POINTS_PER_TEST points)... "
+ echo "Test $TEST ($POINTS_PER_TEST points)"
+ echo >>$PTSFILE -n "$TEST "
if [ ! -f $TDIR/$PROBLEM ] ; then
- echo >$PTSFILE "0 CE"
+ echo >$PTSFILE "0 Compile error."
die "No executable file"
fi
- pcont "<init> "
- box-init
- echo "Executable file: $TDIR/$PROBLEM"
- cp $TDIR/$PROBLEM $BOXDIR/
- echo "Input: $TDIR/$PROBLEM"
- cp $PDIR/$TEST.in $BOXDIR/$PROBLEM.in
- echo "Input files:"
- ls -Al $BOXDIR
- echo "Timeout: $TIME_LIMIT s"
- echo "Memory: $MEM_LIMIT KB"
- BOXOPTS="`eval echo $TEST_SANDBOX_OPTS`"
- echo "Sandbox options: $BOXOPTS"
-
- pcont "<run> "
-
+ test-run || exit 0
+ syntax-check || exit 0
+ output-check || exit 0
echo "Test completed OK ($POINTS_PER_TEST points)"
- echo >$PTSFILE "$POINTS_PER_TEST OK"
+ echo >>$PTSFILE "$POINTS_PER_TEST OK"
pend "OK"
)
done