AT_BANNER([DO REPEAT])

AT_SETUP([DO REPEAT -- simple])
AT_DATA([do-repeat.sps], [dnl
INPUT PROGRAM.
STRING y(A1).
DO REPEAT xval = 1 2 3 / yval = 'a' 'b' 'c' / var = a b c.
COMPUTE x=xval.
COMPUTE y=yval.
COMPUTE var=xval.
END CASE.
END REPEAT.
END FILE.
END INPUT PROGRAM.
LIST.
])
AT_CHECK([pspp -o pspp.csv do-repeat.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
Table: Data List
y,x,a,b,c
a,1.00,1.00,.  ,.  @&t@
b,2.00,.  ,2.00,.  @&t@
c,3.00,.  ,.  ,3.00
])
AT_CLEANUP

AT_SETUP([DO REPEAT -- containing BEGIN DATA])
AT_DATA([do-repeat.sps], [dnl
DO REPEAT offset = 1 2 3.
DATA LIST NOTABLE /x 1-2.
BEGIN DATA.
10
20
30
END DATA.
COMPUTE x = x + offset.
LIST.
END REPEAT.
])
AT_CHECK([pspp -o pspp.csv do-repeat.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
Table: Data List
x
11
21
31

Table: Data List
x
12
22
32

Table: Data List
x
13
23
33
])
AT_CLEANUP

AT_SETUP([DO REPEAT -- dummy vars not expanded in include files])
AT_DATA([include.sps], [dnl
COMPUTE y = y + x + 10.
])
AT_DATA([do-repeat.sps], [dnl
INPUT PROGRAM.
COMPUTE x = 0.
COMPUTE y = 0.
END CASE.
END FILE.
END INPUT PROGRAM.

DO REPEAT x = 1 2 3.
INCLUDE 'include.sps'.
END REPEAT.

LIST.
])
AT_CHECK([pspp -o pspp.csv do-repeat.sps], [0], [dnl
do-repeat.sps:8: warning: DO REPEAT: Dummy variable name `x' hides dictionary variable `x'.
])
AT_CHECK([cat pspp.csv], [0], [dnl
do-repeat.sps:8: warning: DO REPEAT: Dummy variable name `x' hides dictionary variable `x'.

Table: Data List
x,y
.00,30.00
])
AT_CLEANUP

AT_SETUP([DO REPEAT -- nested])
AT_DATA([do-repeat.sps], [dnl
DATA LIST NOTABLE /a 1.
BEGIN DATA.
0
END DATA.

DO REPEAT h = h0 TO h3 / x = 0 TO 3 / y = 8, 7.5, 6, 5.
	COMPUTE h = x + y.
END REPEAT.

VECTOR v(6).
COMPUTE #idx = 0.
DO REPEAT i = 1 TO 2.
	DO REPEAT j = 3 TO 5.
		COMPUTE #x = i + j.
		COMPUTE #idx = #idx + 1.
		COMPUTE v(#idx) = #x.
	END REPEAT.
END REPEAT.

LIST.
])
AT_CHECK([pspp -o pspp.csv do-repeat.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
Table: Data List
a,h0,h1,h2,h3,v1,v2,v3,v4,v5,v6
0,8.00,8.50,8.00,8.00,4.00,5.00,6.00,5.00,6.00,7.00
])
AT_CLEANUP

dnl This program tests for a bug that crashed PSPP given an empty DO
dnl REPEAT...END REPEAT block.  See bug #18407.
AT_SETUP([DO REPEAT -- empty])
AT_DATA([do-repeat.sps], [dnl
DATA LIST NOTABLE /a 1.
BEGIN DATA.
0
END DATA.

DO REPEAT h = a.
END REPEAT.
])
AT_CHECK([pspp -o pspp.csv do-repeat.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
])
AT_CLEANUP

dnl This program tests for a bug that crashed PSPP when END REPEAT
dnl was missing.  See bug #31016.
AT_SETUP([DO REPEAT -- missing END REPEAT])
AT_DATA([do-repeat.sps], [dnl
DATA LIST NOTABLE /x 1.
DO REPEAT y = 1 TO 10.
])
AT_CHECK([pspp -O format=csv do-repeat.sps], [1], [dnl
error: DO REPEAT: Syntax error at end of input: expecting END.
])
AT_CLEANUP
