bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

glr: strengthen the tests


From: Akim Demaille
Subject: glr: strengthen the tests
Date: Tue, 5 Jan 2021 07:26:05 +0100

commit c2a06bf7915d53ed9aaf6efdd14af15c64cc2654
Author: Akim Demaille <akim.demaille@gmail.com>
Date:   Tue Jan 5 07:03:58 2021 +0100

    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.

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])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]