From: Akim Demaille Date: Fri, 17 Nov 2000 11:16:10 +0000 (+0000) Subject: * tests/Makefile.am (suite.m4, regression.m4, calc.m4): Rename X-Git-Tag: BISON-1_28b~65 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/6fd54b73c3d8fe8b173cb68384eff3e56d7dc6f4 * tests/Makefile.am (suite.m4, regression.m4, calc.m4): Rename as... (suite.m4, regression.m4, calc.m4): these. * tests/atgeneral.m4: Update from CVS Autoconf. --- diff --git a/ChangeLog b/ChangeLog index 2fc2e944..24d57290 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2000-11-17 Akim Demaille + + * tests/Makefile.am (suite.m4, regression.m4, calc.m4): Rename + as... + (suite.m4, regression.m4, calc.m4): these. + * tests/atgeneral.m4: Update from CVS Autoconf. + 2000-11-17 Akim Demaille * tests/regression.m4 (%union and --defines): New test, diff --git a/tests/Makefile.am b/tests/Makefile.am index 2f2be974..98018d34 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to create Makefile.in. ## Makefile for Bison testsuite. -## Copyright (C) 2000 Free Software Foundation, Inc. +## Copyright 2000 Free Software Foundation, Inc. ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -21,15 +21,15 @@ # Distribute the testsuite since GNU M4 is needed to build it. noinst_SCRIPTS = testsuite -SUITE = calc.m4 regression.m4 +SUITE = calc.at regression.at -EXTRA_DIST = atgeneral.m4 suite.m4 $(SUITE) +EXTRA_DIST = atgeneral.m4 suite.at $(SUITE) check-local: atconfig testsuite $(SHELL) testsuite -testsuite: atgeneral.m4 suite.m4 $(SUITE) - $(M4) -I $(srcdir) atgeneral.m4 suite.m4 | \ +testsuite: atgeneral.m4 suite.at $(SUITE) + $(M4) -I $(srcdir) atgeneral.m4 suite.at | \ sed -e 's/[ ]*$$//' | \ sed -e '/^$$/N;/\n$$/D' > $@-tmp chmod +x $@-tmp diff --git a/tests/atgeneral.m4 b/tests/atgeneral.m4 index 9f1404be..1387b754 100644 --- a/tests/atgeneral.m4 +++ b/tests/atgeneral.m4 @@ -114,7 +114,7 @@ AT_DEFINE([AT_INIT], at_stop_on_error=false; # Shall we save and check stdout and stderr? # -n sets to false -at_check_stds=true; +at_check_stds=:; # Shall we # -s sets to false, and -v to true at_verbose=false @@ -171,7 +171,7 @@ fi # over files, the full test suite cleans up both before and after test groups. # Snippet )4 -if test -n "`$1 --version | sed -n s/$at_package.*$at_version/OK/p`"; then +if $1 --version | grep "$at_package.*$at_version" >/dev/null; then at_banner="Testing suite for $at_package, version $at_version" at_dashes=`echo $at_banner | sed s/./=/g` echo "$at_dashes" @@ -193,7 +193,7 @@ divert(2)[]dnl # Wrap up the testing suite with summary statistics. -rm -f at-check-line +rm -f at-check-line at-setup-line at_fail_count=0 if test -z "$at_failed_list"; then if test "$at_ignore_count" = 0; then @@ -213,9 +213,9 @@ else test -z "$at_silent" && echo 'at_verbose=:' sed -n "/^[#] Snippet (4/,/^[#] Snippet )4/p" $[0] sed -n "/^[#] Snippet (c$at_group(/,/^[#] Snippet )c$at_group)/p" $[0] - at_desc="`sed -n \ + at_desc=`sed -n \ '/^[#] Snippet (d'$at_group'(/,/^[#] Snippet )d'$at_group')/p' $[0] \ - | sed -n '2s/^[#] //p'`" + | sed -n '2s/^[#] //p'` echo 'if $at_verbose; then' echo ' at_banner="$[0]: '$at_desc'"' echo ' at_dashes=`echo $at_banner | sed s/./=/g`' @@ -281,11 +281,16 @@ pushdef([AT_data_experr], ) if $at_stop_on_error && test -n "$at_failed_list"; then :; else divert(1)[]dnl echo AT_LINE > at-check-line + echo AT_LINE > at-setup-line if $at_verbose; then echo 'testing AT_group_description' echo $at_n " $at_c" fi - echo $at_n "substr(AT_ordinal. $srcdir/AT_LINE , 0, 30)[]$at_c" + if $at_verbose; then + echo "AT_ordinal. $srcdir/AT_LINE..." + else + echo $at_n "substr(AT_ordinal. $srcdir/AT_LINE , 0, 30)[]$at_c" + fi if test -z "$at_skip_mode"; then ( [#] Snippet (d[]AT_ordinal[]( @@ -306,15 +311,18 @@ AT_DEFINE([AT_CLEANUP], $at_traceoff [[#] Snippet )s[]AT_ordinal[]) ) - case $? in + at_status=$? + $at_verbose && + echo $at_n " AT_ordinal. $srcdir/`cat at-setup-line`: $at_c" + case $at_status in 0) echo ok - ;; + ;; 77) echo "ignored near \``cat at-check-line`'" - at_ignore_count=`expr $at_ignore_count + 1` - ;; + at_ignore_count=`expr $at_ignore_count + 1` + ;; *) echo "FAILED near \``cat at-check-line`'" - at_failed_list="$at_failed_list AT_ordinal" - ;; + at_failed_list="$at_failed_list AT_ordinal" + ;; esac else echo 'ignored (skipped)' @@ -364,7 +372,7 @@ $2[]_ATEOF # their content is not checked. AT_DEFINE([AT_CHECK], [$at_traceoff -$at_verbose && echo "$srcdir/AT_LINE: testing..." +$at_verbose && echo "$srcdir/AT_LINE: patsubst([$1], [\([\"`$]\)], \\\1)" echo AT_LINE > at-check-line $at_check_stds && exec 5>&1 6>&2 1>stdout 2>stderr $at_traceon @@ -372,10 +380,12 @@ $1 ifelse([$2], [], [], [at_status=$? if test $at_status != $2; then + $at_verbose && echo "Exit code was $at_status, expected $2" >&6 dnl Maybe there was an important message to read before it died. $at_verbose && $at_check_stds && cat stderr >&6 -dnl Exit with the same code, at least to preserve 77. - exit $at_status +dnl Preserve exit code 77. + test $at_status = 77 && exit 77 + exit 1 fi ])dnl $at_traceoff @@ -385,19 +395,23 @@ dnl Restore stdout to fd1 and stderr to fd2. dnl If not verbose, neutralize the output of diff. $at_verbose || exec 1>/dev/null 2>/dev/null at_failed=false; - AT_CASE([$3], - ignore, [$at_verbose && cat stdout;:], - expout, [AT_DEFINE([AT_data_expout], [ expout])dnl -$at_diff expout stdout || at_failed=:], - [], [$at_diff empty stdout || at_failed=:], - [echo $at_n "patsubst([$3], [\([\"`$]\)], \\\1)$at_c" | $at_diff - stdout || at_failed=:]) AT_CASE([$4], ignore, [$at_verbose && cat stderr;:], experr, [AT_DEFINE([AT_data_experr], [ experr])dnl $at_diff experr stderr || at_failed=:], [], [$at_diff empty stderr || at_failed=:], [echo $at_n "patsubst([$4], [\([\"`$]\)], \\\1)$at_c" | $at_diff - stderr || at_failed=:]) - $at_failed && exit 1 + AT_CASE([$3], + ignore, [$at_verbose && cat stdout;:], + expout, [AT_DEFINE([AT_data_expout], [ expout])dnl +$at_diff expout stdout || at_failed=:], + [], [$at_diff empty stdout || at_failed=:], + [echo $at_n "patsubst([$3], [\([\"`$]\)], \\\1)$at_c" | $at_diff - stdout || at_failed=:]) + if $at_failed; then + exit 1 + else + : + fi fi $at_traceon ])# AT_CHECK diff --git a/tests/calc.m4 b/tests/calc.m4 deleted file mode 100644 index a8756206..00000000 --- a/tests/calc.m4 +++ /dev/null @@ -1,349 +0,0 @@ -# -*- Autoconf -*- - -cat < -#include -#include -]$4[ - -static int power (int base, int exponent); -static void yyerror (const char *s); -static int yylex (void); -extern void perror (const char *s); -%} - -/* BISON Declarations */ -%token NUM - -%nonassoc '=' /* comparison */ -%left '-' '+' -%left '*' '/' -%left NEG /* negation--unary minus */ -%right '^' /* exponentiation */ - -/* Grammar follows */ -%% -input: - /* empty string */ -| input line -; - -line: - '\n' -| exp '\n' -; - -exp: - NUM { $$ = $1; } -| exp '=' exp - { - if ($1 != $3) - printf ("calc: error: %d != %d\n", $1, $3); - $$ = $1 == $3; - } -| exp '+' exp { $$ = $1 + $3; } -| exp '-' exp { $$ = $1 - $3; } -| exp '*' exp { $$ = $1 * $3; } -| exp '/' exp { $$ = $1 / $3; } -| '-' exp %prec NEG { $$ = -$2; } -| exp '^' exp { $$ = power ($1, $3); } -| '(' exp ')' { $$ = $2; } -; -%% -/* The input. */ -FILE *yyin; - -static void -yyerror (const char *s) -{ -#ifdef YYLSP_NEEDED - fprintf (stderr, "%d.%d:%d.%d: ", - yylloc.first_line, yylloc.first_column, - yylloc.last_line, yylloc.last_column); -#endif - fprintf (stderr, "%s\n", s); -} - -static int -yygetc () -{ - int res = getc (yyin); -#ifdef YYLSP_NEEDED - if (res == '\n') - { - yylloc.last_line++; - yylloc.last_column = 0; - } - else - yylloc.last_column++; -#endif - return res; -} - - -static void -yyungetc (int c) -{ -#ifdef YYLSP_NEEDED - /* Wrong when C == `\n'. */ - yylloc.last_column--; -#endif - ungetc (c, yyin); -} - -static int -read_signed_integer (void) -{ - int c = yygetc (); - int sign = 1; - int n = 0; - - if (c == '-') - { - c = yygetc (); - sign = -1; - } - - while (isdigit (c)) - { - n = 10 * n + (c - '0'); - c = yygetc (); - } - - yyungetc (c); - - return sign * n; -} - - - -/*---------------------------------------------------------------. -| Lexical analyzer returns an integer on the stack and the token | -| NUM, or the ASCII character read if not a number. Skips all | -| blanks and tabs, returns 0 for EOF. | -`---------------------------------------------------------------*/ - -static int -yylex (void) -{ - int c; - -#ifdef YYLSP_NEEDED - yylloc.first_column = yylloc.last_column; - yylloc.first_line = yylloc.last_line; -#endif - - /* Skip white space. */ - while ((c = yygetc ()) == ' ' || c == '\t') - { -#ifdef YYLSP_NEEDED - yylloc.first_column = yylloc.last_column; - yylloc.first_line = yylloc.last_line; -#endif - } - - /* process numbers */ - if (c == '.' || isdigit (c)) - { - yyungetc (c); - yylval = read_signed_integer (); - return NUM; - } - - /* Return end-of-file. */ - if (c == EOF) - return 0; - - /* Return single chars. */ - return c; -} - -static int -power (int base, int exponent) -{ - int res = 1; - if (exponent < 0) - exit (1); - for (/* Niente */; exponent; --exponent) - res *= base; - return res; -} - -int -main (int argn, const char **argv) -{ - if (argn == 2) - yyin = fopen (argv[1], "r"); - else - yyin = stdin; - - if (!stdin) - { - perror (argv[1]); - exit (1); - } - -#if YYDEBUG - yydebug = 1; -#endif -#ifdef YYLSP_NEEDED - yylloc.last_column = 0; - yylloc.last_line = 1; -#endif - yyparse (); - return 0; -} -]]) -])# _AT_DATA_CALC_Y - - -# AT_DATA_CALC_Y([BISON-OPTIONS]) -# ------------------------------- -# Produce `calc.y'. -AT_DEFINE([AT_DATA_CALC_Y], -[_AT_DATA_CALC_Y($[1], $[2], $[3], - [ifelse(regexp([$1], [--yyerror-verbose]), - [-1], [], - [[#define YYERROR_VERBOSE]])])]) - - - -# _AT_CHECK_CALC(BISON-OPTIONS, INPUT) -# ------------------------------------ -# Run `calc' on INPUT and expect no STDOUT nor STDERR. -# If `--debug' is passed to bison, discard all the debugging traces -# preserving only the `parse errors'. Note that since there should be -# none, the `grep' will fail with exit status 1. -AT_DEFINE([_AT_CHECK_CALC], -[ifelse(regexp([$1], [--debug]), - [-1], - [AT_CHECK([echo "$2" | calc], - [0], [], [])], - [AT_CHECK([echo "$2" | calc 2>&1 >/dev/null | grep 'parse error' >&2], - [1], [], [])])]) - - -# _AT_CHECK_CALC_ERROR(BISON-OPTIONS, INPUT, -# [ERROR-LOCATION], [IF-YYERROR-VERBOSE]) -# ------------------------------------------------------------ -# Run `calc' on INPUT, and expect STDERR. -AT_DEFINE([_AT_CHECK_CALC_ERROR], -[AT_CHECK([echo "$2" | calc 2>&1 >/dev/null | grep 'parse error' >&2], 0, - [], -[ifelse(regexp([$1], [--location]), - [-1], [], [$3: ])[]dnl -parse error[]dnl -ifelse(regexp([$1], [--yyerror-verbose]), - [-1], [], [$4])[]dnl - -])]) - - -# AT_CHECK_CALC([BISON-OPTIONS], [PARSER-EXPECTED-STDERR]) -# -------------------------------------------------------- -# Start a testing chunk which compiles `calc' grammar with -# BISON-OPTIONS, and performs several tests over the parser. -AT_DEFINE([AT_CHECK_CALC], -[# We use integers to avoid dependencies upon the precision of doubles. -AT_SETUP([Calculator $1]) - -AT_DATA_CALC_Y([$1]) - -# Specify the output files to avoid problems on different file systems. -AT_CHECK([bison calc.y -o calc.c patsubst([$1], [--yyerror-verbose])], - [0], [], []) -AT_CHECK([$CC $CFLAGS calc.c -o calc], 0, [], []) - -# Test the priorities. -_AT_CHECK_CALC([$1], -[1 + 2 * 3 = 7 -1 + 2 * -3 = -5 - --1^2 = -1 -(-1)^2 = 1 - ----1 = -1 - -1 - 2 - 3 = -4 -1 - (2 - 3) = 2 - -2^2^3 = 256 -(2^2)^3 = 64], [$2]) - -# Some parse errors. -_AT_CHECK_CALC_ERROR([$1], [+1], - [1.0:1.1], - [, unexpected `'+'']) -_AT_CHECK_CALC_ERROR([$1], [1//2], - [1.2:1.3], - [, unexpected `'/'', expecting `NUM' or `'-'' or `'('']) -_AT_CHECK_CALC_ERROR([$1], [error], - [1.0:1.1], - [, unexpected `$undefined.']) -_AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3], - [1.6:1.7], - [, unexpected `'='']) -_AT_CHECK_CALC_ERROR([$1], - [ -+1], - [2.0:2.1], - [, unexpected `'+'']) - -AT_CLEANUP(calc calc.c calc.h calc.output) -])# AT_CHECK_CALC - - - - -# ------------------ # -# Test the parsers. # -# ------------------ # - -AT_CHECK_CALC() -# This one is very suspicious. The test fails, but it might be normal. -AT_CHECK_CALC([--raw]) - -AT_CHECK_CALC([--defines]) -AT_CHECK_CALC([--locations]) -AT_CHECK_CALC([--name-prefix=calc]) -AT_CHECK_CALC([--verbose]) -AT_CHECK_CALC([--yacc]) -AT_CHECK_CALC([--yyerror-verbose]) - -AT_CHECK_CALC([--locations --yyerror-verbose]) - -AT_CHECK_CALC([--defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose]) - -AT_CHECK_CALC([--debug]) -AT_CHECK_CALC([--debug --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose]) diff --git a/tests/regression.m4 b/tests/regression.m4 deleted file mode 100644 index 8a004831..00000000 --- a/tests/regression.m4 +++ /dev/null @@ -1,55 +0,0 @@ -# -*- Autoconf -*- - -cat <