X-Git-Url: http://nitlanguage.org diff --git a/tests/tests.sh b/tests/tests.sh index 99e4485..7f291d0 100755 --- a/tests/tests.sh +++ b/tests/tests.sh @@ -21,6 +21,8 @@ export LANG=C export NIT_TESTING=true +unset NIT_DIR + usage() { e=`basename "$0"` @@ -30,7 +32,7 @@ Usage: $e [options] modulenames -v Verbose (show tests steps) -h This help --tap Produce TAP output ---engine Use a specific engine (default=nitc) +--engine Use a specific engine (default=nitg) --noskip Do not skip a test even if the .skip file matches --[no]soso Force enable (or disable) SOSO END @@ -48,7 +50,7 @@ function compare_to_result() local pattern="$1" local sav="$2" if [ ! -r "$sav" ]; then return 0; fi - diff -u "out/$pattern.res" "$sav" > "out/$pattern.diff.sav.log" + diff -u "$sav" "out/$pattern.res" > "out/$pattern.diff.sav.log" if [ "$?" == 0 ]; then return 1 fi @@ -57,7 +59,7 @@ function compare_to_result() sed '/[Ww]arning/d;/[Ee]rror/d' "$sav" > "out/$pattern.sav2" grep '[Ee]rror' "out/$pattern.res" >/dev/null && echo "Error" >> "out/$pattern.res2" grep '[Ee]rror' "$sav" >/dev/null && echo "Error" >> "out/$pattern.sav2" - diff -u "out/$pattern.res2" "out/$pattern.sav2" > "out/$pattern.diff.sav.log" + diff -u "out/$pattern.sav2" "out/$pattern.res2" > "out/$pattern.diff.sav.log" if [ "$?" == 0 ]; then return 2 else @@ -72,6 +74,7 @@ function process_result() # Result pattern=$1 description=$2 + pack=$3 SAV="" NSAV="" FIXME="" @@ -80,50 +83,69 @@ function process_result() NSOSO="" SOSOF="" NSOSOF="" - base=${description%%_*} - echo >>$xml "" - for sav in "sav/$engine/$pattern.res" "sav/$pattern.res" "sav/$pattern.sav"; do - compare_to_result "$pattern" "$sav" - case "$?" in - 0) - ;; # no file - 1) - SAV="$sav" ;; - 2) - SOSO="$sav" ;; - 3) - NSAV="$sav";; - esac - done - for sav in "sav/$engine/fixme/$pattern.res" "sav/fixme/$pattern.res" "sav/$pattern.fail"; do + OLD="" + LIST="" + FIRST="" + echo >>$xml "" + #for sav in "sav/$engine/fixme/$pattern.res" "sav/$engine/$pattern.res" "sav/fixme/$pattern.res" "sav/$pattern.res" "sav/$pattern.sav"; do + for savdir in $savdirs; do + sav=$savdir/$pattern.res compare_to_result "$pattern" "$sav" - case "$?" in - 0) - ;; # no file - 1) - FIXME="$sav" ;; - 2) + + case "$? $sav" in + 0*) + continue;; # no file + 1*/fixme/*) + OLD="$LIST" + FIXME="$sav" + ;; + 1*) + OLD="$LIST" + SAV="$sav" + ;; + 2*/fixme/*) SOSOF="$sav" ;; - 3) - NFIXME="$sav";; + 2*) + SOSO="$sav" ;; + 3*/fixme/*) + if [ -z "$FIRST" ]; then + NFIXME="$sav" + FIRST="$sav" + fi + ;; + 3*) + if [ -z "$FIRST" ]; then + NSAV="$sav" + FIRST="$sav" + fi + ;; esac + LIST="$LIST $sav" done + OLD=`echo "$OLD" | sed -e 's/ */ /g' -e 's/^ //' -e 's/ $//'` grep 'NOT YET IMPLEMENTED' "out/$pattern.res" >/dev/null NYI="$?" if [ -n "$SAV" ]; then if [ -n "$tap" ]; then echo "ok - $description" - elif [ -z "$FIXME" ]; then - echo "[ok] out/$pattern.res $SAV" + elif [ -n "$OLD" ]; then + echo "[*ok*] out/$pattern.res $SAV - but $OLD remains!" + echo >>$xml "" + remains="$remains $OLD" else - echo "[ok] out/$pattern.res $SAV - but $FIXME remains!" + echo "[ok] out/$pattern.res $SAV" fi ok="$ok $pattern" elif [ -n "$FIXME" ]; then if [ -n "$tap" ]; then echo "not ok - $description # TODO expected failure" + elif [ -n "$OLD" ]; then + echo "[*fixme*] out/$pattern.res $FIXME - but $OLD remains!" + echo >>$xml "" + remains="$remains $OLD" else echo "[fixme] out/$pattern.res $FIXME" + echo >>$xml "" fi todos="$todos $pattern" elif [ -n "$SOSO" ]; then @@ -138,6 +160,7 @@ function process_result() echo "not ok - $description # TODO not yet implemented" else echo "[todo] out/$pattern.res -> not yet implemented" + echo >>$xml "" fi todos="$todos $pattern" elif [ -n "$SOSOF" ]; then @@ -145,6 +168,7 @@ function process_result() echo "not ok - $description # TODO SOSO expected failure" else echo "[fixme soso] out/$pattern.res $SOSOF" + echo >>$xml "" fi todos="$todos $pattern" elif [ -n "$NSAV" ]; then @@ -155,7 +179,7 @@ function process_result() fi echo >>$xml "" echo >>$xml ">$xml -n 50 out/$pattern.diff.sav.log + cat -v out/$pattern.diff.sav.log | head >>$xml -n 50 echo >>$xml "]]>" nok="$nok $pattern" echo "$ii" >> "$ERRLIST" @@ -167,7 +191,7 @@ function process_result() fi echo >>$xml "" echo >>$xml ">$xml -n 50 out/$pattern.diff.sav.log + cat -v out/$pattern.diff.sav.log | head >>$xml -n 50 echo >>$xml "]]>" nok="$nok $pattern" echo "$ii" >> "$ERRLIST" @@ -177,8 +201,17 @@ function process_result() else echo "[=== no sav ===] out/$pattern.res" fi + echo >>$xml "" + echo >>$xml ">$xml out/$pattern.res + echo >>$xml "]]>" nos="$nos $pattern" fi + if test -s out/$pattern.cmp.err; then + echo >>$xml ">$xml out/$pattern.cmp.err + echo >>$xml "]]>" + fi echo >>$xml "" } @@ -192,6 +225,7 @@ need_skip() else echo "=> $2: [skip]" fi + echo >>$xml "" return 0 fi return 1 @@ -204,17 +238,17 @@ find_nitc() recent=`ls -t ../src/$name ../src/$name_[0-9] ../bin/$name ../c_src/$name 2>/dev/null | head -1` if [[ "x$recent" == "x" ]]; then if [ -n "$tap" ]; then - echo "not ok - find engine $name" - echo "Bail out! Could not find engine $name, aborting" + echo "not ok - find binary for $engine" + echo "Bail out! Could not find binary for engine $engine, aborting" else - echo "Could not find engine $name, aborting" + echo "Could not find binary for engine $engine, aborting" fi exit 1 fi if [ -n "$tap" ]; then - echo "ok - find engine $name: $recent" + echo "ok - find binary for $engine: $recent $OPT" else - echo "Using engine $name from: $recent" + echo "Find binary for engine $engine: $recent $OPT" fi NITC=$recent } @@ -222,7 +256,7 @@ find_nitc() verbose=false stop=false tapcount=0 -engine=nitc +engine=nitg noskip= while [ $stop = false ]; do case $1 in @@ -239,12 +273,43 @@ while [ $stop = false ]; do done enginebinname=$engine case $engine in - nitc) ;; - nitg) OPT="--global $OPT";; - nitg-s) enginebinname=nitg; OPT="--separate $OPT";; - nitg-e) enginebinname=nitg; OPT="--erasure $OPT";; - nit) engine=niti ;; - niti) enginebinname=nit ;; + nitg) + engine=nitg-s; + enginebinname=nitg; + savdirs="sav/$engine/fixme/ sav/$engine/ sav/fixme/ sav/" + OPT="--separate $OPT" + ;; + nitg-s) + enginebinname=nitg; + savdirs="sav/$engine/fixme/ sav/$engine/ sav/fixme/ sav/" + OPT="--separate $OPT" + ;; + nitg-e) + enginebinname=nitg; + savdirs="sav/$engine/fixme/ sav/$engine/ sav/fixme/ sav/" + OPT="--erasure $OPT" + ;; + nitg-g) + enginebinname=nitg; + savdirs="sav/$engine/fixme/ sav/$engine/ sav/fixme/ sav/" + OPT="--global $OPT" + ;; + nit) + engine=niti + savdirs="sav/$engine/fixme/ sav/$engine/ sav/fixme/ sav/" + ;; + niti) + enginebinname=nit + savdirs="sav/$engine/fixme/ sav/$engine/ sav/fixme/ sav/" + ;; + nitc) + echo "disabled engine $engine" + exit 0 + ;; + *) + echo "unknown engine $engine" + exit 1 + ;; esac # The default nitc compiler @@ -299,8 +364,10 @@ for ii in "$@"; do fi f=`basename "$ii" .nit` + pack=`echo $ii | perl -p -e 's|^../([^/]*)/([a-zA-Z_]*).*|\1.\2| || s|^([a-zA-Z]*)[^_]*_([a-zA-Z]*).*|\1.\2| || s|\W*([a-zA-Z_]*).*|\1|'` + # Sould we skip the file for this engine? - need_skip $f $f && continue + need_skip $f $f $pack && continue tmp=${ii/../AA} if [ "x$tmp" = "x$ii" ]; then @@ -314,7 +381,7 @@ for ii in "$@"; do ff="out/$bf" # Sould we skip the alternative for this engine? - need_skip $bf $bf && continue + need_skip $bf $bf $pack && continue test -z "$tap" && echo -n "=> $bf: " @@ -348,7 +415,7 @@ END if [ "$ERR" != 0 ]; then test -z "$tap" && echo -n "! " cat "$ff.compile.log" "$ff.cmp.err" > "$ff.res" - process_result $bf $bf + process_result $bf $bf $pack elif [ -x "./$ff.bin" ]; then test -z "$tap" && echo -n ". " # Execute @@ -369,7 +436,7 @@ END fi cp "$ff.res" "$ff.res2" cat "$ff.cmp.err" "$ff.err" "$ff.res2" > "$ff.res" - process_result $bf $bf + process_result $bf $bf $pack if [ -f "$f.args" ]; then fargs=$f.args @@ -382,7 +449,7 @@ END name="$bf args $cptr" # Sould we skip the input for this engine? - need_skip $bff " $name" && continue + need_skip $bff " $name" $pack && continue rm -rf "$fff.res" "$fff.err" "$fff.write" 2> /dev/null if [ "x$verbose" = "xtrue" ]; then @@ -392,7 +459,7 @@ END test -z "$tap" && echo -n "==> $name " echo "./$ff.bin $args" > "./$fff.bin" chmod +x "./$fff.bin" - sh -c "NIT_NO_STACK=1 $TIMEOUT ./$fff.bin < $inputs > $fff.res 2>$fff.err" + WRITE="$fff.write" sh -c "NIT_NO_STACK=1 $TIMEOUT ./$fff.bin < $inputs > $fff.res 2>$fff.err" if [ "x$verbose" = "xtrue" ]; then cat "$fff.res" cat >&2 "$fff.err" @@ -406,14 +473,14 @@ END cp "$fff.res" "$fff.res2" cat "$fff.err" "$fff.res2" > "$fff.res" fi - process_result $bff " $name" + process_result $bff " $name" $pack done < $fargs fi else test -z "$tap" && echo -n "! " cat "$ff.cmp.err" > "$ff.res" echo "Compilation error" > "$ff.res" - process_result $bf "$bf" + process_result $bf "$bf" $pack fi done done @@ -424,9 +491,11 @@ if [ -n "$tap" ]; then echo "# not ok:" `echo $nok | wc -w` echo "# no sav:" `echo $nos | wc -w` echo "# todo/fixme:" `echo $todos | wc -w` + echo "# of sav that remains:" `echo $remains | wc -w` exit fi +echo "engine: $engine ($enginebinname $OPT)" echo "ok: " `echo $ok | wc -w` "/" `echo $ok $nok $nos $todos | wc -w` if [ -n "$nok" ]; then @@ -439,6 +508,9 @@ fi if [ -n "$todos" ]; then echo "todo/fixme: $todos" fi +if [ -n "$remains" ]; then + echo "sav that remains: $remains" +fi # write $ERRLIST if [ "x$ERRLIST" != "x" ]; then