lexer: Reimplement for better testability and internationalization.
[pspp-builds.git] / tests / language / control / do-repeat.at
1 AT_BANNER([DO REPEAT])
2
3 AT_SETUP([DO REPEAT -- simple])
4 AT_DATA([do-repeat.sps], [dnl
5 INPUT PROGRAM.
6 STRING y(A1).
7 DO REPEAT xval = 1 2 3 / yval = 'a' 'b' 'c' / var = a b c.
8 COMPUTE x=xval.
9 COMPUTE y=yval.
10 COMPUTE var=xval.
11 END CASE.
12 END REPEAT.
13 END FILE.
14 END INPUT PROGRAM.
15 LIST.
16 ])
17 AT_CHECK([pspp -o pspp.csv do-repeat.sps])
18 AT_CHECK([cat pspp.csv], [0], [dnl
19 Table: Data List
20 y,x,a,b,c
21 a,1.00,1.00,.  ,.  @&t@
22 b,2.00,.  ,2.00,.  @&t@
23 c,3.00,.  ,.  ,3.00
24 ])
25 AT_CLEANUP
26
27 AT_SETUP([DO REPEAT -- containing BEGIN DATA])
28 AT_DATA([do-repeat.sps], [dnl
29 DO REPEAT offset = 1 2 3.
30 DATA LIST NOTABLE /x 1-2.
31 BEGIN DATA.
32 10
33 20
34 30
35 END DATA.
36 COMPUTE x = x + offset.
37 LIST.
38 END REPEAT.
39 ])
40 AT_CHECK([pspp -o pspp.csv do-repeat.sps])
41 AT_CHECK([cat pspp.csv], [0], [dnl
42 Table: Data List
43 x
44 11
45 21
46 31
47
48 Table: Data List
49 x
50 12
51 22
52 32
53
54 Table: Data List
55 x
56 13
57 23
58 33
59 ])
60 AT_CLEANUP
61
62 AT_SETUP([DO REPEAT -- dummy vars not expanded in include files])
63 AT_DATA([include.sps], [dnl
64 COMPUTE y = y + x + 10.
65 ])
66 AT_DATA([do-repeat.sps], [dnl
67 INPUT PROGRAM.
68 COMPUTE x = 0.
69 COMPUTE y = 0.
70 END CASE.
71 END FILE.
72 END INPUT PROGRAM.
73
74 DO REPEAT x = 1 2 3.
75 INCLUDE 'include.sps'.
76 END REPEAT.
77
78 LIST.
79 ])
80 AT_CHECK([pspp -o pspp.csv do-repeat.sps], [0], [dnl
81 do-repeat.sps:8: warning: DO REPEAT: Dummy variable name `x' hides dictionary variable `x'.
82 ])
83 AT_CHECK([cat pspp.csv], [0], [dnl
84 do-repeat.sps:8: warning: DO REPEAT: Dummy variable name `x' hides dictionary variable `x'.
85
86 Table: Data List
87 x,y
88 .00,30.00
89 ])
90 AT_CLEANUP
91
92 AT_SETUP([DO REPEAT -- nested])
93 AT_DATA([do-repeat.sps], [dnl
94 DATA LIST NOTABLE /a 1.
95 BEGIN DATA.
96 0
97 END DATA.
98
99 DO REPEAT h = h0 TO h3 / x = 0 TO 3 / y = 8, 7.5, 6, 5.
100         COMPUTE h = x + y.
101 END REPEAT.
102
103 VECTOR v(6).
104 COMPUTE #idx = 0.
105 DO REPEAT i = 1 TO 2.
106         DO REPEAT j = 3 TO 5.
107                 COMPUTE #x = i + j.
108                 COMPUTE #idx = #idx + 1.
109                 COMPUTE v(#idx) = #x.
110         END REPEAT.
111 END REPEAT.
112
113 LIST.
114 ])
115 AT_CHECK([pspp -o pspp.csv do-repeat.sps])
116 AT_CHECK([cat pspp.csv], [0], [dnl
117 Table: Data List
118 a,h0,h1,h2,h3,v1,v2,v3,v4,v5,v6
119 0,8.00,8.50,8.00,8.00,4.00,5.00,6.00,5.00,6.00,7.00
120 ])
121 AT_CLEANUP
122
123 dnl This program tests for a bug that crashed PSPP given an empty DO
124 dnl REPEAT...END REPEAT block.  See bug #18407.
125 AT_SETUP([DO REPEAT -- empty])
126 AT_DATA([do-repeat.sps], [dnl
127 DATA LIST NOTABLE /a 1.
128 BEGIN DATA.
129 0
130 END DATA.
131
132 DO REPEAT h = a.
133 END REPEAT.
134 ])
135 AT_CHECK([pspp -o pspp.csv do-repeat.sps])
136 AT_CHECK([cat pspp.csv], [0], [dnl
137 ])
138 AT_CLEANUP
139
140 dnl This program tests for a bug that crashed PSPP when END REPEAT
141 dnl was missing.  See bug #31016.
142 AT_SETUP([DO REPEAT -- missing END REPEAT])
143 AT_DATA([do-repeat.sps], [dnl
144 DATA LIST NOTABLE /x 1.
145 DO REPEAT y = 1 TO 10.
146 ])
147 AT_CHECK([pspp -O format=csv do-repeat.sps], [1], [dnl
148 error: DO REPEAT: Syntax error at end of input: expecting `END'.
149 ])
150 AT_CLEANUP