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
;;
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
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"
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"
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
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