| Index: bison/src/bison/2.4.1/bison-2.4.1-src/tests/push.at
|
| ===================================================================
|
| --- bison/src/bison/2.4.1/bison-2.4.1-src/tests/push.at (revision 0)
|
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/tests/push.at (revision 0)
|
| @@ -0,0 +1,168 @@
|
| +# Checking Push Parsing. -*- Autotest -*-
|
| +# Copyright (C) 2007 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
|
| +# the Free Software Foundation, either version 3 of the License, or
|
| +# (at your option) any later version.
|
| +#
|
| +# 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.
|
| +#
|
| +# You should have received a copy of the GNU General Public License
|
| +# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
| +
|
| +AT_BANNER([[Push Parsing Tests]])
|
| +
|
| +## ---------------------------------------------- ##
|
| +## Push Parsing: Memory Leak for Early Deletion. ##
|
| +## ---------------------------------------------- ##
|
| +
|
| +AT_SETUP([[Push Parsing: Memory Leak for Early Deletion]])
|
| +
|
| +# Requires Valgrind.
|
| +
|
| +AT_DATA_GRAMMAR([[input.y]],
|
| +[[
|
| +%{
|
| + #include <assert.h>
|
| + #include <stdio.h>
|
| + #define YYINITDEPTH 1
|
| + void yyerror (char const *msg);
|
| +%}
|
| +
|
| +%define api.pure %define api.push_pull "push"
|
| +
|
| +%%
|
| +
|
| +start: 'a' 'b' 'c' ;
|
| +
|
| +%%
|
| +
|
| +void
|
| +yyerror (char const *msg)
|
| +{
|
| + fprintf (stderr, "%s\n", msg);
|
| +}
|
| +
|
| +int
|
| +main (void)
|
| +{
|
| + yypstate *ps;
|
| +
|
| + /* Make sure we don't try to free ps->yyss in this case. */
|
| + ps = yypstate_new ();
|
| + yypstate_delete (ps);
|
| +
|
| + /* yypstate_delete used to leak ps->yyss if the stack was reallocated but the
|
| + parse did not return on success, syntax error, or memory exhaustion. */
|
| + ps = yypstate_new ();
|
| + assert (yypush_parse (ps, 'a', NULL) == YYPUSH_MORE);
|
| + yypstate_delete (ps);
|
| +
|
| + ps = yypstate_new ();
|
| + assert (yypush_parse (ps, 'a', NULL) == YYPUSH_MORE);
|
| + assert (yypush_parse (ps, 'b', NULL) == YYPUSH_MORE);
|
| + yypstate_delete (ps);
|
| +
|
| + return 0;
|
| +}
|
| +]])
|
| +
|
| +AT_BISON_CHECK([[-o input.c input.y]])
|
| +AT_COMPILE([[input]])
|
| +AT_PARSER_CHECK([[./input]])
|
| +
|
| +AT_CLEANUP
|
| +
|
| +## ----------------------------------------- ##
|
| +## Push Parsing: Multiple impure instances. ##
|
| +## ----------------------------------------- ##
|
| +
|
| +AT_SETUP([[Push Parsing: Multiple impure instances]])
|
| +
|
| +m4_pushdef([AT_MULTIPLE_IMPURE_INSTANCES_CHECK], [
|
| +AT_DATA_GRAMMAR([[input.y]],
|
| +[[
|
| +%{
|
| + #include <assert.h>
|
| + #include <stdio.h>
|
| + void yyerror (char const *msg);
|
| + int yylex (void);
|
| +%}
|
| +
|
| +%define api.push_pull "]$1["
|
| +
|
| +%%
|
| +
|
| +start: ;
|
| +
|
| +%%
|
| +
|
| +void
|
| +yyerror (char const *msg)
|
| +{
|
| + fprintf (stderr, "%s\n", msg);
|
| +}
|
| +
|
| +int
|
| +yylex (void)
|
| +{
|
| + return 0;
|
| +}
|
| +
|
| +int
|
| +main (void)
|
| +{
|
| + yypstate *ps;
|
| + int i;
|
| +
|
| + for (i = 0; i < 2; ++i)
|
| + {
|
| + ps = yypstate_new ();
|
| + assert (ps);
|
| + assert (yypstate_new () == NULL);
|
| + ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
|
| + yychar = 0;
|
| + assert (yypush_parse (ps) == 0);
|
| + assert (yypstate_new () == NULL);
|
| + ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
|
| + yypstate_delete (ps);
|
| + }
|
| +
|
| + return 0;
|
| +}
|
| +]])
|
| +
|
| +AT_BISON_CHECK([[-o input.c input.y]])
|
| +AT_COMPILE([[input]])
|
| +AT_PARSER_CHECK([[./input]])
|
| +])
|
| +
|
| +AT_MULTIPLE_IMPURE_INSTANCES_CHECK([[both]])
|
| +AT_MULTIPLE_IMPURE_INSTANCES_CHECK([[push]])
|
| +
|
| +m4_popdef([AT_MULTIPLE_IMPURE_INSTANCES_CHECK])
|
| +
|
| +AT_CLEANUP
|
| +
|
| +## ------------------------------------- ##
|
| +## Push Parsing: Unsupported Skeletons. ##
|
| +## ------------------------------------- ##
|
| +
|
| +AT_SETUP([[Push Parsing: Unsupported Skeletons]])
|
| +
|
| +AT_DATA([[input.y]],
|
| +[[%glr-parser
|
| +%define api.push_pull "push"
|
| +%%
|
| +start: ;
|
| +]])
|
| +
|
| +AT_BISON_CHECK([[input.y]], [0], [],
|
| +[[input.y:2.9-21: warning: %define variable `api.push_pull' is not used
|
| +]])
|
| +
|
| +AT_CLEANUP
|
|
|