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