From db5b3a89b415dadc725ea6271d5bb09e27a7969d Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 20 Sep 2000 11:58:23 +0000 Subject: [PATCH 1/1] * tests/atgeneral.m4: Update from Autoconf. * tests/calc.m4 (_AT_DATA_CALC_Y, AT_DATA_CALC_Y, _AT_CHECK_CALC) (AT_CHECK_CALC): New macros. Use these macros to test bison with options `', `--raw', `--debug', `--yacc', `--yacc --debug'. --- ChangeLog | 8 ++++ tests/atgeneral.m4 | 80 +++++++++++++++++++++------------------ tests/calc.m4 | 94 ++++++++++++++++++++++++++++++++++++---------- 3 files changed, 126 insertions(+), 56 deletions(-) diff --git a/ChangeLog b/ChangeLog index a3b6d106..1299ef52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2000-09-20 Akim Demaille + + * tests/atgeneral.m4: Update from Autoconf. + * tests/calc.m4 (_AT_DATA_CALC_Y, AT_DATA_CALC_Y, _AT_CHECK_CALC) + (AT_CHECK_CALC): New macros. + Use these macros to test bison with options `', `--raw', + `--debug', `--yacc', `--yacc --debug'. + 2000-09-19 Akim Demaille * src/output.c: Formatting changes. diff --git a/tests/atgeneral.m4 b/tests/atgeneral.m4 index 9077a1cc..bbfa24a3 100644 --- a/tests/atgeneral.m4 +++ b/tests/atgeneral.m4 @@ -1,4 +1,4 @@ -divert(-1) -*- shell-script -*- +divert(-1) -*- Autoconf -*- # `m4' macros used in building test suites. # Copyright (C) 2000 Free Software Foundation, Inc. @@ -45,14 +45,15 @@ divert(-1) -*- shell-script -*- # any notice of this special exception to the GPL from your modified # version. +changequote() changequote([, ]) -define(AT_DEFINE, defn([define])) -define(AT_EVAL, defn([eval])) -define(AT_FORMAT, defn([format])) -define(AT_INCLUDE, defn([include])) -define(AT_SHIFT, defn([shift])) -define(AT_UNDEFINE, defn([undefine])) +define([AT_DEFINE], defn([define])) +define([AT_EVAL], defn([eval])) +define([AT_FORMAT], defn([format])) +define([AT_INCLUDE], defn([include])) +define([AT_SHIFT], defn([shift])) +define([AT_UNDEFINE], defn([undefine])) undefine([define]) undefine([eval]) @@ -61,8 +62,9 @@ undefine([include]) undefine([shift]) undefine([undefine]) -# AT_CASE(SWITCH, VAL1, IF-VAL1, VAL2, IF-VAL2, ..., DEFAULT) +# AT_CASE(SWITCH, VAL1, IF-VAL1, VAL2, IF-VAL2, ..., DEFAULT) +# ----------------------------------------------------------- # m4 equivalent of # switch (SWITCH) # { @@ -79,7 +81,7 @@ undefine([undefine]) # }. # All the values are optional, and the macro is robust to active # symbols properly quoted. -AT_DEFINE(AT_CASE, +AT_DEFINE([AT_CASE], [ifelse([$#], 0, [], [$#], 1, [], [$#], 2, [$2], @@ -94,23 +96,24 @@ AT_DEFINE(AT_CASE, # AT_LINE - +# ------- # Return the current file sans directory, a colon, and the current line. -AT_DEFINE(AT_LINE, +AT_DEFINE([AT_LINE], [patsubst(__file__, ^.*/\(.*\), \1):__line__]) -# AT_INIT(PROGRAM) +# AT_INIT(PROGRAM) +# ---------------- # Begin testing suite, using PROGRAM to check version. The search path # should be already preset so the proper executable will be selected. -AT_DEFINE(AT_INIT, +AT_DEFINE([AT_INIT], [AT_DEFINE(AT_ordinal, 0) . ./atconfig # Snippet (3 -at_usage="Usage: [$]0 [OPTION]... +at_usage="Usage: $[0] [OPTION]... -e Abort the full suite and inhibit normal clean up if a test fails -n Do not redirect stdout and stderr and do not test their contents @@ -118,16 +121,16 @@ at_usage="Usage: [$]0 [OPTION]... -v Force more detailed output, default for debugging scripts unless -s -x Have the shell to trace command execution; also implies option -n" -while test [$][#] -gt 0; do - case "[$]1" in +while test $[#] -gt 0; do + case "$[1]" in --help) echo "$at_usage"; exit 0 ;; - --version) echo "[$]0 ($at_package) $at_version"; exit 0 ;; + --version) echo "$[0] ($at_package) $at_version"; exit 0 ;; -e) at_stop_on_error=1; shift ;; -n) at_no_redirs=1; shift ;; -s) at_verbose=; at_silent=1; shift ;; -v) at_verbose=1; at_silent=; shift ;; -x) at_traceon='set -vx'; at_traceoff='set +vx'; at_no_redirs=1; shift ;; - *) echo 1>&2 "Try \`[$]0 --help' for more information."; exit 1 ;; + *) echo 1>&2 "Try \`$[0] --help' for more information."; exit 1 ;; esac done @@ -197,13 +200,13 @@ else sed -n '/^[#] Snippet (1/,/^[#] Snippet )1/p' atconfig test -z "$at_silent" && echo 'at_verbose=1' sed -n '/^[#] Snippet (2/,/^[#] Snippet )2/p' atconfig - sed -n "/^[#] Snippet (3/,/^[#] Snippet )3/p" [$]0 - sed -n "/^[#] Snippet (c$at_group(/,/^[#] Snippet )c$at_group)/p" [$]0 + sed -n "/^[#] Snippet (3/,/^[#] Snippet )3/p" $[0] + sed -n "/^[#] Snippet (c$at_group(/,/^[#] Snippet )c$at_group)/p" $[0] at_desc="`sed -n \ - '/^[#] Snippet (d'$at_group'(/,/^[#] Snippet )d'$at_group')/p' [$]0 \ + '/^[#] Snippet (d'$at_group'(/,/^[#] Snippet )d'$at_group')/p' $[0] \ | sed -n '2s/^[#] //p'`" echo 'if test -n "$at_verbose"; then' - echo ' at_banner="[$]0: '$at_desc'"' + echo ' at_banner="$[0]: '$at_desc'"' echo ' at_dashes=`echo $at_banner | sed s/./=/g`' echo ' echo' echo ' echo "$at_dashes"' @@ -211,8 +214,8 @@ else echo ' echo "$at_dashes"' echo 'fi' echo - sed -n "/^[#] Snippet (d$at_group(/,/^[#] Snippet )d$at_group)/p" [$]0 - sed -n "/^[#] Snippet (s$at_group(/,/^[#] Snippet )s$at_group)/p" [$]0 + sed -n "/^[#] Snippet (d$at_group(/,/^[#] Snippet )d$at_group)/p" $[0] + sed -n "/^[#] Snippet (s$at_group(/,/^[#] Snippet )s$at_group)/p" $[0] echo 'exit 0' ) | grep -v '^[#] Snippet' > debug-$at_group.sh chmod +x debug-$at_group.sh @@ -250,10 +253,12 @@ fi exit 0 divert[]dnl -]) +])# AT_INIT -# AT_SETUP(DESCRIPTION) + +# AT_SETUP(DESCRIPTION) +# --------------------- # Start a group of related tests, all to be executed in the same subshell. # The group is testing what DESCRIPTION says. @@ -283,16 +288,16 @@ $at_traceon # AT_CLEANUP(FILES) - +# ----------------- # Complete a group of related tests, recursively remove those FILES # created within the test. There is no need to list stdout, stderr, # nor files created with AT_DATA. -AT_DEFINE(AT_CLEANUP, +AT_DEFINE([AT_CLEANUP], $at_traceoff [[#] Snippet )s[]AT_ordinal[]) ) - case [$]? in + case $? in 0) echo ok ;; 77) echo "ignored near \``cat at-check-line`'" @@ -320,25 +325,26 @@ fi popdef([AT_data_experr]) popdef([AT_data_expout]) popdef([AT_data_files]) -popdef([AT_group_description])]) +popdef([AT_group_description])[]dnl +])# AT_CLEANUP # AT_DATA(FILE, CONTENTS) - +# ----------------------- # Initialize an input data FILE with given CONTENTS, which should end with # an end of line. # This macro is not robust to active symbols in CONTENTS *on purpose*. # If you don't want CONTENT to be evaluated, quote it twice. -AT_DEFINE(AT_DATA, +AT_DEFINE([AT_DATA], [AT_DEFINE([AT_data_files], AT_data_files[ ]$1) -cat > $1 <<'EOF' -$2[]EOF +cat >$1 <<'_ATEOF' +$2[]_ATEOF ]) # AT_CHECK(COMMANDS, [STATUS], STDOUT, STDERR) - +# -------------------------------------------- # Execute a test by performing given shell COMMANDS. These commands # should normally exit with STATUS, while producing expected STDOUT and # STDERR contents. The special word `expout' for STDOUT means that file @@ -349,7 +355,7 @@ $2[]EOF # STDOUT and STDERR can be the special value `ignore', in which case # their content is not checked. -AT_DEFINE(AT_CHECK, +AT_DEFINE([AT_CHECK], [$at_traceoff test -n "$at_verbose" \ && echo "$srcdir/AT_LINE: testing..." @@ -383,6 +389,6 @@ $at_diff experr stderr || exit 1], [echo $at_n "patsubst([$4], [\([\"`$]\)], \\\1)$at_c" | $at_diff - stderr || exit 1]) fi $at_traceon -]) +])# AT_CHECK divert(0)dnl diff --git a/tests/calc.m4 b/tests/calc.m4 index 2af544f5..c365924f 100644 --- a/tests/calc.m4 +++ b/tests/calc.m4 @@ -6,14 +6,25 @@ Simple Calculator. EOF + ## ---------------------------------------------------- ## ## Compile the grammar described in the documentation. ## ## ---------------------------------------------------- ## -# We use integers to avoid dependencies upon the precision of doubles. -AT_SETUP(Compiling a grammar) -AT_DATA([calc.y], +# ------------------------- # +# Helping Autotest macros. # +# ------------------------- # + + +# _AT_DATA_CALC_Y($1, $2, $3) +# --------------------------- +# Produce `calc.y'. Don't call this macro directly, because it contains +# some occurrences of `$1' etc. which will be interpreted by m4. So +# you should call it with $1, $2, and $3 as arguments, which is what +# AT_DATA_CALC_Y does. +AT_DEFINE([_AT_DATA_CALC_Y], +[AT_DATA([calc.y], [[/* Infix notation calculator--calc */ %{ @@ -140,34 +151,79 @@ main (int argn, const char **argv) perror (argv[1]); exit (1); } + +#if YYDEBUG + yydebug = 1; +#endif yyparse (); return 0; } ]]) +])# _AT_DATA_CALC_Y -# Specify the output files to avoid problems on different file systems. -AT_CHECK([bison calc.y -o calc.c], 0, [], []) -AT_CHECK([$CC $CFLAGS calc.c -o calc], 0, [], []) -# AT_CHECK_CALC(INPUT, OUTPUT) -# ---------------------------- -# Run `calc' on INPUT, and expect OUTPUT. +# AT_DATA_CALC_Y +# -------------- +# Produce `calc.y'. +AT_DEFINE([AT_DATA_CALC_Y], +[_AT_DATA_CALC_Y($[1], $[2], $[3])]) + + +# _AT_CHECK_CALC(INPUT, OUTPUT, [STDERR]) +# --------------------------------------- +# Run `calc' on INPUT, and expect OUTPUT and STDERR. +AT_DEFINE([_AT_CHECK_CALC], +[AT_CHECK([echo "$1" | calc], 0, [$2], [$3])]) + + +# AT_CHECK_CALC(TITLE, [BISON-OPTIONS], [PARSER-EXPECTED-STDERR]) +# --------------------------------------------------------------- +# Start a testing chunk named TITLE which compiles `calc' grammar with +# BISON-OPTIONS, and performs several tests over the parser. AT_DEFINE([AT_CHECK_CALC], -[AT_CHECK([echo "$1" | calc], 0, [$2], [])]) +[# We use integers to avoid dependencies upon the precision of doubles. +AT_SETUP([$1]) + +AT_DATA_CALC_Y + +# Specify the output files to avoid problems on different file systems. +AT_CHECK([bison calc.y -o calc.c $2], 0, [], []) +AT_CHECK([$CC $CFLAGS calc.c -o calc], 0, [], []) # Test the priorities. -AT_CHECK_CALC([1 + 2 * 3], [7]) -AT_CHECK_CALC([1 + 2 * -3], [-5]) +_AT_CHECK_CALC([1 + 2 * 3], [7], [$3]) +_AT_CHECK_CALC([1 + 2 * -3], [-5], [$3]) -AT_CHECK_CALC([-1^2], [-1]) -AT_CHECK_CALC([(-1)^2], [1]) +_AT_CHECK_CALC([-1^2], [-1], [$3]) +_AT_CHECK_CALC([(-1)^2], [1], [$3]) -AT_CHECK_CALC([---1], [-1]) +_AT_CHECK_CALC([---1], [-1], [$3]) -AT_CHECK_CALC([1 - 2 - 3], [-4]) -AT_CHECK_CALC([1 - (2 - 3)], [2]) +_AT_CHECK_CALC([1 - 2 - 3], [-4], [$3]) +_AT_CHECK_CALC([1 - (2 - 3)], [2], [$3]) -AT_CHECK_CALC([2^2^3], [256]) -AT_CHECK_CALC([(2^2)^3], [64]) +_AT_CHECK_CALC([2^2^3], [256], [$3]) +_AT_CHECK_CALC([(2^2)^3], [64], [$3]) AT_CLEANUP(calc calc.c) +])# AT_CHECK_CALC + + +# -------------- # +# Actual tests. # +# -------------- # + + +AT_CHECK_CALC([Simple calculator]) + +AT_CHECK_CALC([Simple Yacc compatible calculator], + [--yacc]) + +AT_CHECK_CALC([Simple calculator whose tokens are numbered from 3], + [--raw]) + +AT_CHECK_CALC([Simple debugging calculator], + [--debug], ignore) + +AT_CHECK_CALC([Simple Yacc compatible debugging calculator], + [--debug --yacc], ignore) -- 2.45.2