diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2021-01-05 07:03:58 +0100 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2021-01-05 07:23:44 +0100 |
commit | c2a06bf7915d53ed9aaf6efdd14af15c64cc2654 (patch) | |
tree | dd52c9a29785a3c0595a7dc43d500dbe68dd5898 /tests/cxx-type.at | |
parent | 87339599541c71fe9979783d8bb5698372082b4d (diff) | |
download | bison-c2a06bf7915d53ed9aaf6efdd14af15c64cc2654.tar.gz |
glr: strengthen the tests
On some experimentation I was running, the test suite was passing, yet
the example crashed when run in verbose mode. Let's add this case to
the test suite.
* tests/cxx-type.at: Run all these tests in verbose mode too.
Diffstat (limited to 'tests/cxx-type.at')
-rw-r--r-- | tests/cxx-type.at | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/tests/cxx-type.at b/tests/cxx-type.at index f1b6b144..64568ae9 100644 --- a/tests/cxx-type.at +++ b/tests/cxx-type.at @@ -28,6 +28,7 @@ m4_define([_AT_TEST_GLR_CXXTYPES], AT_DATA_GRAMMAR([types.y], [[/* Simplified C++ Type and Expression Grammar. */ +%define parse.trace $1 %code requires @@ -127,10 +128,21 @@ declarator : ID int main (int argc, char **argv) { - assert (argc == 2); (void) argc; - if (!freopen (argv[1], "r", stdin)) - return 3; - return yyparse (); + if (getenv ("YYDEBUG")) + yydebug = 1; + for (int i = 1; i < argc; ++i) + // Enable parse traces on option -p. + if (strcmp (argv[i], "-p") == 0) + yydebug = 1; + else + { + if (!freopen (argv[i], "r", stdin)) + return 3; + int status = yyparse (); + if (!status) + return status; + } + return 0; } ]AT_YYERROR_DEFINE[ @@ -383,67 +395,67 @@ m4_define([_AT_VERBOSE_GLR_STDERR_WITH_LOC], [[17.5: syntax error, unexpected ID, expecting '=' or '+' or ')' ]]) + ## ---------------------------------------------------- ## ## Compile the grammar described in the documentation. ## ## ---------------------------------------------------- ## +# AT_TEST([STDOUT], [STDERR]) +m4_pushdef([AT_TEST], +[AT_PARSER_CHECK([[types test-input]], 0, [$1], [$2]) +AT_PARSER_CHECK([[types -p test-input]], 0, [$1], [ignore]) +]) + AT_SETUP([GLR: Resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CXXTYPES([], [%dprec 1], [%dprec 2]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR]) +AT_TEST([_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, impure, locations]) _AT_TEST_GLR_CXXTYPES([%locations],[%dprec 1],[%dprec 2]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) +AT_TEST([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, no locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure], [%dprec 1], [%dprec 2]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR]) +AT_TEST([_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure %locations], [%dprec 1], [%dprec 2]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) +AT_TEST([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, impure, no locations]) _AT_TEST_GLR_CXXTYPES([], [%merge <stmtMerge>], [%merge <stmtMerge>]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR]) +AT_TEST([_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, impure, locations]) _AT_TEST_GLR_CXXTYPES([%locations], [%merge <stmtMerge>], [%merge <stmtMerge>]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) +AT_TEST([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, pure, no locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure], [%merge <stmtMerge>], [%merge <stmtMerge>]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR]) +AT_TEST([_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, pure, locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure %locations], [%merge <stmtMerge>],[%merge <stmtMerge>]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) +AT_TEST([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CXXTYPES([%define parse.error verbose], [%merge <stmtMerge>], [%merge <stmtMerge>]) -AT_PARSER_CHECK([[types test-input]], 0, - [_AT_AMBIG_GLR_OUTPUT], [_AT_VERBOSE_GLR_STDERR]) +AT_TEST([_AT_AMBIG_GLR_OUTPUT], [_AT_VERBOSE_GLR_STDERR]) AT_CLEANUP + +m4_popdef([AT_TEST]) |