DATA MATRIX: Avoid crash on invalid input
[pspp] / tests / language / data-io / matrix-data.at
1 AT_BANNER([MATRIX DATA])
2
3 AT_SETUP([Matrix data (lower file)])
4
5 AT_DATA([matrix-data.pspp], [dnl
6 matrix data
7     variables = rowtype_
8     var01 TO var08
9     /format = lower diagonal
10     /file = 'matrix.dat'
11     .
12
13 list.
14 ])
15
16 AT_DATA([matrix.dat], [dnl
17 mean  24.3  5.4  69.7  20.1  13.4  2.7  27.9  3.7
18 sd    5.7   1.5  23.5  5.8   2.8   4.5  5.4   1.5
19 n     92    92   92    92    92    92   92    92
20 corr 1.00
21 corr .18  1.00
22 corr -.22  -.17  1.00
23 corr .36  .31  -.14  1.00
24 corr .27  .16  -.12  .22  1.00
25 corr .33  .15  -.17  .24  .21  1.00
26 corr .50  .29  -.20  .32  .12  .38  1.00
27 corr .17  .29  -.05  .20  .27  .20  .04  1.00
28 ])
29
30
31 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
32 Table: Data List
33 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
34 mean    ,,24.3000,5.4000,69.7000,20.1000,13.4000,2.7000,27.9000,3.7000
35 STDDEV  ,,5.7000,1.5000,23.5000,5.8000,2.8000,4.5000,5.4000,1.5000
36 n       ,,92.0000,92.0000,92.0000,92.0000,92.0000,92.0000,92.0000,92.0000
37 corr    ,var01,1.0000,.1800,-.2200,.3600,.2700,.3300,.5000,.1700
38 corr    ,var02,.1800,1.0000,-.1700,.3100,.1600,.1500,.2900,.2900
39 corr    ,var03,-.2200,-.1700,1.0000,-.1400,-.1200,-.1700,-.2000,-.0500
40 corr    ,var04,.3600,.3100,-.1400,1.0000,.2200,.2400,.3200,.2000
41 corr    ,var05,.2700,.1600,-.1200,.2200,1.0000,.2100,.1200,.2700
42 corr    ,var06,.3300,.1500,-.1700,.2400,.2100,1.0000,.3800,.2000
43 corr    ,var07,.5000,.2900,-.2000,.3200,.1200,.3800,1.0000,.0400
44 corr    ,var08,.1700,.2900,-.0500,.2000,.2700,.2000,.0400,1.0000
45 ])
46 AT_CLEANUP
47
48
49
50 AT_SETUP([Matrix data (upper)])
51
52 AT_DATA([matrix-data.pspp], [dnl
53 matrix data
54     variables = rowtype_  var01 var02 var03 var04
55     /format = upper diagonal.
56
57 begin data
58 mean        34 35 36 37
59 sd          22 11 55 66
60 n_vector    100 101 102 103
61 corr        1 9 8 7
62 corr        1 6 5
63 corr        1 4
64 corr        1
65 end data.
66
67 list.
68 ])
69
70 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
71 Table: Data List
72 ROWTYPE_,VARNAME_,var01,var02,var03,var04
73 mean    ,,34.0000,35.0000,36.0000,37.0000
74 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
75 N       ,,100.0000,101.0000,102.0000,103.0000
76 corr    ,var01,1.0000,9.0000,8.0000,7.0000
77 corr    ,var02,9.0000,1.0000,6.0000,5.0000
78 corr    ,var03,8.0000,6.0000,1.0000,4.0000
79 corr    ,var04,7.0000,5.0000,4.0000,1.0000
80 ])
81
82 AT_CLEANUP
83
84 AT_SETUP([Matrix data (full)])
85
86 dnl Just for fun, this one is in a different case.
87 AT_DATA([matrix-data.pspp], [dnl
88 matrix data
89     variables = ROWTYPE_  var01 var02 var03 var04
90     /format = full diagonal.
91
92 begin data
93 MEAN 34 35 36 37
94 SD   22 11 55 66
95 N    100 101 102 103
96 CORR 1 9 8 7
97 CORR 9 1 6 5
98 CORR 8 6 1 4
99 CORR 7 5 4 1
100 end data.
101
102 list.
103 ])
104
105
106 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
107 Table: Data List
108 ROWTYPE_,VARNAME_,var01,var02,var03,var04
109 MEAN    ,,34.0000,35.0000,36.0000,37.0000
110 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
111 N       ,,100.0000,101.0000,102.0000,103.0000
112 CORR    ,var01,1.0000,9.0000,8.0000,7.0000
113 CORR    ,var02,9.0000,1.0000,6.0000,5.0000
114 CORR    ,var03,8.0000,6.0000,1.0000,4.0000
115 CORR    ,var04,7.0000,5.0000,4.0000,1.0000
116 ])
117
118 AT_CLEANUP
119
120
121 AT_SETUP([Matrix data (upper nodiagonal)])
122
123 AT_DATA([matrix-data.pspp], [dnl
124 matrix data
125     variables = rowtype_  var01 var02 var03 var04
126     /format = upper nodiagonal.
127
128 begin data
129 mean 34 35 36 37
130 sd   22 11 55 66
131 n    100 101 102 103
132 corr  9 8 7
133 corr  6 5
134 corr  4
135 end data.
136
137 list.
138 ])
139
140 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
141 Table: Data List
142 ROWTYPE_,VARNAME_,var01,var02,var03,var04
143 mean    ,,34.0000,35.0000,36.0000,37.0000
144 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
145 n       ,,100.0000,101.0000,102.0000,103.0000
146 corr    ,var01,1.0000,9.0000,8.0000,7.0000
147 corr    ,var02,9.0000,1.0000,6.0000,5.0000
148 corr    ,var03,8.0000,6.0000,1.0000,4.0000
149 corr    ,var04,7.0000,5.0000,4.0000,1.0000
150 ])
151
152 AT_CLEANUP
153
154
155 AT_SETUP([Matrix data (lower nodiagonal)])
156
157 AT_DATA([matrix-data.pspp], [dnl
158 matrix data
159     variables = rowtype_  var01 var02 var03 var04
160     /format = lower nodiagonal.
161
162 begin data
163 mean 34 35 36 37
164 sd   22 11 55 66
165 n    100 101 102 103
166 corr  9
167 corr  8 6
168 corr  7 5 4
169 end data.
170
171 list.
172 ])
173
174 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
175 Table: Data List
176 ROWTYPE_,VARNAME_,var01,var02,var03,var04
177 mean    ,,34.0000,35.0000,36.0000,37.0000
178 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
179 n       ,,100.0000,101.0000,102.0000,103.0000
180 corr    ,var01,1.0000,9.0000,8.0000,7.0000
181 corr    ,var02,9.0000,1.0000,6.0000,5.0000
182 corr    ,var03,8.0000,6.0000,1.0000,4.0000
183 corr    ,var04,7.0000,5.0000,4.0000,1.0000
184 ])
185
186 AT_CLEANUP
187
188
189
190 AT_SETUP([Matrix data split data])
191
192 AT_DATA([matrix-data.pspp], [dnl
193 matrix data
194     variables = s1 s2 rowtype_  var01 var02 var03
195     /split=s1 s2.
196
197 begin data
198 8 0   mean     21.4  5.0  72.9
199 8 0   sd       6.5   1.6  22.8
200 8 0   n        106   106  106
201 8 0   corr     1
202 8 0   corr    .41  1
203 8 0   corr    -.16  -.22  1
204 8 1   mean     11.4  1.0  52.9
205 8 1   sd       9.5   8.6  12.8
206 8 1   n        10   11  12
207 8 1   corr     1
208 8 1   corr    .51  1
209 8 1   corr    .36  -.41  1
210 end data.
211
212 display dictionary.
213
214 list.
215 ])
216
217
218 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
219 Variable,Description,Position
220 s1,Format: F4.0,1
221 s2,Format: F4.0,2
222 ROWTYPE_,Format: A8,3
223 VARNAME_,Format: A8,4
224 var01,Format: F10.4,5
225 var02,Format: F10.4,6
226 var03,Format: F10.4,7
227
228 Table: Data List
229 s1,s2,ROWTYPE_,VARNAME_,var01,var02,var03
230 8,0,mean    ,,21.4000,5.0000,72.9000
231 8,0,STDDEV  ,,6.5000,1.6000,22.8000
232 8,0,n       ,,106.0000,106.0000,106.0000
233 8,0,corr    ,var01,1.0000,.4100,-.1600
234 8,0,corr    ,var02,.4100,1.0000,-.2200
235 8,0,corr    ,var03,-.1600,-.2200,1.0000
236 8,1,mean    ,,11.4000,1.0000,52.9000
237 8,1,STDDEV  ,,9.5000,8.6000,12.8000
238 8,1,n       ,,10.0000,11.0000,12.0000
239 8,1,corr    ,var01,1.0000,.5100,.3600
240 8,1,corr    ,var02,.5100,1.0000,-.4100
241 8,1,corr    ,var03,.3600,-.4100,1.0000
242 ])
243
244 AT_CLEANUP
245
246
247
248
249 AT_SETUP([Matrix data duplicate variable])
250
251 dnl Negative test to check for sane behaviour in the face of bad syntax
252 AT_DATA([matrix-data.pspp], [dnl
253 set decimal = dot .
254 matrix data
255     variables = s1 s1 rowtype_  var01 var02 var03
256     /split=s1.
257
258 begin data
259 0   mean     21.4  5.0  72.9
260 0   sd       6.5   1.6  22.8
261 0   n        106   106  106
262 0   corr     1
263 0   corr    .41  1
264 0   corr    -.16  -.22  1
265 end data .
266
267 list.
268 ])
269
270
271 AT_CHECK([pspp -O format=csv matrix-data.pspp], [1], [dnl
272 matrix-data.pspp:3: error: MATRIX DATA: Variable s1 appears twice in variable list.
273
274 matrix-data.pspp:6: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
275 ])
276
277 AT_CLEANUP
278
279
280
281 AT_SETUP([Matrix data - long variable names])
282
283 AT_DATA([matrix-data.pspp], [dnl
284 matrix data
285     variables = rowtype_  var01 var_two variable_number_three variableFour
286     /format = upper diagonal.
287
288 begin data
289 mean         34  35  36  37
290 sd           22  11  55  66
291 n_vector    100 101 102 103
292 corr          1   9   8   7
293 corr              1   6   5
294 corr                  1   4
295 corr                      1
296 end data.
297
298 list.
299 ])
300
301 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
302 Table: Data List
303 ROWTYPE_,VARNAME_,var01,var_two,variable_number_three,variableFour
304 mean    ,,34.0000,35.0000,36.0000,37.0000
305 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
306 N       ,,100.0000,101.0000,102.0000,103.0000
307 corr    ,var01,1.0000,9.0000,8.0000,7.0000
308 corr    ,var_two,9.0000,1.0000,6.0000,5.0000
309 corr    ,variable_number_three,8.0000,6.0000,1.0000,4.0000
310 corr    ,variableFour,7.0000,5.0000,4.0000,1.0000
311 ])
312
313 AT_CLEANUP
314
315
316
317 AT_SETUP([Matrix reader - read integrity])
318
319 dnl Check that matrices presented are read correctly.
320 dnl The example below is an unlikely one since all
321 dnl covariance/correlation matrices must be symetrical
322 dnl but it serves a purpose for this test.
323 AT_DATA([matrix-reader.pspp], [dnl
324 matrix data
325     variables = rowtype_  var01 to var9
326     /format = full.
327
328 begin data
329 n    1  2  3  4  5  6  7  8  9
330 sd   100 200 300 400 500 600 700 800 900
331 corr 11 12 13 14 15 16 17 18 19
332 corr 21 22 23 24 25 26 27 28 29
333 corr 31 32 33 34 35 36 37 38 39
334 corr 41 42 43 44 45 46 47 48 49
335 corr 51 52 53 54 55 56 57 58 59
336 corr 61 62 63 64 65 66 67 68 69
337 corr 71 72 73 74 75 76 77 78 79
338 corr 81 82 83 84 85 86 87 88 89
339 corr 91 92 93 94 95 96 97 98 99
340 end data.
341
342 factor  /matrix = in (corr = *)
343         /analysis var02 var04 var06
344         /method = correlation
345         /rotation = norotate
346         /print correlation.
347 ])
348
349 AT_CHECK([pspp -O format=csv matrix-reader.pspp], [0], [dnl
350 Table: Correlation Matrix
351 ,,var02,var04,var06
352 Correlations,var02,22.00,24.00,26.00
353 ,var04,42.00,44.00,46.00
354 ,var06,62.00,64.00,66.00
355
356 Table: Component Matrix
357 ,Component,
358 ,1,2
359 var02,6.73,-2.23
360 var04,6.95,2.15
361 var06,9.22,.01
362 ])
363
364 AT_CLEANUP
365
366
367 AT_SETUP([Matrix data - too many rows])
368
369 dnl Test for a crash which occurred when the matrix had more rows declared
370 dnl than variables to hold them.
371 AT_DATA([matrix-data.pspp], [dnl
372 matrix data
373     variables = rowtype_
374     var01 var02 var03 var04
375     / format = upper diagonal .
376 begin data
377     mean     21.4  5.0  72.9  17.4
378     sd       6.5  1.6  22.8  5.7
379     n       106  106  106  106
380     corr    1.00  .32  .48  .28
381     corr    1.00  .72  .54  .44
382     corr    1.00  .50  .59  .64
383     corr    1.00  .62  .49  -.30
384     corr    1.00  .56  -.38  .52
385     corr    1.00  -.73  .91  .80
386     corr    1.00  -.65  -.60
387     corr    1.00  .70
388     corr    1.00
389 end data .
390
391 execute.
392 ])
393
394
395 AT_CHECK([pspp -O format=csv matrix-data.pspp], [1], [dnl
396 matrix-data.pspp:13: error: MATRIX DATA: There are 4 variable declared but the data has at least 5 matrix rows.
397
398 matrix-data.pspp:20: error: EXECUTE: EXECUTE is allowed only after the active dataset has been defined.
399 ])
400
401
402 AT_CLEANUP