+ cat $TMPDIR/exec.out
+ test-epilog
+}
+
+# Running of interactive test programs
+
+function test-run-interactive
+{
+ test-prolog
+ pcont "<run> "
+ BOXOPTS="`eval echo $TEST_SANDBOX_OPTS`$BOX_EXTRAS"
+ echo "Sandbox options: $BOXOPTS"
+ ICCMD=`eval echo $IA_CHECK`
+ echo "Interactive checker: $ICCMD"
+ if ! $HDIR/bin/iwrapper $BOXCMD $BOXOPTS -- ./$PROBLEM @@ $ICCMD 2>$TMPDIR/exec.out ; then
+ cat $TMPDIR/exec.out
+ MSG="`head -1 $TMPDIR/exec.out`"
+ test-result 0 "$MSG"
+ fi
+ cat $TMPDIR/exec.out
+ 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
+ test-result 0 "$MSG"
+ fi
+ cat $TMPDIR/exec.out
+}
+
+# Output checks
+
+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
+ OCHECK=`eval echo $OUTPUT_CHECK`
+ echo "Output check command: $OCHECK"
+ 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
+ test-result 0 "$MSG"
+ fi
+ cat $TMPDIR/exec.out
+ MSG=`tail -1 $TMPDIR/exec.out`
+ fi
+ if [ -z "$MSG" ] ; then MSG="OK" ; fi
+ test-result $POINTS_PER_TEST "$MSG"
+}
+
+# Setup of public commands
+
+function public-setup
+{
+ HDIR=$MO_ROOT
+ PDIR=$MO_ROOT/problems/$PROBLEM
+ SDIR=.
+ TDIR=~/.test
+ TMPDIR=~/.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_ROOT/bin/box -c$BOXDIR"
+ exec >check-log
+ pend "OK (see 'check-log' for details)"
+}
+
+# Locate output of open data problem, test case TEST
+# Beware, SDIR and SRCN can contain spaces and other strange user-supplied characters.
+
+function open-locate
+{
+ [ -f $PDIR/$TEST.in ] || die "Unknown test $TEST"
+ if [ -n "$1" ] ; then
+ SDIR=`dirname "$1"`
+ SRCN=`basename "$1"`
+ else
+ SRCN=$SDIR/$PROBLEM$TEST.out