mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-18 16:53:02 +00:00
Merge in branch-1_29.
This commit is contained in:
142
tests/calc.at
142
tests/calc.at
@@ -1,11 +1,22 @@
|
||||
# -*- Autoconf -*-
|
||||
# Checking the output filenames. -*- Autotest -*-
|
||||
# Copyright 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
cat <<EOF
|
||||
# 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
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
Simple Calculator.
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
EOF
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
AT_BANNER([[Simple Calculator.]])
|
||||
|
||||
## ---------------------------------------------------- ##
|
||||
## Compile the grammar described in the documentation. ##
|
||||
@@ -23,16 +34,16 @@ EOF
|
||||
# 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],
|
||||
[ifelse([$1$2$3],
|
||||
$[1]$[2]$[3], [],
|
||||
[errprint([$0: Invalid arguments: $@
|
||||
])m4exit(1)])dnl
|
||||
m4_define([_AT_DATA_CALC_Y],
|
||||
[m4_if([$1$2$3], $[1]$[2]$[3], [],
|
||||
[m4_fatal([$0: Invalid arguments: $@])])dnl
|
||||
AT_DATA([calc.y],
|
||||
[[/* Infix notation calculator--calc */
|
||||
|
||||
%{
|
||||
#include <config.h>
|
||||
/* We don't need a perfect malloc for these tests. */
|
||||
#undef malloc
|
||||
#include <stdio.h>
|
||||
|
||||
#if STDC_HEADERS
|
||||
@@ -211,14 +222,16 @@ power (int base, int exponent)
|
||||
}
|
||||
|
||||
int
|
||||
main (int argn, const char **argv)
|
||||
main (int argc, const char **argv)
|
||||
{
|
||||
if (argn == 2)
|
||||
yyin = NULL;
|
||||
|
||||
if (argc == 2)
|
||||
yyin = fopen (argv[1], "r");
|
||||
else
|
||||
yyin = stdin;
|
||||
|
||||
if (!stdin)
|
||||
if (!yyin)
|
||||
{
|
||||
perror (argv[1]);
|
||||
exit (1);
|
||||
@@ -241,57 +254,83 @@ main (int argn, const char **argv)
|
||||
# AT_DATA_CALC_Y([BISON-OPTIONS])
|
||||
# -------------------------------
|
||||
# Produce `calc.y'.
|
||||
AT_DEFINE([AT_DATA_CALC_Y],
|
||||
m4_define([AT_DATA_CALC_Y],
|
||||
[_AT_DATA_CALC_Y($[1], $[2], $[3],
|
||||
[ifelse(regexp([$1], [--yyerror-verbose]),
|
||||
[-1], [],
|
||||
[[#define YYERROR_VERBOSE 1]])])])
|
||||
[m4_match([$1], [--yyerror-verbose],
|
||||
[[#define YYERROR_VERBOSE 1]])])])
|
||||
|
||||
|
||||
|
||||
# _AT_CHECK_CALC(BISON-OPTIONS, INPUT)
|
||||
# ------------------------------------
|
||||
# _AT_CHECK_CALC(BISON-OPTIONS, INPUT, [NUM-STDERR-LINES = 0])
|
||||
# ------------------------------------------------------------
|
||||
# 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], [], [])])])
|
||||
#
|
||||
# If BISON-OPTIONS contains `--debug', then NUM-STDERR-LINES is the number
|
||||
# of expected lines on stderr.
|
||||
m4_define([_AT_CHECK_CALC],
|
||||
[AT_DATA([[input]],
|
||||
[[$2
|
||||
]])
|
||||
AT_CHECK([calc input], 0, [], [stderr])dnl
|
||||
AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0,
|
||||
[m4_match([$1], [--debug],
|
||||
[$3], [0])
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
# _AT_CHECK_CALC_ERROR(BISON-OPTIONS, INPUT,
|
||||
# _AT_CHECK_CALC_ERROR(BISON-OPTIONS, INPUT, [NUM-DEBUG-LINES],
|
||||
# [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
|
||||
# Run `calc' on INPUT, and expect a `parse error' message.
|
||||
#
|
||||
# If BISON-OPTIONS contains `--location', then make sure the ERROR-LOCATION
|
||||
# is correctly output on stderr.
|
||||
#
|
||||
# If BISON-OPTIONS contains `--yyerror-verbose', then make sure the
|
||||
# IF-YYERROR-VERBOSE message is properly output after `parse error, '
|
||||
# on STDERR.
|
||||
#
|
||||
# If BISON-OPTIONS contains `--debug', then NUM-STDERR-LINES is the number
|
||||
# of expected lines on stderr.
|
||||
m4_define([_AT_CHECK_CALC_ERROR],
|
||||
[AT_DATA([[input]],
|
||||
[[$2
|
||||
]])
|
||||
|
||||
])])
|
||||
AT_CHECK([calc input], 0, [], [stderr])
|
||||
|
||||
|
||||
AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0,
|
||||
[m4_match([$1], [--debug],
|
||||
[$3], [1])
|
||||
])
|
||||
|
||||
egrep -v '^((Start|Enter|Read|Reduc|Shift)ing|state|Error:) ' stderr >at-stderr
|
||||
mv at-stderr stderr
|
||||
|
||||
AT_CHECK([cat stderr], 0,
|
||||
[m4_match([$1], [--location], [$4: ])[]dnl
|
||||
parse error[]dnl
|
||||
m4_match([$1], [--yyerror-verbose], [, $5])[]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],
|
||||
m4_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])],
|
||||
AT_CHECK([bison calc.y -o calc.c m4_patsubst([$1], [--yyerror-verbose])],
|
||||
[0], [], [])
|
||||
AT_CHECK([$CC $CFLAGS $CPPFLAGS calc.c -o calc], 0, [], [])
|
||||
|
||||
@@ -309,26 +348,27 @@ _AT_CHECK_CALC([$1],
|
||||
1 - (2 - 3) = 2
|
||||
|
||||
2^2^3 = 256
|
||||
(2^2)^3 = 64], [$2])
|
||||
(2^2)^3 = 64], [491])
|
||||
|
||||
# Some parse errors.
|
||||
_AT_CHECK_CALC_ERROR([$1], [+1],
|
||||
_AT_CHECK_CALC_ERROR([$1], [+1], [8],
|
||||
[1.0:1.1],
|
||||
[, unexpected `'+''])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1//2],
|
||||
[unexpected `'+''])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1//2], [17],
|
||||
[1.2:1.3],
|
||||
[, unexpected `'/'', expecting `NUM' or `'-'' or `'(''])
|
||||
_AT_CHECK_CALC_ERROR([$1], [error],
|
||||
[unexpected `'/'', expecting `NUM' or `'-'' or `'(''])
|
||||
_AT_CHECK_CALC_ERROR([$1], [error], [8],
|
||||
[1.0:1.1],
|
||||
[, unexpected `$undefined.'])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3],
|
||||
[unexpected `$undefined.'])
|
||||
_AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3], [23],
|
||||
[1.6:1.7],
|
||||
[, unexpected `'=''])
|
||||
[unexpected `'=''])
|
||||
_AT_CHECK_CALC_ERROR([$1],
|
||||
[
|
||||
+1],
|
||||
[16],
|
||||
[2.0:2.1],
|
||||
[, unexpected `'+''])
|
||||
[unexpected `'+''])
|
||||
|
||||
AT_CLEANUP(calc calc.c calc.h calc.output)
|
||||
])# AT_CHECK_CALC
|
||||
|
||||
Reference in New Issue
Block a user