X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=inline;f=bin%2Flib;h=c9a7f27a6e36be9494b8718cef9c1b6a711fcdb8;hb=41059938d4d279dbb3c6bf6712f8c84759f5d5c0;hp=ea516f17ede8cf3c42a6d6be7361d1eb2cf50e2f;hpb=fc23667b6f78c96c83e15a516602dc74f2773e24;p=moe.git diff --git a/bin/lib b/bin/lib index ea516f1..c9a7f27 100644 --- a/bin/lib +++ b/bin/lib @@ -208,6 +208,31 @@ function test-result P=`cat $TDIR/$TEST.pts` rm $TDIR/$TEST.pts fi + + # Translate signal numbers to readable strings + 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` + [ -z "$SG" ] || M="$M (SIG$SG)" + fi + + # Translate Free Pascal runtime errors to readable strings + RE=${M#Exited with error status } + if [ "$FREE_PASCAL_RTE" == 1 -a "$RE" != "$M" ] ; then + N="Runtime error $RE" + case "$RE" in + 200) M="$N: Division by zero" ;; + 201) M="$N: Range check error" ;; + 202) M="$N: Stack overflow" ;; + 203) M="$N: Heap overflow" ;; + 205) M="$N: Floating point overflow" ;; + 215) M="$N: Arithmetic overflow" ;; + 216) M="$N: Segmentation fault" ;; + ???) M="$N" ;; + esac + fi + echo "Verdict: $M" echo "Points: $P" test-verdict $P "$M" @@ -219,7 +244,7 @@ function test-prolog box-clean echo "Executable file: $TDIR/$PROBLEM" if [ ! -x $TDIR/$PROBLEM ] ; then - test-result 0 "Compile error." + test-result 0 "Compile error" fi cp $TDIR/$PROBLEM $BOXDIR/ BOX_EXTRAS= @@ -241,6 +266,10 @@ function test-prolog *) die "Unknown IN_TYPE $IN_TYPE" ;; esac + if [ -n "$EV_PEDANT" -a $IN_TYPE != none ] ; then + pcont " " + bin/pedant <$TDIR/$TEST.in | tr '\n' ' ' >&2 + fi case $OUT_TYPE in file) echo "Output file: $PROBLEM.out" [ $TASK_TYPE == interactive ] || BOX_EXTRAS="$BOX_EXTRAS -o/dev/null" @@ -265,10 +294,10 @@ function test-epilog echo "Sandbox contents after exit:" ls -Al $BOXDIR case ${OUT_TYPE:-$IO_TYPE} in - file) [ -f $BOXDIR/$PROBLEM.out ] || test-result 0 "No output file." + file) [ -f $BOXDIR/$PROBLEM.out ] || test-result 0 "No output file" cp $BOXDIR/$PROBLEM.out $TDIR/$TEST.out ;; - stdio) [ -f $BOXDIR/.stdout ] || test-result 0 "No output file." + stdio) [ -f $BOXDIR/.stdout ] || test-result 0 "No output file" cp $BOXDIR/.stdout $TDIR/$TEST.out ;; esac @@ -310,18 +339,27 @@ function test-run-interactive 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 " " 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 + if [ -z "$MSG" ] ; then MSG="Wrong syntax" ; fi test-result 0 "$MSG" fi cat $TMPDIR/exec.out @@ -332,7 +370,7 @@ function syntax-check function output-check { MSG= - if [ -n "$OUTPUT_CHECK" -a "$OUT_TYPE" != none ] ; then + if [ -n "$OUTPUT_CHECK" -a "$OUT_TYPE" != none -a -z "$EV_NOCHECK" ] ; then pcont " " [ -f $PDIR/$TEST.out ] && ln $PDIR/$TEST.out $TDIR/$TEST.ok OCHECK=`eval echo $OUTPUT_CHECK` @@ -340,7 +378,7 @@ function output-check 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 + if [ -z "$MSG" ] ; then MSG="Wrong answer" ; fi test-result 0 "$MSG" fi cat $TMPDIR/exec.out @@ -384,5 +422,5 @@ function open-locate else SRCN=$SDIR/$PROBLEM$TEST.out fi - [ -f $SRCN ] || fatal "Output file $SRCN not found" + [ -f "$SDIR/$SRCN" ] || fatal "Output file $SRCN not found" }