1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 dnl GNU General Public License for more details.
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
19 m4_define([LOOP_DATA], [dnl
20 data list notable /x 1 y 2 z 3.
29 AT_SETUP([LOOP with index])
30 AT_DATA([loop.sps], [dnl
38 AT_CHECK([pspp -o pspp.csv loop.sps])
39 AT_CHECK([cat pspp.csv], [0], [dnl
54 AT_SETUP([LOOP with IF condition])
55 AT_DATA([loop.sps], [dnl
65 AT_CHECK([pspp -o pspp.csv loop.sps])
66 AT_CHECK([cat pspp.csv], [0], [dnl
81 AT_SETUP([LOOP with END IF condition])
82 AT_DATA([loop.sps], [dnl
92 AT_CHECK([pspp -o pspp.csv loop.sps])
93 AT_CHECK([cat pspp.csv], [0], [dnl
109 AT_SETUP([LOOP with index and IF based on index])
110 AT_DATA([loop.sps], [dnl
112 loop #m=x to y by z if #m < 4.
118 AT_CHECK([pspp -o pspp.csv loop.sps])
119 AT_CHECK([cat pspp.csv], [0], [dnl
131 AT_SETUP([LOOP with index and END IF based on index])
132 AT_DATA([loop.sps], [dnl
140 AT_CHECK([pspp -o pspp.csv loop.sps])
141 AT_CHECK([cat pspp.csv], [0], [dnl
155 AT_SETUP([LOOP with index and IF and END IF based on index])
156 AT_DATA([loop.sps], [dnl
158 loop #o=x to y by z if mod(#o,2) = 0.
164 AT_CHECK([pspp -o pspp.csv loop.sps])
165 AT_CHECK([cat pspp.csv], [0], [dnl
175 AT_SETUP([LOOP with no conditions containing BREAK])
176 AT_DATA([loop.sps], [dnl
189 AT_CHECK([pspp -o pspp.csv loop.sps])
190 AT_CHECK([cat pspp.csv], [0], [dnl
204 AT_SETUP([LOOP with no conditions that ends due to MXLOOPS])
205 AT_DATA([loop.sps], [dnl
215 AT_CHECK([pspp -o pspp.csv loop.sps])
216 AT_CHECK([cat pspp.csv], [0], [dnl
232 AT_SETUP([LOOP with IF condition that ends due to MXLOOPS])
233 AT_DATA([loop.sps], [dnl
244 AT_CHECK([pspp -o pspp.csv loop.sps])
245 AT_CHECK([cat pspp.csv], [0], [dnl
264 AT_SETUP([LOOP negative])
265 AT_DATA([loop.sps], [dnl
266 DATA LIST NOTABLE /x 1.
270 LOOP A=1 TO 5 B=1 TO 5.
282 LOOP A=1 TO 5 BY 5 TO !.
284 LOOP A=1 BY 5 TO 10 BY !.
305 AT_CHECK([pspp loop.sps], 1, [dnl
306 loop.sps:2.1-2.5: error: BREAK: This command cannot appear outside LOOP...END
311 loop.sps:3.1-3.8: error: END LOOP: This command cannot appear outside LOOP...
316 loop.sps:5: error: LOOP: Only one index clause may be specified.
318 loop.sps:7.6: error: LOOP: Syntax error.
322 loop.sps:9.8: error: LOOP: Syntax error expecting `='.
326 loop.sps:11.8: error: LOOP: Syntax error.
330 loop.sps:13.13: error: LOOP: Syntax error.
334 loop.sps:15.13: error: LOOP: Syntax error.
338 loop.sps:17.20-17.21: error: LOOP: Subcommand TO may only be specified once.
339 17 | LOOP A=1 TO 5 BY 5 TO !.
342 loop.sps:19.21-19.22: error: LOOP: Subcommand BY may only be specified once.
343 19 | LOOP A=1 BY 5 TO 10 BY !.
346 loop.sps:21.1-21.9: error: LOOP: Required subcommand TO was not specified.
350 loop.sps:23.6: error: LOOP: Syntax error.
354 loop.sps:26.11-26.12: error: LOOP: Subcommand IF may only be specified once.
358 loop.sps:29.9: error: LOOP: Syntax error.
362 loop.sps:33.13: error: LOOP: Syntax error.
366 loop.sps:36.10: error: LOOP: Syntax error expecting end of command.
370 error: LOOP: At end of input: Syntax error.