From 3a526f5cc3b45fc68d06de0b5332105113741093 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 8 Nov 2012 19:34:29 +0100 Subject: [PATCH 1/2] tests: don't expect $EGREP to support -w Does not work on Solaris 10. Reported by Dennis Clarke. http://lists.gnu.org/archive/html/bug-bison/2012-11/msg00009.html * tests/headers.at (Several parsers): Use Perl instead. While at it, run it only once, on all the generated headers. Adjust to YY_NULL be defined in position.hh. --- THANKS | 1 + tests/headers.at | 45 ++++++++++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/THANKS b/THANKS index 77d35be7..4e88e8f3 100644 --- a/THANKS +++ b/THANKS @@ -31,6 +31,7 @@ Dagobert Michelsen dam@baltic-online.de Daniel Hagerty hag@gnu.org David J. MacKenzie djm@gnu.org David Kastrup dak@gnu.org +Dennis Clarke dclarke@blastwave.org Derek M. Jones derek@knosof.co.uk Di-an Jan dianj@freeshell.org Dick Streefland dick.streefland@altium.nl diff --git a/tests/headers.at b/tests/headers.at index a60e3153..7df4cc9d 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -163,21 +163,6 @@ exp: AT_BISON_CHECK([-d -o AT_SKEL_CC_IF([$1.cc $1.yy], [$1.c $1.y])]) -# Check there is no 'yy' left. -# C++ output relies on namespaces and still uses yy a lot. -AT_SKEL_CC_IF([], - [AT_CHECK([$EGREP yy $1.h], [1])]) - -# Check there is not 'YY' left. -# Ignore comments, YYPARSE_PARAM (obsolete), YYPUSH_MORE(_DEFINED)? -# (constant definition), YY_\w+_INCLUDED (header guards). -# -# YYDEBUG (not renamed) can be read, but not changed. -AT_CHECK([[sed -ne 's,/\*[^*]*\*/,,g;s,//.*,,' \ - -e '/YY/p' ]$1.AT_SKEL_CC_IF([hh], [h])[ | - $EGREP -wv 'YY(PARSE_PARAM|PUSH_MORE(_DEFINED)?|_[0-9A-Z_]+_INCLUDED)|(defined|if) YYDEBUG']], - [1]) - AT_LANG_COMPILE([$1.o]) AT_CHECK([[echo "$1" >>expout]]) @@ -240,6 +225,36 @@ AT_TEST([x7], [%define api.push-pull both]) AT_TEST([x8], [%define api.pure %define api.push-pull both]) #AT_TEST([x5], [%locations %language "c++" %glr-parser]) +# Check there is no 'yy' left. +# C++ output relies on namespaces and still uses yy a lot. +# +# Check there is no 'YY' left. +# Ignore comments, YYPARSE_PARAM (obsolete), YYPUSH_MORE(_DEFINED)? +# (constant definition), YY_\w+_INCLUDED (header guards). +# +# YYDEBUG (not renamed) can be read, but not changed. +AT_CHECK([[$PERL -n -0777 -e ' + s{/\*.*?\*/}{}gs; + s{//.*}{}g; + s{\b(YYPARSE_PARAM + |YYPUSH_MORE(_DEFINED)? + |YY_\w+_INCLUDED + |YY_NULL + |(defined|if)\ YYDEBUG + )\b}{}gx; + while (/^(.*YY.*)$/gm) + { + print "$ARGV: $1\n"; + } + if ($ARGV =~ /\.h$/) + { + while (/^(.*yy.*)$/gm) + { + print "$ARGV: $1\n"; + } + } +' -- *.hh *.h]]) + # Check that the headers are self-contained, and protected against # multiple inclusions. While at it, check they are sane for C++. for h in *.h *.hh From 2bb8f621eb61ef282fadd39232a96589ba1979ad Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 10 Nov 2012 09:26:40 +0100 Subject: [PATCH 2/2] tests: use valgrind where appropriate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported by Théophile Ranquet. * tests/glr-regression.at: Rewrite some test cases so that AT_PARSER_CHECK, which runs valgrind, is exposed with the parser, not with "echo". * tests/local.at, tests/regression.at, tests/headers.at: Use AT_PARSER_CHECK for generated parsers. --- THANKS | 1 + tests/glr-regression.at | 47 ++++++++++++++++++++++++----------------- tests/headers.at | 2 +- tests/local.at | 2 +- tests/regression.at | 2 +- 5 files changed, 32 insertions(+), 22 deletions(-) diff --git a/THANKS b/THANKS index 4e88e8f3..e815f8ed 100644 --- a/THANKS +++ b/THANKS @@ -106,6 +106,7 @@ Shura debil_urod@ngs.ru Stefano Lattarini stefano.lattarini@gmail.com Steve Murphy murf@parsetree.com Sum Wu sum@geekhouse.org +Théophile Ranquet theophile.ranquet@gmail.com Thiru Ramakrishnan thiru.ramakrishnan@gmail.com Tim Josling tej@melbpc.org.au Tim Landscheidt tim@tim-landscheidt.de diff --git a/tests/glr-regression.at b/tests/glr-regression.at index 8570b19d..aab0369f 100644 --- a/tests/glr-regression.at +++ b/tests/glr-regression.at @@ -67,9 +67,13 @@ static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1) return 0; } +const char *input = NULL; + int -main (void) +main (int argc, const char* argv[]) { + assert (argc == 2); + input = argv[1]; return yyparse (); } @@ -78,16 +82,7 @@ main (void) int yylex (void) { - for (;;) - { - int ch; - assert (!feof (stdin)); - ch = getchar (); - if (ch == EOF) - return 0; - else if (ch == 'B' || ch == 'P') - return ch; - } + return *input++; } ]]) AT_BISON_OPTION_POPDEFS @@ -96,7 +91,7 @@ AT_BISON_CHECK([[-o glr-regr1.c glr-regr1.y]], 0, [], [glr-regr1.y: conflicts: 1 shift/reduce ]) AT_COMPILE([glr-regr1]) -AT_PARSER_CHECK([[echo BPBPB | ./glr-regr1]], 0, +AT_PARSER_CHECK([[./glr-regr1 BPBPB]], 0, [[E -> 'B' E -> 'B' E -> E 'P' E @@ -212,16 +207,27 @@ AT_BISON_CHECK([[-o glr-regr2a.c glr-regr2a.y]], 0, [], ]) AT_COMPILE([glr-regr2a]) -AT_PARSER_CHECK([[echo s VARIABLE_1 t v x q | ./glr-regr2a]], 0, +AT_DATA([input1.txt], +[[s VARIABLE_1 t v x q +]]) +AT_PARSER_CHECK([[./glr-regr2a input1.txt]], 0, [[Variable: 'VARIABLE_1' -]], []) -AT_PARSER_CHECK([[echo s VARIABLE_1 , ANOTHER_VARIABLE_2 t e | ./glr-regr2a]], +]]) + +AT_DATA([input2.txt], +[[s VARIABLE_1 , ANOTHER_VARIABLE_2 t e +]]) +AT_PARSER_CHECK([[./glr-regr2a input2.txt]], 0, [[Varlist: 'VARIABLE_1,ANOTHER_VARIABLE_2' ]]) -AT_PARSER_CHECK([[echo s VARIABLE_3 t v x | ./glr-regr2a]], 0, + +AT_DATA([input3.txt], +[[s VARIABLE_3 t v x +]]) +AT_PARSER_CHECK([[./glr-regr2a input3.txt]], 0, [[Variable: 'VARIABLE_3' -]], []) +]]) AT_CLEANUP @@ -329,10 +335,13 @@ AT_BISON_CHECK([[-o glr-regr3.c glr-regr3.y]], 0, [], ]) AT_COMPILE([glr-regr3]) -AT_PARSER_CHECK([[echo p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2 | ./glr-regr3]], +AT_DATA([input.txt], +[[p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2 +]]) +AT_PARSER_CHECK([[./glr-regr3 input.txt]], 0, [[Result: 1c04 -]], []) +]]) AT_CLEANUP diff --git a/tests/headers.at b/tests/headers.at index 7df4cc9d..b53ee8a0 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -272,7 +272,7 @@ done AT_SKIP_IF_CANNOT_LINK_C_AND_CXX AT_COMPILE_CXX([parser], [[x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc]]) -AT_CHECK([./parser], [0], [[expout]]) +AT_PARSER_CHECK([./parser], [0], [[expout]]) m4_popdef([AT_TEST]) diff --git a/tests/local.at b/tests/local.at index e803e57f..a5dde80a 100644 --- a/tests/local.at +++ b/tests/local.at @@ -716,7 +716,7 @@ AT_COMPILE([c-only.o], [c-only.c]) AT_COMPILE_CXX([cxx-only.o], [cxx-only.cc]) AT_CHECK([$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS c-only.o cxx-only.o -o c-and-cxx || exit 77], [ignore], [ignore]) -AT_CHECK([./c-and-cxx]) +AT_PARSER_CHECK([./c-and-cxx]) ]) diff --git a/tests/regression.at b/tests/regression.at index 6cf22685..03c4b808 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -1593,7 +1593,7 @@ main (void) ]]) AT_FULL_COMPILE([input]) -AT_CHECK([./input], 0, [[x: 1, y: 2 +AT_PARSER_CHECK([./input], 0, [[x: 1, y: 2 ]]) AT_BISON_OPTION_POPDEFS