lexer: Reimplement for better testability and internationalization.
[pspp-builds.git] / tests / language / data-io / print.at
1 AT_BANNER([PRINT and WRITE])
2
3 dnl These tests check unusual aspects of the PRINT and WRITE
4 dnl transformations:
5 dnl
6 dnl   - PRINT puts spaces between variables, unless a format
7 dnl     is specified explicitly.
8 dnl
9 dnl   - WRITE doesn't put space between variables.
10 dnl
11 dnl   - PRINT to an external file prefixes each line with a space.
12 dnl
13 dnl   - PRINT EJECT to an external file indicates a formfeed by a "1"
14 dnl     in the first column.
15 dnl
16 dnl   - WRITE writes out spaces for system-missing values, not a period.
17 dnl
18 dnl   - When no output is specified, an empty record is output.
19
20 AT_SETUP([PRINT numeric variables])
21 AT_DATA([print.sps], [dnl
22 data list notable /x y 1-2.
23 begin data.
24 12
25 34
26  6
27 7
28 90
29 end data.
30
31 print /x y.
32 print eject /x y 1-2.
33 print /x '-' y.
34 print.
35
36 execute.
37 ])
38 AT_CHECK([pspp -O format=csv print.sps], [0], [dnl
39 1 2 @&t@
40
41
42
43 12
44
45 1 -2 @&t@
46
47
48
49 3 4 @&t@
50
51
52
53 34
54
55 3 -4 @&t@
56
57
58
59 . 6 @&t@
60
61
62
63 .6
64
65 . -6 @&t@
66
67
68
69 7 . @&t@
70
71
72
73 7.
74
75 7 -. @&t@
76
77
78
79 9 0 @&t@
80
81
82
83 90
84
85 9 -0 @&t@
86
87
88 ])
89 AT_CLEANUP
90
91 AT_SETUP([PRINT string variables])
92 AT_DATA([print.sps], [dnl
93 DATA LIST FREE /s8 (a8) s10 (a10) vl255 (a255) vl258 (a258).
94 BEGIN DATA.
95 12345678
96 AaaaaaaaaZ
97 AbbbbMaryHadALittleLambbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ
98 AccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ
99 87654321
100 AnnnnnnnnZ
101 AmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmZ
102 AoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooWhyIsItSoZ
103 END DATA.
104
105 print
106         outfile='print.txt'
107         /s10 * vl255 * vl258 *.
108
109 EXECUTE.
110 ])
111 AT_CHECK([pspp -O format=csv print.sps])
112 AT_CHECK([cat print.txt], [0], [dnl
113  AaaaaaaaaZ AbbbbMaryHadALittleLambbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ AccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ @&t@
114  AnnnnnnnnZ AmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmZ AoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooWhyIsItSoZ @&t@
115 ])
116 AT_CLEANUP
117
118 AT_SETUP([PRINT to file])
119 AT_DATA([print.sps], [dnl
120 data list notable /x y 1-2.
121 begin data.
122 12
123 34
124  6
125 7
126 90
127 end data.
128
129 print outfile='print.out' /x y.
130 print eject outfile='print.out' /x y (f1,f1).
131 print outfile='print.out' /x '-' y.
132 print outfile='print.out'.
133
134 execute.
135 ])
136 AT_CHECK([pspp -O format=csv print.sps])
137 AT_CHECK([cat print.out], [0], [dnl
138  1 2 @&t@
139 112
140  1 -2 @&t@
141  @&t@
142  3 4 @&t@
143 134
144  3 -4 @&t@
145  @&t@
146  . 6 @&t@
147 1.6
148  . -6 @&t@
149  @&t@
150  7 . @&t@
151 17.
152  7 -. @&t@
153  @&t@
154  9 0 @&t@
155 190
156  9 -0 @&t@
157  @&t@
158 ])
159 AT_CLEANUP
160
161 dnl Tests for a bug which crashed when deallocating after a bad PRINT
162 dnl command.
163 AT_SETUP([PRINT crash bug])
164 AT_DATA([print.sps], [dnl
165 DATA LIST LIST NOTABLE /a * b *.
166 BEGIN DATA.
167 1 2
168 3 4
169 END DATA.
170
171 PRINT F8.2
172 LIST.
173 ])
174 AT_CHECK([pspp -O format=csv print.sps], [1], [dnl
175 print.sps:7.7-7.10: error: PRINT: Syntax error at `F8.2': expecting a valid subcommand.
176
177 Table: Data List
178 a,b
179 1.00,2.00
180 3.00,4.00
181 ])
182 AT_CLEANUP
183
184 AT_SETUP([WRITE to file])
185 AT_DATA([write.sps], [dnl
186 data list notable /x y 1-2.
187 begin data.
188 12
189 34
190  6
191 7
192 90
193 end data.
194
195 write outfile='write.out' /x y.
196 write outfile='write.out' /x y (2(f1)).
197 write outfile='write.out' /x '-' y.
198 write outfile='write.out'.
199
200 execute.
201 ])
202 AT_CHECK([pspp -O format=csv write.sps])
203 AT_CHECK([cat write.out], [0], [dnl
204 12
205 12
206 1-2
207
208 34
209 34
210 3-4
211
212  6
213  6
214  -6
215
216 7 @&t@
217 7 @&t@
218 7- @&t@
219
220 90
221 90
222 9-0
223
224 ])
225 AT_CLEANUP
226
227 AT_SETUP([PRINT overwrites file])
228 AT_DATA([output.txt], [abcdef
229 ])
230 AT_DATA([print.sps], [dnl
231 DATA LIST NOTABLE/x 1.
232 BEGIN DATA.
233 5
234 END DATA.
235 PRINT OUTFILE='output.txt'/x.
236 EXECUTE.
237 ])
238 AT_CHECK([pspp -O format=csv print.sps])
239 AT_CHECK([cat output.txt], [0], [ 5 @&t@
240 ])
241 AT_CLEANUP
242
243 AT_SETUP([PRINT overwrites file atomically])
244 AT_DATA([output.txt], [abcdef
245 ])
246 AT_DATA([print.sps],
247 [[DATA LIST NOTABLE/x 1.
248 BEGIN DATA.
249 5
250 END DATA.
251 PRINT OUTFILE='output.txt'/x.
252 HOST COMMAND=['kill -TERM $PPID'].
253 ]])
254 AT_CHECK([pspp -O format=csv print.sps], [143], [], [ignore])
255 AT_CHECK([cat output.txt], [0], [abcdef
256 ])
257 AT_CHECK(
258   [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
259 AT_CLEANUP
260
261 AT_SETUP([PRINT to same file being read])
262 AT_DATA([data.txt], [5
263 ])
264 AT_DATA([print.sps], [dnl
265 DATA LIST FILE='data.txt' NOTABLE/x 1.
266 COMPUTE y = x + 1.
267 PRINT OUTFILE='data.txt'/y.
268 EXECUTE.
269 ])
270 AT_CHECK([pspp -O format=csv print.sps])
271 AT_CHECK([cat data.txt], [0], [     6.00 @&t@
272 ])
273 AT_CHECK(
274   [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
275 AT_CLEANUP
276
277 AT_SETUP([PRINT to special file])
278 AT_SKIP_IF([test ! -c /dev/null])
279 AT_CHECK([ln -s /dev/null foo.out || exit 77])
280 AT_SKIP_IF([test ! -c foo.out])
281 AT_DATA([print.sps], [dnl
282 DATA LIST NOTABLE /x 1.
283 BEGIN DATA.
284 1
285 2
286 3
287 4
288 5
289 END DATA.
290 PRINT OUTFILE='foo.out'/x.
291 PRINT OUTFILE='foo2.out'/x.
292 EXECUTE.
293 ])
294 AT_CHECK([pspp -O format=csv print.sps])
295 AT_CHECK([cat foo2.out], [0], [dnl
296  1 @&t@
297  2 @&t@
298  3 @&t@
299  4 @&t@
300  5 @&t@
301 ])
302 ls -l foo.out foo2.out
303 AT_CHECK([test -c foo.out])
304 AT_CLEANUP