]> git.saurik.com Git - bison.git/blame - tests/regression.at
Attaching lineno to buckets is stupid, since only one copy of each
[bison.git] / tests / regression.at
CommitLineData
342b8b6e
AD
1# Bison Regressions. -*- Autotest -*-
2# Copyright 2001 Free Software Foundation, Inc.
c95f2d78 3
342b8b6e
AD
4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 2, or (at your option)
7# any later version.
c95f2d78 8
342b8b6e
AD
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
c95f2d78 13
342b8b6e
AD
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17# 02111-1307, USA.
c95f2d78 18
342b8b6e 19AT_BANNER([[Regression tests.]])
c95f2d78
AD
20
21## ------------------ ##
22## Duplicate string. ##
23## ------------------ ##
24
25
26AT_SETUP([Duplicate string])
27
28AT_DATA([duplicate.y],
29[[/* `Bison -v' used to dump core when two tokens are defined with the same
30 string, as LE and GE below. */
31
32%token NUM
33%token LE "<="
34%token GE "<="
35
36%%
37exp: '(' exp ')' | NUM ;
38%%
39]])
40
41AT_CHECK([bison -v duplicate.y -o duplicate.c], 0, ignore, ignore)
42
d803322e 43AT_CLEANUP
c95f2d78
AD
44
45
ba9dda1a
AD
46## ------------------------- ##
47## Unresolved SR Conflicts. ##
48## ------------------------- ##
0df87bb6 49
ba9dda1a 50AT_SETUP([Unresolved SR Conflicts])
0df87bb6
AD
51
52AT_DATA([input.y],
53[[%token NUM OP
54%%
55exp: exp OP exp | NUM;
56]])
57
58AT_CHECK([bison input.y -o input.c -v], 0, [],
59[input.y contains 1 shift/reduce conflict.
60])
61
62# Check the contents of the report.
63AT_CHECK([cat input.output], [],
64[[State 4 contains 1 shift/reduce conflict.
65
66Grammar
67
b29b2ed5
AD
68 Number, Line, Rule
69 1 3 exp -> exp OP exp
70 2 3 exp -> NUM
0df87bb6
AD
71
72Terminals, with rules where they appear
73
74$ (-1)
75error (256)
76NUM (257) 2
77OP (258) 1
78
79Nonterminals, with rules where they appear
80
81exp (5)
82 on left: 1 2, on right: 1
83
84
85state 0
86
87 NUM shift, and go to state 1
88
89 exp go to state 2
90
91
92
93state 1
94
95 exp -> NUM . (rule 2)
96
97 $default reduce using rule 2 (exp)
98
99
100
101state 2
102
103 exp -> exp . OP exp (rule 1)
104
105 $ go to state 5
106 OP shift, and go to state 3
107
108
109
110state 3
111
112 exp -> exp OP . exp (rule 1)
113
114 NUM shift, and go to state 1
115
116 exp go to state 4
117
118
119
120state 4
121
122 exp -> exp . OP exp (rule 1)
123 exp -> exp OP exp . (rule 1)
124
125 OP shift, and go to state 3
126
c73a41af
AD
127 OP [reduce using rule 1 (exp)]
128 $default reduce using rule 1 (exp)
129
0df87bb6
AD
130
131
132state 5
133
134 $ go to state 6
135
136
137
ba9dda1a
AD
138state 6
139
140 $default accept
141]])
142
d803322e 143AT_CLEANUP
ba9dda1a
AD
144
145
146## --------------------- ##
147## Solved SR Conflicts. ##
148## --------------------- ##
149
150AT_SETUP([Solved SR Conflicts])
151
152AT_DATA([input.y],
153[[%token NUM OP
154%right OP
155%%
156exp: exp OP exp | NUM;
157]])
158
159AT_CHECK([bison input.y -o input.c -v], 0, [], [])
160
161# Check the contents of the report.
162AT_CHECK([cat input.output], [],
163[[Conflict in state 4 between rule 1 and token OP resolved as shift.
164
165Grammar
166
b29b2ed5
AD
167 Number, Line, Rule
168 1 4 exp -> exp OP exp
169 2 4 exp -> NUM
ba9dda1a
AD
170
171Terminals, with rules where they appear
172
173$ (-1)
174error (256)
175NUM (257) 2
176OP (258) 1
177
178Nonterminals, with rules where they appear
179
180exp (5)
181 on left: 1 2, on right: 1
182
183
184state 0
185
186 NUM shift, and go to state 1
187
188 exp go to state 2
189
190
191
192state 1
193
194 exp -> NUM . (rule 2)
195
196 $default reduce using rule 2 (exp)
197
198
199
200state 2
201
202 exp -> exp . OP exp (rule 1)
203
204 $ go to state 5
205 OP shift, and go to state 3
206
207
208
209state 3
210
211 exp -> exp OP . exp (rule 1)
212
213 NUM shift, and go to state 1
214
215 exp go to state 4
216
217
218
219state 4
220
221 exp -> exp . OP exp (rule 1)
222 exp -> exp OP exp . (rule 1)
223
224 OP shift, and go to state 3
225
226 $default reduce using rule 1 (exp)
227
228
229
230state 5
231
232 $ go to state 6
233
234
235
0df87bb6
AD
236state 6
237
238 $default accept
239]])
240
d803322e 241AT_CLEANUP
0df87bb6 242
c95f2d78 243
7da99ede
AD
244
245## -------------------- ##
246## %expect not enough. ##
247## -------------------- ##
248
249AT_SETUP([%expect not enough])
250
251AT_DATA([input.y],
252[[%token NUM OP
253%expect 0
254%%
255exp: exp OP exp | NUM;
256]])
257
258AT_CHECK([bison input.y -o input.c], 1, [],
259[input.y contains 1 shift/reduce conflict.
260expected 0 shift/reduce conflicts
261])
d803322e 262AT_CLEANUP
7da99ede
AD
263
264
265## --------------- ##
266## %expect right. ##
267## --------------- ##
268
269AT_SETUP([%expect right])
270
271AT_DATA([input.y],
272[[%token NUM OP
273%expect 1
274%%
275exp: exp OP exp | NUM;
276]])
277
278AT_CHECK([bison input.y -o input.c], 0, [],
279[input.y contains 1 shift/reduce conflict.
280])
d803322e 281AT_CLEANUP
7da99ede
AD
282
283
284## ------------------ ##
285## %expect too much. ##
286## ------------------ ##
287
288AT_SETUP([%expect too much])
289
290AT_DATA([input.y],
291[[%token NUM OP
292%expect 2
293%%
294exp: exp OP exp | NUM;
295]])
296
297AT_CHECK([bison input.y -o input.c], 1, [],
298[input.y contains 1 shift/reduce conflict.
299expected 2 shift/reduce conflicts
300])
d803322e 301AT_CLEANUP
7da99ede
AD
302
303
cd5aafcf
AD
304## ---------------------- ##
305## Mixing %token styles. ##
306## ---------------------- ##
307
308
309AT_SETUP([Mixing %token styles])
310
311# Taken from the documentation.
312AT_DATA([input.y],
313[[%token <operator> OR "||"
314%token <operator> LE 134 "<="
315%left OR "<="
316%%
317exp: ;
318%%
319]])
320
321AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore)
322
d803322e 323AT_CLEANUP
cd5aafcf
AD
324
325
326
c95f2d78
AD
327## ---------------------- ##
328## %union and --defines. ##
329## ---------------------- ##
330
331
332AT_SETUP([%union and --defines])
333
334AT_DATA([union.y],
335[%union
336{
337 int integer;
338 char *string ;
339}
340%%
341exp: {};
342])
343
344AT_CHECK([bison --defines union.y])
345
d803322e 346AT_CLEANUP
342b8b6e
AD
347
348
349## --------------------------------------- ##
350## Duplicate '/' in C comments in %union ##
351## --------------------------------------- ##
352
353
354AT_SETUP([%union and C comments])
355
356AT_DATA([union-comment.y],
357[%union
358{
359 /* The int. */ int integer;
360 /* The string. */ char *string ;
361}
362%%
363exp: {};
364])
365
366AT_CHECK([bison union-comment.y])
367AT_CHECK([fgrep '//*' union-comment.tab.c], [1], [])
368
d803322e 369AT_CLEANUP
342b8b6e
AD
370
371
561f9a30
AD
372## ----------------- ##
373## Invalid input 1. ##
374## ----------------- ##
375
376
377AT_SETUP([Invalid input: 1])
378
379AT_DATA([input.y],
380[[%%
381?
382]])
383
384AT_CHECK([bison input.y], [1], [],
385[input.y:2: invalid input: `?'
386input.y:3: fatal error: no rules in the input grammar
387])
388
389AT_CLEANUP
390
391
392## ----------------- ##
393## Invalid input 2. ##
394## ----------------- ##
395
396
397AT_SETUP([Invalid input: 2])
398
399AT_DATA([input.y],
400[[%%
401default: 'a' }
402]])
403
404AT_CHECK([bison input.y], [1], [],
405[input.y:2: invalid input: `}'
406])
407
408AT_CLEANUP
409
410
270a173c 411
342b8b6e
AD
412## --------------------- ##
413## Invalid CPP headers. ##
414## --------------------- ##
415
270a173c
AD
416# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE)
417# -------------------------------------
418m4_define([AT_TEST_CPP_GUARD_H],
419[AT_SETUP([Invalid CPP guards: $1])
342b8b6e 420
d803322e
AD
421# Possibly create inner directories.
422dirname=`AS_DIRNAME([$1])`
270a173c 423AS_MKDIR_P([$dirname])
342b8b6e 424
270a173c 425AT_DATA([$1.y],
342b8b6e
AD
426[%%
427dummy:
428])
429
270a173c 430AT_CHECK([bison --defines=$1.h $1.y])
342b8b6e 431
270a173c
AD
432# CPP should be happy with it.
433AT_CHECK([$CC -E $1.h], 0, [ignore])
434
d803322e 435AT_CLEANUP
270a173c 436])
342b8b6e 437
270a173c
AD
438AT_TEST_CPP_GUARD_H([input/input])
439AT_TEST_CPP_GUARD_H([9foo])