X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/0df87bb6096b345a0a25714ee64c3a49596f2778..c87d4863f6de617e0ed35dc566c59d5b4a072101:/tests/regression.at diff --git a/tests/regression.at b/tests/regression.at index 047d7519..6f702f32 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -40,14 +40,14 @@ exp: '(' exp ')' | NUM ; AT_CHECK([bison -v duplicate.y -o duplicate.c], 0, ignore, ignore) -AT_CLEANUP([duplicate.*]) +AT_CLEANUP -## ----------- ## -## Conflicts. ## -## ----------- ## +## ------------------------- ## +## Unresolved SR Conflicts. ## +## ------------------------- ## -AT_SETUP([Conflicts]) +AT_SETUP([Unresolved SR Conflicts]) AT_DATA([input.y], [[%token NUM OP @@ -123,6 +123,106 @@ state 4 OP shift, and go to state 3 + OP [reduce using rule 1 (exp)] + $default reduce using rule 1 (exp) + + + +state 5 + + $ go to state 6 + + + +state 6 + + $default accept +]]) + +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 4 between rule 1 and token OP resolved as shift. + +Grammar + +rule 1 exp -> exp OP exp +rule 2 exp -> NUM + +Terminals, with rules where they appear + +$ (-1) +error (256) +NUM (257) 2 +OP (258) 1 + +Nonterminals, with rules where they appear + +exp (5) + on left: 1 2, on right: 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 + + exp -> exp . OP exp (rule 1) + + $ go to state 5 + OP shift, and go to state 3 + + + +state 3 + + exp -> exp OP . exp (rule 1) + + NUM shift, and go to state 1 + + exp go to state 4 + + + +state 4 + + exp -> exp . OP exp (rule 1) + exp -> exp OP exp . (rule 1) + + OP shift, and go to state 3 + + $default reduce using rule 1 (exp) + state 5 @@ -136,7 +236,67 @@ state 6 $default accept ]]) -AT_CLEANUP(input.c input.output) +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, [], +[input.y contains 1 shift/reduce conflict. +]) +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 ## ---------------------- ## @@ -158,7 +318,7 @@ exp: ; AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore) -AT_CLEANUP([input.*]) +AT_CLEANUP @@ -181,7 +341,7 @@ exp: {}; AT_CHECK([bison --defines union.y]) -AT_CLEANUP([union.*]) +AT_CLEANUP ## --------------------------------------- ## @@ -204,7 +364,7 @@ exp: {}; AT_CHECK([bison union-comment.y]) AT_CHECK([fgrep '//*' union-comment.tab.c], [1], []) -AT_CLEANUP([union-comment.*]) +AT_CLEANUP ## ----------------- ## @@ -256,11 +416,9 @@ AT_CLEANUP m4_define([AT_TEST_CPP_GUARD_H], [AT_SETUP([Invalid CPP guards: $1]) -# possibly create and nuke inner directories. -m4_bmatch([$1], [[/]], -[dirname=`AS_DIRNAME([$1])` +# Possibly create inner directories. +dirname=`AS_DIRNAME([$1])` AS_MKDIR_P([$dirname]) -AT_CLEANUP_FILES([$dirname])]) AT_DATA([$1.y], [%% @@ -272,7 +430,7 @@ AT_CHECK([bison --defines=$1.h $1.y]) # CPP should be happy with it. AT_CHECK([$CC -E $1.h], 0, [ignore]) -AT_CLEANUP($1.*) +AT_CLEANUP ]) AT_TEST_CPP_GUARD_H([input/input])