# The Evaluator -- Shell Function Library
# (c) 2001 Martin Mares <mj@ucw.cz>
+# General settings
+shopt -s dotglob
+
# Logging functions.
# File handles used: fd1=log, fd2=progress
function box-clean
{
[ -n "$BOXCMD" ] || die "box-init not called"
- # FIXME: Dot files
rm -rf $BOXDIR/*
}
function locate-source
{
- pstart "Locating source... "
+ pstart "Finding source... "
for a in $EXTENSIONS ; do
if [ -f $SDIR/$PROBLEM.$a ] ; then
[ -z "$SRCN" ] || die "Multiple source files found: $SDIR/$PROBLEM.$a and $SDIR/$SRCN. Please fix."
echo "Compiler input files:"
ls -Al $BOXDIR
+ echo "Compiler output:"
if ! $BOXCMD $COMP_SANDBOX_OPTS -- $CCMD 2>$TDIR/compile.out ; then
COMPILE_MSG="`cat $TDIR/compile.out`"
pend "FAILED: $COMPILE_MSG"
return 1
fi
cat $TDIR/compile.out
+ rm $TDIR/compile.out
echo "Compiler output files:"
ls -Al $BOXDIR
if [ ! -f $BOXDIR/$PROBLEM ] ; then
# Running of test program with file input/output
-function test-run-with-files
+function test-run
{
pcont "<init> "
box-clean
echo "Executable file: $TDIR/$PROBLEM"
cp $TDIR/$PROBLEM $BOXDIR/
echo "Input: $TDIR/$PROBLEM"
+ ln $PDIR/$TEST.in $TDIR/$TEST.in
cp $PDIR/$TEST.in $BOXDIR/$PROBLEM.in
echo "Input files:"
ls -Al $BOXDIR
TEST_MSG="`cat $TDIR/exec.out`"
pend "$TEST_MSG"
echo "$TEST_MSG"
- # FIXME: Better recognition of run-time errors
- echo >$PTSFILE "0 RT"
+ echo >>$PTSFILE "0 $TEST_MSG"
return 1
fi
+ cat $TDIR/exec.out
+ rm $TDIR/exec.out
echo "Output files:"
ls -Al $BOXDIR
- if [ ! -f $BOXDIR/$PROBLEM.out ] ; then
+ if [ ! -s $BOXDIR/$PROBLEM.out ] ; then
pend "No output file."
echo "No output file."
- echo >$PTSFILE "0 NO"
+ echo >>$PTSFILE "0 No output."
return 1
fi
- cp $BOXDIR/$PROBLEM.out $TDIR/$PROBLEM.out
+ cp $BOXDIR/$PROBLEM.out $TDIR/$TEST.out
+}
+
+# Syntax checks
+
+function syntax-check
+{
+ [ -n "$SYNTAX_CHECK" ] || return 0
+ pcont "<syntax> "
+ SCHECK="`eval echo $SYNTAX_CHECK`"
+ echo "Syntax check command: $SCHECK"
+ $SCHECK && return 0
+ pend "Wrong syntax."
+ echo "Wrong syntax."
+ echo >>$PTSFILE "0 Wrong syntax."
+ return 1
+}
+
+# Output checks
+
+function output-check
+{
+ pcont "<check> "
+ ln $PDIR/$TEST.out $TDIR/$TEST.ok
+ OCHECK="`eval echo $OUTPUT_CHECK`"
+ echo "Output check command: $OCHECK"
+ $OCHECK && return 0
+ pend "Wrong answer."
+ echo "Wrong answer."
+ echo >>$PTSFILE "0 Wrong answer."
+ return 1
+}
+
+# Setup of public commands
+
+function public-setup
+{
+ PDIR=$MO_PUBLIC/problems/$PROBLEM
+ SDIR=.
+ TDIR=~/.test
+ [ -d $PDIR ] || die "Unknown problem $PROBLEM"
+
+ pstart "Initializing... "
+ mkdir -p $TDIR
+ rm -rf $TDIR/*
+ BOXDIR=~/.box
+ mkdir -p $BOXDIR
+ rm -rf $BOXDIR/*
+ BOXCMD="$MO_PUBLIC/bin/box -c$BOXDIR"
+ exec >log
+ pend "OK (see 'log' for details)"
}