X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flanguage%2Fcontrol%2Floop.at;h=23ab6b5b1873cd556f25c7661b70696ae9a6a195;hb=33f2a20744e97951032b729b3d98b611b071371f;hp=be214cce489e3ee52b4ff397585362cf53d22a52;hpb=681bd9eab15d80bf2e424033a249f54548b342f4;p=pspp diff --git a/tests/language/control/loop.at b/tests/language/control/loop.at index be214cce48..23ab6b5b18 100644 --- a/tests/language/control/loop.at +++ b/tests/language/control/loop.at @@ -1,3 +1,19 @@ +dnl PSPP - a program for statistical analysis. +dnl Copyright (C) 2017 Free Software Foundation, Inc. +dnl +dnl This program is free software: you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation, either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see . +dnl AT_BANNER([LOOP]) m4_define([LOOP_DATA], [dnl @@ -22,25 +38,15 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl 1.00 @&t@ - 2.00 @&t@ - -------- - 2.00 @&t@ - 4.00 @&t@ - -------- - 3.00 @&t@ - 6.00 @&t@ - 9.00 @&t@ - -------- - -------- ]) AT_CLEANUP @@ -59,25 +65,15 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl 1.00 @&t@ - 2.00 @&t@ - -------- - 2.00 @&t@ - 4.00 @&t@ - -------- - 3.00 @&t@ - 6.00 @&t@ - 9.00 @&t@ - -------- - -------- ]) AT_CLEANUP @@ -96,27 +92,16 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl 1.00 @&t@ - 2.00 @&t@ - -------- - 2.00 @&t@ - 4.00 @&t@ - -------- - 3.00 @&t@ - 6.00 @&t@ - 9.00 @&t@ - -------- - 4.00 @&t@ - -------- ]) AT_CLEANUP @@ -133,19 +118,12 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl 1.00 @&t@ - 2.00 @&t@ - -------- - 2.00 @&t@ - -------- - 3.00 @&t@ - -------- - -------- ]) AT_CLEANUP @@ -162,23 +140,14 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl 1.00 @&t@ - 2.00 @&t@ - -------- - 2.00 @&t@ - 4.00 @&t@ - -------- - 3.00 @&t@ - 6.00 @&t@ - -------- - -------- ]) AT_CLEANUP @@ -195,15 +164,10 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl -------- - 2.00 @&t@ - 4.00 @&t@ - -------- - -------- - -------- ]) AT_CLEANUP @@ -225,23 +189,14 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl 1.00 @&t@ - -------- - 2.00 @&t@ - 4.00 @&t@ - -------- - 3.00 @&t@ - 6.00 @&t@ - -------- - 4.00 @&t@ - -------- ]) AT_CLEANUP @@ -260,28 +215,160 @@ execute. AT_CHECK([pspp -o pspp.csv loop.sps]) AT_CHECK([cat pspp.csv], [0], [dnl 1 1.00 @&t@ - 1 2.00 @&t@ - -------- - 2 3.00 @&t@ - 2 4.00 @&t@ - -------- - 3 5.00 @&t@ - 3 6.00 @&t@ - -------- - 4 7.00 @&t@ - 4 8.00 @&t@ +-------- +]) +AT_CLEANUP +AT_SETUP([LOOP with IF condition that ends due to MXLOOPS]) +AT_DATA([loop.sps], [dnl +LOOP_DATA +set mxloops=3. +compute #p = x. +loop. +print /x #p. +compute #p = #p + 1. +end loop if #p >= 6. +print/'--------'. +execute. +]) +AT_CHECK([pspp -o pspp.csv loop.sps]) +AT_CHECK([cat pspp.csv], [0], [dnl +1 1.00 @&t@ +1 2.00 @&t@ +1 3.00 @&t@ +-------- +2 2.00 @&t@ +2 3.00 @&t@ +2 4.00 @&t@ +-------- +3 3.00 @&t@ +3 4.00 @&t@ +3 5.00 @&t@ +-------- +4 4.00 @&t@ +4 5.00 @&t@ -------- ]) AT_CLEANUP +AT_SETUP([LOOP negative]) +AT_DATA([loop.sps], [dnl +DATA LIST NOTABLE /x 1. +BREAK. +END LOOP. + +LOOP A=1 TO 5 B=1 TO 5. +END LOOP. +LOOP 5. +END LOOP. +LOOP B !. +END LOOP. +LOOP B=!. +END LOOP. +LOOP A=1 TO !. +END LOOP. +LOOP A=1 BY !. +END LOOP. +LOOP A=1 TO 5 BY 5 TO !. +END LOOP. +LOOP A=1 BY 5 TO 10 BY !. +END LOOP. +LOOP A=1. +END LOOP. +LOOP !. +END LOOP. + +LOOP IF 1 IF 0. +END LOOP. + +LOOP IF !. +END LOOP. + +LOOP. +END LOOP IF !. + +LOOP. +END LOOP !. + +LOOP. +]) +AT_CHECK([pspp loop.sps], 1, [dnl +loop.sps:2.1-2.5: error: BREAK: This command cannot appear outside LOOP...END +LOOP. + 2 | BREAK. + | ^~~~~ + +loop.sps:3.1-3.8: error: END LOOP: This command cannot appear outside LOOP... +END LOOP. + 3 | END LOOP. + | ^~~~~~~~ + +loop.sps:5.15: error: LOOP: Only one index clause may be specified. + 5 | LOOP A=1 TO 5 B=1 TO 5. + | ^ + +loop.sps:7.6: error: LOOP: Syntax error expecting identifier. + 7 | LOOP 5. + | ^ + +loop.sps:9.8: error: LOOP: Syntax error expecting `='. + 9 | LOOP B !. + | ^ + +loop.sps:11.8: error: LOOP: Syntax error. + 11 | LOOP B=!. + | ^ + +loop.sps:13.13: error: LOOP: Syntax error. + 13 | LOOP A=1 TO !. + | ^ + +loop.sps:15.13: error: LOOP: Syntax error. + 15 | LOOP A=1 BY !. + | ^ + +loop.sps:17.20-17.21: error: LOOP: Subcommand TO may only be specified once. + 17 | LOOP A=1 TO 5 BY 5 TO !. + | ^~ + +loop.sps:19.21-19.22: error: LOOP: Subcommand BY may only be specified once. + 19 | LOOP A=1 BY 5 TO 10 BY !. + | ^~ + +loop.sps:21.1-21.9: error: LOOP: Required subcommand TO was not specified. + 21 | LOOP A=1. + | ^~~~~~~~~ + +loop.sps:23.6: error: LOOP: Syntax error expecting identifier. + 23 | LOOP !. + | ^ + +loop.sps:26.11-26.12: error: LOOP: Subcommand IF may only be specified once. + 26 | LOOP IF 1 IF 0. + | ^~ + +loop.sps:29.9: error: LOOP: Syntax error. + 29 | LOOP IF !. + | ^ + +loop.sps:33.13: error: LOOP: Syntax error. + 33 | END LOOP IF !. + | ^ + +loop.sps:36.10: error: LOOP: Syntax error expecting end of command. + 36 | END LOOP !. + | ^ + +error: LOOP: At end of input: Syntax error expecting END LOOP. +]) +AT_CLEANUP \ No newline at end of file