Le 17 févr. 2012 à 09:29, Akim Demaille a écrit : > Ah, bummer, both are using "input" as input file > name. I guess you ran it -j. Will fix this, thanks > a lot!
Fixed and installed in the following patch. I'm quite ambivalent here: I want these directories to be novice readable, they are really meant to demonstrate grammars. That's why the "test suites" are so simple minded, and that is also why I do not want to clutter them with too much clutter such as portability issues and so forth. Yet, as a result, I have a large part of code duplication between both versions of "test" :( I think I won't be able to resist much longer, and will fuse them. I just need to have it really simple and straightforward to understand. From c3a2e0e6dd060143cbd2854b61e435552883a6b7 Mon Sep 17 00:00:00 2001 From: Akim Demaille <[email protected]> Date: Fri, 17 Feb 2012 10:12:06 +0100 Subject: [PATCH] examples: fix the test suites. * examples/calc++/test, examples/mfcalc/test (me): Be more meaningfull: include the example name. (prog): Factor. (run): Avoid printf, use echo. Add missing parens. (cleanup): New. Call it on trap. Remove the previous "rm" that did the cleanup. Move into a private directory to avoid concurrency issues. Reported by Jim Meyering. --- examples/calc++/test | 34 +++++++++++++++++++++++++--------- examples/mfcalc/test | 38 +++++++++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/examples/calc++/test b/examples/calc++/test index 0dfe368..7930dc2 100755 --- a/examples/calc++/test +++ b/examples/calc++/test @@ -15,7 +15,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -me=`basename $0` +me=`dirname $0` +me=`basename $me` # Number of the current test. number=1 @@ -24,31 +25,47 @@ number=1 exit=true # The exercised program. -prog=./examples/calc++/calc++ +prog=../examples/$me/$me + +# cleanup +# ------- +cleanup () +{ + local status=$? + if test -z "$DEBUG"; then + cd .. + rm -rf $$.dir + fi + exit $status +} +trap cleanup 0 1 2 13 15 +mkdir $$.dir +cd $$.dir # run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS] # --------------------------------------------------------- run () { - # Effective and expected exit status. + # Expected exit status. local sta_exp=$1 shift + # Expected output. local out_exp=$1 shift $prog "$@" - <input >out_eff + # Effective exit status. local sta_eff=$? + # Effective output. local out_eff=`cat out_eff` if test $sta_eff -eq $sta_exp; then if test "$out_eff" = "$out_exp"; then - printf "$me: PASS: %2d\n" $number + echo "$me: PASS: $number" else - printf "$me: FAIL: %2d (expected output: %s, effective: %s\n" \ - $number "$out_exp" "$out_eff" + echo "$me: FAIL: $number (expected output: $out_exp, effective: $out_eff)" exit=false fi else - printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \ - $number $sta_exp $sta_eff + echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)" exit=false fi number=`expr $number + 1` @@ -89,5 +106,4 @@ d := a + b * c EOF run 1 '' -rm input out_eff $exit diff --git a/examples/mfcalc/test b/examples/mfcalc/test index edcbc14..f848bbd 100755 --- a/examples/mfcalc/test +++ b/examples/mfcalc/test @@ -15,7 +15,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -me=`basename $0` +me=`dirname $0` +me=`basename $me` # Number of the current test. number=1 @@ -24,36 +25,53 @@ number=1 exit=true # The exercised program. -prog=./examples/mfcalc/mfcalc +prog=../examples/$me/$me + +# cleanup +# ------- +cleanup () +{ + local status=$? + if test -z "$DEBUG"; then + cd .. + rm -rf $$.dir + fi + exit $status +} +trap cleanup 0 1 2 13 15 +mkdir $$.dir +cd $$.dir # run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS] # --------------------------------------------------------- run () { - # Effective and expected exit status. + # Expected exit status. local sta_exp=$1 shift + # Expected output. local out_exp=$1 shift - $prog "$@" - < input >out_eff + $prog "$@" - <input >out_eff + # Effective exit status. local sta_eff=$? + # Effective output. local out_eff=`cat out_eff` if test $sta_eff -eq $sta_exp; then if test "$out_eff" = "$out_exp"; then - printf "$me: PASS: %2d\n" $number + echo "$me: PASS: $number" else - printf "$me: FAIL: %2d (expected output: %s, effective: %s\n" \ - $number "$out_exp" "$out_eff" + echo "$me: FAIL: $number (expected output: $out_exp, effective: $out_eff)" exit=false fi else - printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \ - $number $sta_exp $sta_eff + echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)" exit=false fi number=`expr $number + 1` } + cat >input <<EOF 1+2*3 EOF @@ -65,6 +83,4 @@ cat >input <<EOF EOF run 0 9 - -rm input out_eff $exit -- 1.7.9
