]> git.saurik.com Git - bison.git/commitdiff
* tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts)
authorAkim Demaille <akim@epita.fr>
Tue, 19 Mar 2002 08:10:21 +0000 (08:10 +0000)
committerAkim Demaille <akim@epita.fr>
Tue, 19 Mar 2002 08:10:21 +0000 (08:10 +0000)
(Solved SR Conflicts, %expect not enough, %expect right)
(%expect too much): Move to...
* tests/conflicts.at: this new file.

ChangeLog
tests/Makefile.am
tests/conflicts.at [new file with mode: 0644]
tests/regression.at
tests/testsuite.at

index 5a6844aa240e690823dacde43cdb311e4a82175b..28b21652633ce39e86e2945dcc85b7333b1174c3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2002-03-19  Akim Demaille  <akim@epita.fr>
+
+       * tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts)
+       (Solved SR Conflicts, %expect not enough, %expect right)
+       (%expect too much): Move to...
+       * tests/conflicts.at: this new file.
+
 2002-03-19  Akim Demaille  <akim@epita.fr>
 
        * data/m4sugar/m4sugar.m4: Update from CVS Autoconf.
index 8f05b85500c4b34dd7c1da42c9cd9c8c6e218a0d..e7cf96982da7f2529f86697923460843d55759fd 100644 (file)
@@ -47,7 +47,7 @@ TESTSUITE_AT = \
        testsuite.at \
        input.at \
        output.at sets.at reduce.at \
-       headers.at actions.at calc.at \
+       headers.at actions.at conflicts.at calc.at \
         torture.at regression.at \
         semantic.at
 
diff --git a/tests/conflicts.at b/tests/conflicts.at
new file mode 100644 (file)
index 0000000..2c01787
--- /dev/null
@@ -0,0 +1,363 @@
+# Exercising Bison on conflicts.                         -*- Autotest -*-
+# Copyright 2002 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 2, 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AT_BANNER([[Conflicts.]])
+
+
+## ------------------- ##
+## %nonassoc and eof.  ##
+## ------------------- ##
+
+AT_SETUP([%nonassoc and eof])
+
+AT_DATA([input.y],
+[[
+%{
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <error.h>
+#define YYERROR_VERBOSE 1
+#define yyerror(Msg) \
+do { \
+  fprintf (stderr, "%s\n", Msg); \
+  exit (1); \
+} while (0)
+
+/* The current argument. */
+static const char *input = NULL;
+
+static int
+yylex (void)
+{
+  /* No token stands for end of file. */
+  if (input && *input)
+    return *input++;
+  else
+    return 0;
+}
+
+%}
+
+%nonassoc '<' '>'
+
+%%
+expr: expr '<' expr
+    | expr '>' expr
+    | '0'
+    ;
+%%
+int
+main (int argc, const char *argv[])
+{
+  if (argc > 1)
+    input = argv[1];
+  return yyparse ();
+}
+]])
+
+# Specify the output files to avoid problems on different file systems.
+AT_CHECK([bison input.y -o input.c])
+AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 0, [], [ignore])
+
+AT_CHECK([./input '0<0'])
+# FIXME: This is an actual bug, but a new one, in the sense that
+# no one has ever spotted it!  The messages are *wrong*: there should
+# be nothing there, it should be expected eof.
+AT_CHECK([./input '0<0<0'], [1], [],
+         [parse error, unexpected '<', expecting '<' or '>'
+])
+
+AT_CHECK([./input '0>0'])
+AT_CHECK([./input '0>0>0'], [1], [],
+         [parse error, unexpected '>', expecting '<' or '>'
+])
+
+AT_CHECK([./input '0<0>0'], [1], [],
+         [parse error, unexpected '>', expecting '<' or '>'
+])
+
+AT_CLEANUP
+
+
+
+## ------------------------- ##
+## Unresolved SR Conflicts.  ##
+## ------------------------- ##
+
+AT_SETUP([Unresolved SR Conflicts])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c -v], 0, [],
+[input.y contains 1 shift/reduce conflict.
+])
+
+# Check the contents of the report.
+AT_CHECK([cat input.output], [],
+[[State 5 contains 1 shift/reduce conflict.
+
+
+Grammar
+
+  Number, Line, Rule
+    0   3 $axiom -> exp $
+    1   3 exp -> exp OP exp
+    2   3 exp -> NUM
+
+
+Terminals, with rules where they appear
+
+$ (0) 0
+error (256)
+NUM (257) 2
+OP (258) 1
+
+
+Nonterminals, with rules where they appear
+
+$axiom (5)
+    on left: 0
+exp (6)
+    on left: 1 2, on right: 0 1
+
+
+state 0
+
+    NUM        shift, and go to state 1
+
+    exp        go to state 2
+
+
+
+state 1
+
+    exp  ->  NUM .   (rule 2)
+
+    $default   reduce using rule 2 (exp)
+
+
+
+state 2
+
+    $axiom  ->  exp . $   (rule 0)
+    exp  ->  exp . OP exp   (rule 1)
+
+    $          shift, and go to state 3
+    OP         shift, and go to state 4
+
+
+
+state 3
+
+    $axiom  ->  exp $ .   (rule 0)
+
+    $default   accept
+
+
+state 4
+
+    exp  ->  exp OP . exp   (rule 1)
+
+    NUM        shift, and go to state 1
+
+    exp        go to state 5
+
+
+
+state 5
+
+    exp  ->  exp . OP exp   (rule 1)
+    exp  ->  exp OP exp .   (rule 1)
+
+    OP         shift, and go to state 4
+
+    OP         [reduce using rule 1 (exp)]
+    $default   reduce using rule 1 (exp)
+
+
+
+]])
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## Solved SR Conflicts.  ##
+## --------------------- ##
+
+AT_SETUP([Solved SR Conflicts])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%right OP
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c -v], 0, [], [])
+
+# Check the contents of the report.
+AT_CHECK([cat input.output], [],
+[[Conflict in state 5 between rule 2 and token OP resolved as shift.
+
+
+Grammar
+
+  Number, Line, Rule
+    0   4 $axiom -> exp $
+    1   4 exp -> exp OP exp
+    2   4 exp -> NUM
+
+
+Terminals, with rules where they appear
+
+$ (0) 0
+error (256)
+NUM (257) 2
+OP (258) 1
+
+
+Nonterminals, with rules where they appear
+
+$axiom (5)
+    on left: 0
+exp (6)
+    on left: 1 2, on right: 0 1
+
+
+state 0
+
+    NUM        shift, and go to state 1
+
+    exp        go to state 2
+
+
+
+state 1
+
+    exp  ->  NUM .   (rule 2)
+
+    $default   reduce using rule 2 (exp)
+
+
+
+state 2
+
+    $axiom  ->  exp . $   (rule 0)
+    exp  ->  exp . OP exp   (rule 1)
+
+    $          shift, and go to state 3
+    OP         shift, and go to state 4
+
+
+
+state 3
+
+    $axiom  ->  exp $ .   (rule 0)
+
+    $default   accept
+
+
+state 4
+
+    exp  ->  exp OP . exp   (rule 1)
+
+    NUM        shift, and go to state 1
+
+    exp        go to state 5
+
+
+
+state 5
+
+    exp  ->  exp . OP exp   (rule 1)
+    exp  ->  exp OP exp .   (rule 1)
+
+    OP         shift, and go to state 4
+
+    $default   reduce using rule 1 (exp)
+
+
+
+]])
+
+AT_CLEANUP
+
+
+
+
+## -------------------- ##
+## %expect not enough.  ##
+## -------------------- ##
+
+AT_SETUP([%expect not enough])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 0
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c], 1, [],
+[input.y contains 1 shift/reduce conflict.
+expected 0 shift/reduce conflicts
+])
+AT_CLEANUP
+
+
+## --------------- ##
+## %expect right.  ##
+## --------------- ##
+
+AT_SETUP([%expect right])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 1
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c], 0)
+AT_CLEANUP
+
+
+## ------------------ ##
+## %expect too much.  ##
+## ------------------ ##
+
+AT_SETUP([%expect too much])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 2
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c], 1, [],
+[input.y contains 1 shift/reduce conflict.
+expected 2 shift/reduce conflicts
+])
+AT_CLEANUP
index 7517b931e8278335b4a0082eda14e2ee5235261f..acd249bccdf0cd5782c18cd4a1240034c74a714f 100644 (file)
@@ -1,5 +1,5 @@
 # Bison Regressions.                               -*- Autotest -*-
-# Copyright 2001 Free Software Foundation, Inc.
+# Copyright 2001, 2002 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
 AT_BANNER([[Regression tests.]])
 
 
-## ------------------- ##
-## %nonassoc and eof.  ##
-## ------------------- ##
-
-AT_SETUP([%nonassoc and eof])
-
-AT_DATA([input.y],
-[[
-%{
-#include <stdio.h>
-
-#define YYERROR_VERBOSE 1
-#define yyerror(Msg) \
-do { \
-  fprintf (stderr, "%s\n", Msg); \
-  exit (1); \
-} while (0)
-
-/* The current argument. */
-static const char *input = NULL;
-
-static int
-yylex (void)
-{
-  /* No token stands for end of file. */
-  if (input && *input)
-    return *input++;
-  else
-    return 0;
-}
-
-%}
-
-%nonassoc '<' '>'
-
-%%
-expr: expr '<' expr
-    | expr '>' expr
-    | '0'
-    ;
-%%
-int
-main (int argc, const char *argv[])
-{
-  if (argc > 1)
-    input = argv[1];
-  return yyparse ();
-}
-]])
-
-# Specify the output files to avoid problems on different file systems.
-AT_CHECK([bison input.y -o input.c])
-AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 0, [], [ignore])
-
-AT_CHECK([./input '0<0'])
-# FIXME: This is an actual bug, but a new one, in the sense that
-# no one has ever spotted it!  The messages are *wrong*: there should
-# be nothing there, it should be expected eof.
-AT_CHECK([./input '0<0<0'], [1], [],
-         [parse error, unexpected '<', expecting '<' or '>'
-])
-
-AT_CHECK([./input '0>0'])
-AT_CHECK([./input '0>0>0'], [1], [],
-         [parse error, unexpected '>', expecting '<' or '>'
-])
-
-AT_CHECK([./input '0<0>0'], [1], [],
-         [parse error, unexpected '>', expecting '<' or '>'
-])
-
-AT_CLEANUP
-
 ## ---------------- ##
 ## Braces parsing.  ##
 ## ---------------- ##
@@ -139,216 +66,6 @@ AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore)
 AT_CLEANUP
 
 
-## ------------------------- ##
-## Unresolved SR Conflicts.  ##
-## ------------------------- ##
-
-AT_SETUP([Unresolved SR Conflicts])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c -v], 0, [],
-[input.y contains 1 shift/reduce conflict.
-])
-
-# Check the contents of the report.
-AT_CHECK([cat input.output], [],
-[[State 5 contains 1 shift/reduce conflict.
-
-
-Grammar
-
-  Number, Line, Rule
-    0   3 $axiom -> exp $
-    1   3 exp -> exp OP exp
-    2   3 exp -> NUM
-
-
-Terminals, with rules where they appear
-
-$ (0) 0
-error (256)
-NUM (257) 2
-OP (258) 1
-
-
-Nonterminals, with rules where they appear
-
-$axiom (5)
-    on left: 0
-exp (6)
-    on left: 1 2, on right: 0 1
-
-
-state 0
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 2
-
-
-
-state 1
-
-    exp  ->  NUM .   (rule 2)
-
-    $default   reduce using rule 2 (exp)
-
-
-
-state 2
-
-    $axiom  ->  exp . $   (rule 0)
-    exp  ->  exp . OP exp   (rule 1)
-
-    $          shift, and go to state 3
-    OP         shift, and go to state 4
-
-
-
-state 3
-
-    $axiom  ->  exp $ .   (rule 0)
-
-    $default   accept
-
-
-state 4
-
-    exp  ->  exp OP . exp   (rule 1)
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 5
-
-
-
-state 5
-
-    exp  ->  exp . OP exp   (rule 1)
-    exp  ->  exp OP exp .   (rule 1)
-
-    OP         shift, and go to state 4
-
-    OP         [reduce using rule 1 (exp)]
-    $default   reduce using rule 1 (exp)
-
-
-
-]])
-
-AT_CLEANUP
-
-
-## --------------------- ##
-## Solved SR Conflicts.  ##
-## --------------------- ##
-
-AT_SETUP([Solved SR Conflicts])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%right OP
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c -v], 0, [], [])
-
-# Check the contents of the report.
-AT_CHECK([cat input.output], [],
-[[Conflict in state 5 between rule 2 and token OP resolved as shift.
-
-
-Grammar
-
-  Number, Line, Rule
-    0   4 $axiom -> exp $
-    1   4 exp -> exp OP exp
-    2   4 exp -> NUM
-
-
-Terminals, with rules where they appear
-
-$ (0) 0
-error (256)
-NUM (257) 2
-OP (258) 1
-
-
-Nonterminals, with rules where they appear
-
-$axiom (5)
-    on left: 0
-exp (6)
-    on left: 1 2, on right: 0 1
-
-
-state 0
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 2
-
-
-
-state 1
-
-    exp  ->  NUM .   (rule 2)
-
-    $default   reduce using rule 2 (exp)
-
-
-
-state 2
-
-    $axiom  ->  exp . $   (rule 0)
-    exp  ->  exp . OP exp   (rule 1)
-
-    $          shift, and go to state 3
-    OP         shift, and go to state 4
-
-
-
-state 3
-
-    $axiom  ->  exp $ .   (rule 0)
-
-    $default   accept
-
-
-state 4
-
-    exp  ->  exp OP . exp   (rule 1)
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 5
-
-
-
-state 5
-
-    exp  ->  exp . OP exp   (rule 1)
-    exp  ->  exp OP exp .   (rule 1)
-
-    OP         shift, and go to state 4
-
-    $default   reduce using rule 1 (exp)
-
-
-
-]])
-
-AT_CLEANUP
-
-
-
-
 ## ------------------- ##
 ## Rule Line Numbers.  ##
 ## ------------------- ##
@@ -494,63 +211,6 @@ AT_CLEANUP
 
 
 
-## -------------------- ##
-## %expect not enough.  ##
-## -------------------- ##
-
-AT_SETUP([%expect not enough])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%expect 0
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c], 1, [],
-[input.y contains 1 shift/reduce conflict.
-expected 0 shift/reduce conflicts
-])
-AT_CLEANUP
-
-
-## --------------- ##
-## %expect right.  ##
-## --------------- ##
-
-AT_SETUP([%expect right])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%expect 1
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c], 0)
-AT_CLEANUP
-
-
-## ------------------ ##
-## %expect too much.  ##
-## ------------------ ##
-
-AT_SETUP([%expect too much])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%expect 2
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c], 1, [],
-[input.y contains 1 shift/reduce conflict.
-expected 2 shift/reduce conflicts
-])
-AT_CLEANUP
-
-
 ## ---------------------- ##
 ## Mixing %token styles.  ##
 ## ---------------------- ##
index c1ef89c0cd2848d7eded0a022eae60de5bbd24d0..dd83d23bb55575ab54a21c380c1e685101744405 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU Bison.
-# Copyright 2000, 2001 Free Software Foundation, Inc.
+# Copyright 2000, 2001, 2002 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
@@ -25,13 +25,36 @@ AT_INIT
 
 AT_TESTED([bison])
 
+# Testing resistance to user bugs.
 m4_include([input.at])
+
+# Testing output file names.
 m4_include([output.at])
+
+# Testing the part of the engine that computes FOLLOW etc.
 m4_include([sets.at])
+
+# Testing grammar reduction.
 m4_include([reduce.at])
+
+# Testing that headers are sane.
 m4_include([headers.at])
+
+# Testing that user actions are properly performed.
 m4_include([actions.at])
+
+# Testing conflicts detection and resolution.
+m4_include([conflicts.at])
+
+# Fulling testing (compilation and execution of the parser) on calc.
 m4_include([calc.at])
+
+# Torturing the stack expansion at runtime.
+# Checking big, real world grammars.
 m4_include([torture.at])
+
+# Some old bugs.
 m4_include([regression.at])
+
+# Exercising bison.hairy, before it gets really removed...
 m4_include([semantic.at])