X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=bin%2Flib;h=537bf58764c8d81ed514e65bf49d1c71b3967c97;hb=2080a3ad4227ac0b3d306afa7f355a6ae2de8213;hp=48c1a8f254d0b21f37344c7589c67cef063accb1;hpb=02d57c3865e8604c609a8f4ba20b8340103f9286;p=moe.git diff --git a/bin/lib b/bin/lib index 48c1a8f..537bf58 100644 --- a/bin/lib +++ b/bin/lib @@ -48,7 +48,7 @@ function box-init mkdir -p box else pcont "used account $TEST_USER, " - BOXDIR=$MO_ROOT/$TEST_USER + BOXDIR=$MO_ROOT/eval/$TEST_USER BOXCMD=bin/box-$TEST_USER fi [ -d $BOXDIR -a -f $BOXCMD ] || die "Sandbox set up incorrectly" @@ -70,6 +70,7 @@ function box-clean function dir-init { pstart "Initializing... " + HDIR=. PDIR=problems/$PROBLEM SDIR=solutions/$CONTESTANT/$PROBLEM TDIR=testing/$CONTESTANT/$PROBLEM @@ -93,11 +94,12 @@ EOF function locate-source { - pstart "Locating source... " + pstart "Finding source... " + SBASE=${1:-$PROBLEM} for a in $EXTENSIONS ; do - if [ -f $SDIR/$PROBLEM.$a ] ; then + if [ -f $SDIR/$SBASE.$a ] ; then [ -z "$SRCN" ] || die "Multiple source files found: $SDIR/$PROBLEM.$a and $SDIR/$SRCN. Please fix." - SRCN=$PROBLEM.$a + SRCN=$SBASE.$a SRCEXT=$a fi done @@ -121,13 +123,15 @@ function compile SRC=$SRCN EXE=$PROBLEM CCMD=COMP_$SRCEXT - CCMD="`eval echo ${!CCMD}`" - COMP_SANDBOX_OPTS="`eval echo $COMP_SANDBOX_OPTS`" + CCMD=`eval echo ${!CCMD}` + COMP_SANDBOX_OPTS=`eval echo $COMP_SANDBOX_OPTS` echo "Compiler command: $CCMD" echo "Compiler sandbox options: $COMP_SANDBOX_OPTS" + eval $COMP_SANDBOX_INIT 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" @@ -149,56 +153,107 @@ function compile pend "OK" } +# Running of test program according to current task type + +function test-run +{ + test-run-$TASK_TYPE +} + # Running of test program with file input/output -function test-run-with-files +function test-run-file { pcont " " 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 + eval $SANDBOX_INIT echo "Input files:" ls -Al $BOXDIR pcont " " echo "Timeout: $TIME_LIMIT s" echo "Memory: $MEM_LIMIT KB" - BOXOPTS="`eval echo $TEST_SANDBOX_OPTS`" + BOXOPTS=`eval echo $TEST_SANDBOX_OPTS` echo "Sandbox options: $BOXOPTS" if ! $BOXCMD $BOXOPTS -- ./$PROBLEM 2>$TDIR/exec.out ; then - TEST_MSG="`cat $TDIR/exec.out`" + TEST_MSG="`head -1 $TDIR/exec.out`" pend "$TEST_MSG" - echo "$TEST_MSG" - echo >$PTSFILE "0 $TEST_MSG" + cat $TDIR/exec.out + rm $TDIR/exec.out + echo >>$PTSFILE "0 $TEST_MSG" return 1 fi cat $TDIR/exec.out rm $TDIR/exec.out + test-fetch-output || return 1 +} + +function test-fetch-output +{ echo "Output files:" ls -Al $BOXDIR - if [ ! -s $BOXDIR/$PROBLEM.out ] ; then + if [ ! -f $BOXDIR/$PROBLEM.out ] ; then pend "No output file." echo "No output file." - echo >$PTSFILE "0 No output." + echo >>$PTSFILE "0 No output." return 1 fi cp $BOXDIR/$PROBLEM.out $TDIR/$TEST.out } +# Running of interactive test programs + +function test-run-interactive +{ + pcont " " + 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 + eval $SANDBOX_INIT + echo "Input files:" + ls -Al $BOXDIR + + pcont " " + echo "Timeout: $TIME_LIMIT s" + echo "Memory: $MEM_LIMIT KB" + BOXOPTS=`eval echo $TEST_SANDBOX_OPTS` + echo "Sandbox options: $BOXOPTS" + ICCMD=`eval echo $IA_CHECK` + echo "Interactive checker: $ICCMD" + if ! $HDIR/bin/iwrapper $BOXCMD $BOXOPTS -- ./$PROBLEM @@ $ICCMD 2>$TDIR/exec.out ; then + TEST_MSG="`head -1 $TDIR/exec.out`" + pend "$TEST_MSG" + cat $TDIR/exec.out + rm $TDIR/exec.out + echo "$TEST_MSG" + echo >>$PTSFILE "0 $TEST_MSG" + return 1 + fi + cat $TDIR/exec.out + rm $TDIR/exec.out + [ -z "$OUTPUT_CHECK" ] || test-fetch-output || return 1 +} + # Syntax checks function syntax-check { [ -n "$SYNTAX_CHECK" ] || return 0 pcont " " - SCHECK="`eval echo $SYNTAX_CHECK`" + SCHECK=`eval echo $SYNTAX_CHECK` echo "Syntax check command: $SCHECK" - $SCHECK && return 0 + eval $SCHECK && return 0 pend "Wrong syntax." echo "Wrong syntax." - echo >$PTSFILE "0 Wrong syntax." + echo >>$PTSFILE "0 Wrong syntax." return 1 } @@ -206,13 +261,44 @@ function syntax-check function output-check { + [ -n "$OUTPUT_CHECK" ] || return 0 pcont " " - ln $PDIR/$TEST.out $TDIR/$TEST.ok - OCHECK="`eval echo $OUTPUT_CHECK`" + [ -f $PDIR/$TEST.out ] && ln $PDIR/$TEST.out $TDIR/$TEST.ok + OCHECK=`eval echo $OUTPUT_CHECK` echo "Output check command: $OCHECK" - $OCHECK && return 0 + eval $OCHECK && return 0 pend "Wrong answer." echo "Wrong answer." - echo >$PTSFILE "0 Wrong answer." + echo >>$PTSFILE "0 Wrong answer." return 1 } + +# Setup of public commands + +function public-setup +{ + HDIR=$MO_PUBLIC + 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)" +} + +# Locate output of open data problem, test case TEST + +function open-locate +{ + [ -f $PDIR/$TEST.in ] || die "Unknown test $TEST" + SRCN=$SDIR/$PROBLEM$TEST.out + [ -f $SRCN ] || die "Output file $SRCN not found" +}