1dd0812024f087e0ae6d89f98f6fe6c36d9e8eb5
[pspp] / tests / language / data-io / matrix-data.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017, 2020 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([MATRIX DATA])
18
19 dnl Keep this test in sync with Example 1 in doc/matrices.texi.
20 AT_SETUP([MATRIX DATA - LOWER DIAGONAL with ROWTYPE_])
21 AT_DATA([matrix-data.sps], [dnl
22 MATRIX DATA
23     VARIABLES=ROWTYPE_ var01 TO var08
24     /FILE='matrix-data.txt'.
25 FORMATS var01 TO var08(F5.2).
26 LIST.
27 ])
28 AT_DATA([matrix-data.txt], [dnl
29 MEAN  24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
30 SD     5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
31 N       92    92    92    92    92    92    92    92
32 'CORR'  1.00
33 CORR   .18  1.00
34 CORR  -.22  -.17  1.00
35 "CORR"   .36   .31  -.14  1.00
36 COR   .27   .16  -.12   .22  1.00
37 CORR   .33   .15  -.17   .24   .21  1.00
38 CORR   .50   .29  -.20   .32   .12   .38  1.00
39 CORR   .17   .29  -.05   .20   .27   .20   .04  1.00
40 ])
41
42 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
43 Table: Data List
44 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
45 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
46 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
47 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
48 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
49 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
50 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
51 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
52 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
53 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
54 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
55 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
56 ])
57 AT_CLEANUP
58
59 AT_SETUP([MATRIX DATA - UPPER DIAGONAL with ROWTYPE_])
60 AT_DATA([matrix-data.sps], [dnl
61 matrix data
62     variables = rowtype_  var01 var02 var03 var04
63     /format = upper diagonal.
64
65 begin data
66 mean        34 35 36 37
67 sd          22 11 55 66
68 n_ve    100 101 102 103
69 corr        1 9 8 7
70 corr        1 6 5
71 corr        1 4
72 corr        1
73 end data.
74
75 list.
76 ])
77
78 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
79 Table: Data List
80 ROWTYPE_,VARNAME_,var01,var02,var03,var04
81 MEAN,,34.0000,35.0000,36.0000,37.0000
82 STDDEV,,22.0000,11.0000,55.0000,66.0000
83 N,,100.0000,101.0000,102.0000,103.0000
84 CORR,var01,1.0000,9.0000,8.0000,7.0000
85 CORR,var02,9.0000,1.0000,6.0000,5.0000
86 CORR,var03,8.0000,6.0000,1.0000,4.0000
87 CORR,var04,7.0000,5.0000,4.0000,1.0000
88 ])
89 AT_CLEANUP
90
91 AT_SETUP([MATRIX DATA - FULL with ROWTYPE_])
92 dnl Just for fun, this one is in a different case.
93 AT_DATA([matrix-data.sps], [dnl
94 matrix data
95     variables = ROWTYPE_  var01 var02 var03 var04
96     /format = full diagonal.
97
98 begin data
99 MEAN 34 35 36 37
100 SD   22 11 55 66
101 N    100 101 102 103
102 CORR 1 9 8 7
103 CORR 9 1 6 5
104 CORR 8 6 1 4
105 CORR 7 5 4 1
106 end data.
107
108 list.
109 ])
110
111 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
112 Table: Data List
113 ROWTYPE_,VARNAME_,var01,var02,var03,var04
114 MEAN,,34.0000,35.0000,36.0000,37.0000
115 STDDEV,,22.0000,11.0000,55.0000,66.0000
116 N,,100.0000,101.0000,102.0000,103.0000
117 CORR,var01,1.0000,9.0000,8.0000,7.0000
118 CORR,var02,9.0000,1.0000,6.0000,5.0000
119 CORR,var03,8.0000,6.0000,1.0000,4.0000
120 CORR,var04,7.0000,5.0000,4.0000,1.0000
121 ])
122 AT_CLEANUP
123
124
125 AT_SETUP([MATRIX DATA - UPPER NODIAGONAL with ROWTYPE_])
126 AT_DATA([matrix-data.sps], [dnl
127 matrix data
128     variables = rowtype_  var01 var02 var03 var04
129     /format = upper nodiagonal.
130
131 begin data
132 mean 34 35 36 37
133 sd   22 11 55 66
134 n    100 101 102 103
135 corr  9 8 7
136 corr  6 5
137 corr  4
138 end data.
139
140 list.
141 ])
142
143 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
144 Table: Data List
145 ROWTYPE_,VARNAME_,var01,var02,var03,var04
146 MEAN,,34.0000,35.0000,36.0000,37.0000
147 STDDEV,,22.0000,11.0000,55.0000,66.0000
148 N,,100.0000,101.0000,102.0000,103.0000
149 CORR,var01,1.0000,9.0000,8.0000,7.0000
150 CORR,var02,9.0000,1.0000,6.0000,5.0000
151 CORR,var03,8.0000,6.0000,1.0000,4.0000
152 CORR,var04,7.0000,5.0000,4.0000,1.0000
153 ])
154 AT_CLEANUP
155
156 dnl Keep this test in sync with Example 2 in doc/matrices.texi.
157 AT_SETUP([MATRIX DATA - UPPER NODIAGONAL with ROWTYPE_ - 2])
158 AT_DATA([matrix-data.sps], [dnl
159 MATRIX DATA
160     VARIABLES=ROWTYPE_ var01 TO var08
161     /FORMAT=UPPER NODIAGONAL.
162 BEGIN DATA.
163 MEAN  24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
164 SD     5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
165 N       92    92    92    92    92    92    92    92
166 CORR         .17   .50  -.33   .27   .36  -.22   .18
167 CORR               .29   .29  -.20   .32   .12   .38
168 CORR                     .05   .20  -.15   .16   .21
169 CORR                           .20   .32  -.17   .12
170 CORR                                 .27   .12  -.24
171 CORR                                      -.20  -.38
172 CORR                                             .04
173 END DATA.
174 FORMATS var01 TO var08(F6.2).
175 LIST.
176 ])
177 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
178 Table: Data List
179 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
180 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
181 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
182 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
183 CORR,var01,1.00,.17,.50,-.33,.27,.36,-.22,.18
184 CORR,var02,.17,1.00,.29,.29,-.20,.32,.12,.38
185 CORR,var03,.50,.29,1.00,.05,.20,-.15,.16,.21
186 CORR,var04,-.33,.29,.05,1.00,.20,.32,-.17,.12
187 CORR,var05,.27,-.20,.20,.20,1.00,.27,.12,-.24
188 CORR,var06,.36,.32,-.15,.32,.27,1.00,-.20,-.38
189 CORR,var07,-.22,.12,.16,-.17,.12,-.20,1.00,.04
190 CORR,var08,.18,.38,.21,.12,-.24,-.38,.04,1.00
191 ])
192 AT_CLEANUP
193
194 AT_SETUP([MATRIX DATA - LOWER NODIAGONAL with ROWTYPE_])
195 AT_DATA([matrix-data.sps], [dnl
196 matrix data
197     variables = rowtype_  var01 var02 var03 var04
198     /format = lower nodiagonal
199     /cells = 2.
200
201 begin data
202 mean 34 35 36 37
203 sd   22 11 55 66
204 n    100 101 102 103
205 corr  9
206 corr  8 6
207 corr  7 5 4
208 end data.
209
210 list.
211 ])
212
213 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
214 "matrix-data.sps:4.6-4.10: warning: MATRIX DATA: CELLS is ignored when VARIABLES includes ROWTYPE_.
215     4 |     /cells = 2.
216       |      ^~~~~"
217
218 Table: Data List
219 ROWTYPE_,VARNAME_,var01,var02,var03,var04
220 MEAN,,34.0000,35.0000,36.0000,37.0000
221 STDDEV,,22.0000,11.0000,55.0000,66.0000
222 N,,100.0000,101.0000,102.0000,103.0000
223 CORR,var01,1.0000,9.0000,8.0000,7.0000
224 CORR,var02,9.0000,1.0000,6.0000,5.0000
225 CORR,var03,8.0000,6.0000,1.0000,4.0000
226 CORR,var04,7.0000,5.0000,4.0000,1.0000
227 ])
228 AT_CLEANUP
229
230 AT_SETUP([MATRIX DATA - split data])
231 AT_DATA([matrix-data.sps], [dnl
232 matrix data
233     variables = s1 s2 rowtype_  var01 var02 var03
234     /split=s1 s2.
235
236 begin data
237 8 0   mean     21.4  5.0  72.9
238 8 0   sd       6.5   1.6  22.8
239 8 0   n        106   106  106
240 8 0   corr     1
241 8 0   corr    .41  1
242 8 0   corr    -.16  -.22  1
243 8 1   mean     11.4  1.0  52.9
244 8 1   sd       9.5   8.6  12.8
245 8 1   n        10   11  12
246 8 1   corr     1
247 8 1   corr    .51  1
248 8 1   corr    .36  -.41  1
249 end data.
250
251 display dictionary.
252
253 list.
254 ])
255
256 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
257 Table: Variables
258 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
259 s1,1,Nominal,Input,8,Right,F4.0,F4.0
260 s2,2,Nominal,Input,8,Right,F4.0,F4.0
261 ROWTYPE_,3,Nominal,Input,8,Left,A8,A8
262 VARNAME_,4,Nominal,Input,8,Left,A8,A8
263 var01,5,Scale,Input,8,Right,F10.4,F10.4
264 var02,6,Scale,Input,8,Right,F10.4,F10.4
265 var03,7,Scale,Input,8,Right,F10.4,F10.4
266
267 Table: Split Values
268 Variable,Value
269 s1,8
270 s2,0
271
272 Table: Data List
273 s1,s2,ROWTYPE_,VARNAME_,var01,var02,var03
274 8,0,MEAN,,21.4000,5.0000,72.9000
275 8,0,STDDEV,,6.5000,1.6000,22.8000
276 8,0,N,,106.0000,106.0000,106.0000
277 8,0,CORR,var01,1.0000,.4100,-.1600
278 8,0,CORR,var02,.4100,1.0000,-.2200
279 8,0,CORR,var03,-.1600,-.2200,1.0000
280
281 Table: Split Values
282 Variable,Value
283 s1,8
284 s2,1
285
286 Table: Data List
287 s1,s2,ROWTYPE_,VARNAME_,var01,var02,var03
288 8,1,MEAN,,11.4000,1.0000,52.9000
289 8,1,STDDEV,,9.5000,8.6000,12.8000
290 8,1,N,,10.0000,11.0000,12.0000
291 8,1,CORR,var01,1.0000,.5100,.3600
292 8,1,CORR,var02,.5100,1.0000,-.4100
293 8,1,CORR,var03,.3600,-.4100,1.0000
294 ])
295
296 AT_CLEANUP
297
298 dnl Keep this test in sync with Example 4 in doc/matrices.texi.
299 AT_SETUP([MATRIX DATA - split data - 2])
300 AT_DATA([matrix-data.sps], [dnl
301 MATRIX DATA
302     VARIABLES=s1 ROWTYPE_  var01 TO var04
303     /SPLIT=s1
304     /FORMAT=FULL.
305 BEGIN DATA.
306 0 MEAN 34 35 36 37
307 0 SD   22 11 55 66
308 0 N    99 98 99 92
309 0 CORR  1 .9 .8 .7
310 0 CORR .9  1 .6 .5
311 0 CORR .8 .6  1 .4
312 0 CORR .7 .5 .4  1
313 1 MEAN 44 45 34 39
314 1 SD   23 15 51 46
315 1 N    98 34 87 23
316 1 CORR  1 .2 .3 .4
317 1 CORR .2  1 .5 .6
318 1 CORR .3 .5  1 .7
319 1 CORR .4 .6 .7  1
320 END DATA.
321 FORMATS var01 TO var04(F5.1).
322 LIST.
323 ])
324
325 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
326 Table: Split Values
327 Variable,Value
328 s1,0
329
330 Table: Data List
331 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
332 0,MEAN,,34.0,35.0,36.0,37.0
333 0,STDDEV,,22.0,11.0,55.0,66.0
334 0,N,,99.0,98.0,99.0,92.0
335 0,CORR,var01,1.0,.9,.8,.7
336 0,CORR,var02,.9,1.0,.6,.5
337 0,CORR,var03,.8,.6,1.0,.4
338 0,CORR,var04,.7,.5,.4,1.0
339
340 Table: Split Values
341 Variable,Value
342 s1,1
343
344 Table: Data List
345 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
346 1,MEAN,,44.0,45.0,34.0,39.0
347 1,STDDEV,,23.0,15.0,51.0,46.0
348 1,N,,98.0,34.0,87.0,23.0
349 1,CORR,var01,1.0,.2,.3,.4
350 1,CORR,var02,.2,1.0,.5,.6
351 1,CORR,var03,.3,.5,1.0,.7
352 1,CORR,var04,.4,.6,.7,1.0
353 ])
354 AT_CLEANUP
355
356 dnl Keep this test in sync with Example 5 in doc/matrices.texi.
357 AT_SETUP([MATRIX DATA - factor variables])
358 AT_DATA([matrix-data.sps], [dnl
359 MATRIX DATA
360     VARIABLES=ROWTYPE_ f1 var01 TO var04
361     /FACTOR=f1.
362 BEGIN DATA.
363 MEAN 0 34 35 36 37
364 SD   0 22 11 55 66
365 N    0 99 98 99 92
366 MEAN 1 44 45 34 39
367 SD   1 23 15 51 46
368 N    1 98 34 87 23
369 CORR .  1
370 CORR . .9  1
371 CORR . .8 .6  1
372 CORR . .7 .5 .4  1
373 END DATA.
374 FORMATS var01 TO var04(F5.1).
375 LIST.
376 ])
377
378 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
379 Table: Data List
380 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
381 MEAN,0,,34.0,35.0,36.0,37.0
382 STDDEV,0,,22.0,11.0,55.0,66.0
383 N,0,,99.0,98.0,99.0,92.0
384 MEAN,1,,44.0,45.0,34.0,39.0
385 STDDEV,1,,23.0,15.0,51.0,46.0
386 N,1,,98.0,34.0,87.0,23.0
387 CORR,.,var01,1.0,.9,.8,.7
388 CORR,.,var02,.9,1.0,.6,.5
389 CORR,.,var03,.8,.6,1.0,.4
390 CORR,.,var04,.7,.5,.4,1.0
391 ])
392 AT_CLEANUP
393
394 AT_SETUP([MATRIX DATA - factors and splits])
395 AT_DATA([matrix-data.sps], [dnl
396 matrix data
397     variables = s f rowtype_  var01 var02 var03
398     /split=s
399     /factor=f.
400
401 begin data
402 8 0   mean     21.4  5.0  72.9
403 8 0   sd       6.5   1.6  22.8
404 8 0   n        106   106  106
405 8 .   corr     1
406 8 .   corr    .41  1
407 8 .   corr    -.16  -.22  1
408 9 1   mean     11.4  1.0  52.9
409 9 1   sd       9.5   8.6  12.8
410 9 1   n        10   11  12
411 9 .   corr     1
412 9 .   corr    .51  1
413 9 .   corr    .36  -.41  1
414 end data.
415
416 display dictionary.
417
418 list.
419 ])
420 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
421 Table: Variables
422 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
423 s,1,Nominal,Input,8,Right,F4.0,F4.0
424 ROWTYPE_,2,Nominal,Input,8,Left,A8,A8
425 f,3,Nominal,Input,8,Right,F4.0,F4.0
426 VARNAME_,4,Nominal,Input,8,Left,A8,A8
427 var01,5,Scale,Input,8,Right,F10.4,F10.4
428 var02,6,Scale,Input,8,Right,F10.4,F10.4
429 var03,7,Scale,Input,8,Right,F10.4,F10.4
430
431 Table: Split Values
432 Variable,Value
433 s,8
434
435 Table: Data List
436 s,ROWTYPE_,f,VARNAME_,var01,var02,var03
437 8,MEAN,0,,21.4000,5.0000,72.9000
438 8,STDDEV,0,,6.5000,1.6000,22.8000
439 8,N,0,,106.0000,106.0000,106.0000
440 8,CORR,.,var01,1.0000,.4100,-.1600
441 8,CORR,.,var02,.4100,1.0000,-.2200
442 8,CORR,.,var03,-.1600,-.2200,1.0000
443
444 Table: Split Values
445 Variable,Value
446 s,9
447
448 Table: Data List
449 s,ROWTYPE_,f,VARNAME_,var01,var02,var03
450 9,MEAN,1,,11.4000,1.0000,52.9000
451 9,STDDEV,1,,9.5000,8.6000,12.8000
452 9,N,1,,10.0000,11.0000,12.0000
453 9,CORR,.,var01,1.0000,.5100,.3600
454 9,CORR,.,var02,.5100,1.0000,-.4100
455 9,CORR,.,var03,.3600,-.4100,1.0000
456 ])
457 AT_CLEANUP
458
459 AT_SETUP([MATRIX DATA - bad ROWTYPE_])
460 AT_DATA([matrix-data.sps], [dnl
461 matrix data
462     variables = rowtype_  var01 var02 var03 var04
463     /format = upper diagonal.
464
465 begin data
466 cork        1 9 8 7
467 corr        1 6 5
468 corr        1 4
469 corr        1
470 end data.
471
472 list.
473 ])
474
475 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
476 "matrix-data.sps:6.1-6.4: error: Unknown row type ""cork""."
477 ])
478 AT_CLEANUP
479
480 AT_SETUP([MATRIX DATA - unexpected ROWTYPE_])
481 AT_DATA([matrix-data.sps], [dnl
482 matrix data
483     variables = rowtype_ f1 var01 var02 var03 var04
484     /content = corr (sd)
485     /factor = f1
486     /format = upper diagonal.
487
488 begin data
489 corr . 1 9 8 7
490 corr . 1 6 5
491 corr . 1 4
492 corr . 1
493 sd   . 1 2 3 4
494
495 corr 0 1 9 8 7
496 corr 0 1 6 5
497 corr 0 1 4
498 corr 0 1
499 sd   0 1 2 3 4
500 end data.
501
502 list.
503 ])
504
505 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
506 matrix-data.sps:12: warning: Data contains pooled row type STDDEV not included in CONTENTS.
507
508 matrix-data.sps:14: warning: Data contains with-factors row type CORR not included in CONTENTS.
509
510 Table: Data List
511 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
512 CORR,.,var01,1.0000,9.0000,8.0000,7.0000
513 CORR,.,var02,9.0000,1.0000,6.0000,5.0000
514 CORR,.,var03,8.0000,6.0000,1.0000,4.0000
515 CORR,.,var04,7.0000,5.0000,4.0000,1.0000
516 STDDEV,.,,1.0000,2.0000,3.0000,4.0000
517 CORR,0,var01,1.0000,9.0000,8.0000,7.0000
518 CORR,0,var02,9.0000,1.0000,6.0000,5.0000
519 CORR,0,var03,8.0000,6.0000,1.0000,4.0000
520 CORR,0,var04,7.0000,5.0000,4.0000,1.0000
521 STDDEV,0,,1.0000,2.0000,3.0000,4.0000
522 ])
523 AT_CLEANUP
524
525 AT_SETUP([MATRIX DATA - bad number])
526 AT_DATA([matrix-data.sps], [dnl
527 matrix data
528     variables = rowtype_  var01 var02 var03 var04
529     /format = upper diagonal.
530
531 begin data
532 corr        1 9 8 7
533 corr        1 x 5
534 corr        1 4
535 corr        1
536 end data.
537
538 list.
539 ])
540
541 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
542 matrix-data.sps:7.15: error: Field contents are not numeric.
543
544 Table: Data List
545 ROWTYPE_,VARNAME_,var01,var02,var03,var04
546 CORR,var01,1.0000,9.0000,8.0000,7.0000
547 CORR,var02,9.0000,1.0000,.    ,5.0000
548 CORR,var03,8.0000,.    ,1.0000,4.0000
549 CORR,var04,7.0000,5.0000,4.0000,1.0000
550 ])
551 AT_CLEANUP
552
553 AT_SETUP([MATRIX DATA - long variable names])
554 AT_DATA([matrix-data.sps], [dnl
555 matrix data
556     variables = rowtype_  var01 var_two variable_number_three variableFour
557     /format = upper diagonal.
558
559 begin data
560 mean         34  35  36  37
561 sd           22  11  55  66
562 n_vector    100 101 102 103
563 corr          1   9   8   7
564 corr              1   6   5
565 corr                  1   4
566 corr                      1
567 end data.
568
569 list.
570 ])
571
572 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
573 Table: Data List
574 ROWTYPE_,VARNAME_,var01,var_two,variable_number_three,variableFour
575 MEAN,,34.0000,35.0000,36.0000,37.0000
576 STDDEV,,22.0000,11.0000,55.0000,66.0000
577 N,,100.0000,101.0000,102.0000,103.0000
578 CORR,var01,1.0000,9.0000,8.0000,7.0000
579 CORR,var_two,9.0000,1.0000,6.0000,5.0000
580 CORR,variable_number_three,8.0000,6.0000,1.0000,4.0000
581 CORR,variableFour,7.0000,5.0000,4.0000,1.0000
582 ])
583 AT_CLEANUP
584
585 AT_SETUP([MATRIX DATA - read integrity])
586 dnl Check that matrices presented are read correctly.
587 dnl The example below is an unlikely one since all
588 dnl covariance/correlation matrices must be symmetrical
589 dnl but it serves a purpose for this test.
590 AT_DATA([matrix-reader.sps], [dnl
591 matrix data
592     variables = rowtype_  var01 to var9
593     /format = full.
594
595 begin data
596 n    1  2  3  4  5  6  7  8  9
597 sd   100 200 300 400 500 600 700 800 900
598 corr 11 12 13 14 15 16 17 18 19
599 corr 21 22 23 24 25 26 27 28 29
600 corr 31 32 33 34 35 36 37 38 39
601 corr 41 42 43 44 45 46 47 48 49
602 corr 51 52 53 54 55 56 57 58 59
603 corr 61 62 63 64 65 66 67 68 69
604 corr 71 72 73 74 75 76 77 78 79
605 corr 81 82 83 84 85 86 87 88 89
606 corr 91 92 93 94 95 96 97 98 99
607 end data.
608 DEBUG MATRIX READ.
609 FORMATS var01 to var09(F3.0).
610 list.
611 factor  /matrix = in (corr = *)
612         /analysis var02 var04 var06
613         /method = correlation
614         /rotation = norotate
615         /print correlation.
616 ])
617
618 AT_CHECK([pspp --testing-mode -O format=csv matrix-reader.sps], [0], [dnl
619 Table: Debug Matrix Reader
620 ,,,var01,var02,var03,var04,var05,var06,var07,var08,var09
621 1,Correlation,var01,11.000,12.000,13.000,14.000,15.000,16.000,17.000,18.000,19.000
622 ,,var02,21.000,22.000,23.000,24.000,25.000,26.000,27.000,28.000,29.000
623 ,,var03,31.000,32.000,33.000,34.000,35.000,36.000,37.000,38.000,39.000
624 ,,var04,41.000,42.000,43.000,44.000,45.000,46.000,47.000,48.000,49.000
625 ,,var05,51.000,52.000,53.000,54.000,55.000,56.000,57.000,58.000,59.000
626 ,,var06,61.000,62.000,63.000,64.000,65.000,66.000,67.000,68.000,69.000
627 ,,var07,71.000,72.000,73.000,74.000,75.000,76.000,77.000,78.000,79.000
628 ,,var08,81.000,82.000,83.000,84.000,85.000,86.000,87.000,88.000,89.000
629 ,,var09,91.000,92.000,93.000,94.000,95.000,96.000,97.000,98.000,99.000
630 ,N,Value,1.000,2.000,3.000,4.000,5.000,6.000,7.000,8.000,9.000
631 ,Standard Deviation,Value,100.000,200.000,300.000,400.000,500.000,600.000,700.000,800.000,900.000
632
633 Table: Data List
634 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08,var09
635 N,,1,2,3,4,5,6,7,8,9
636 STDDEV,,100,200,300,400,500,600,700,800,900
637 CORR,var01,11,12,13,14,15,16,17,18,19
638 CORR,var02,21,22,23,24,25,26,27,28,29
639 CORR,var03,31,32,33,34,35,36,37,38,39
640 CORR,var04,41,42,43,44,45,46,47,48,49
641 CORR,var05,51,52,53,54,55,56,57,58,59
642 CORR,var06,61,62,63,64,65,66,67,68,69
643 CORR,var07,71,72,73,74,75,76,77,78,79
644 CORR,var08,81,82,83,84,85,86,87,88,89
645 CORR,var09,91,92,93,94,95,96,97,98,99
646
647 Table: Correlation Matrix
648 ,,var02,var04,var06
649 Correlation,var02,22.000,24.000,26.000
650 ,var04,42.000,44.000,46.000
651 ,var06,62.000,64.000,66.000
652
653 Table: Component Matrix
654 ,Component,
655 ,1,2
656 var02,6.73,-2.23
657 var04,6.95,2.15
658 var06,9.22,.01
659 ])
660 AT_CLEANUP
661
662 AT_SETUP([MATRIX DATA - too many rows])
663 dnl Test for a crash which occurred when the matrix had more rows declared
664 dnl than variables to hold them.
665 AT_DATA([matrix-data.sps], [dnl
666 matrix data
667     variables = rowtype_
668     var01 var02 var03 var04
669     / format = upper diagonal .
670 begin data
671     mean     21.4  5.0  72.9  17.4
672     sd       6.5  1.6  22.8  5.7
673     n       106  106  106  106
674     corr    1.00  .32  .48  .28
675     corr    1.00  .72  .54  .44
676     corr    1.00  .50  .59  .64
677     corr    1.00  .62  .49  -.30
678     corr    1.00  .56  -.38  .52
679     corr    1.00  -.73  .91  .80
680     corr    1.00  -.65  -.60
681     corr    1.00  .70
682     corr    1.00
683 end data .
684 FORMATS var01 TO var04 (F6.2).
685 LIST.
686 ])
687
688 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
689 matrix-data.sps:10.29-10.31: error: Extraneous data expecting end of line.
690
691 matrix-data.sps:11.24-11.31: error: Extraneous data expecting end of line.
692
693 matrix-data.sps:12.19-12.32: error: Extraneous data expecting end of line.
694
695 matrix-data.sps:18: error: Matrix CORR had 9 rows but 4 rows were expected.
696
697 Table: Data List
698 ROWTYPE_,VARNAME_,var01,var02,var03,var04
699 MEAN,,21.40,5.00,72.90,17.40
700 STDDEV,,6.50,1.60,22.80,5.70
701 N,,106.00,106.00,106.00,106.00
702 CORR,var01,1.00,.32,.48,.28
703 CORR,var02,.32,1.00,.72,.54
704 CORR,var03,.48,.72,1.00,.50
705 CORR,var04,.28,.54,.50,1.00
706 ])
707 AT_CLEANUP
708
709 AT_SETUP([MATRIX DATA - too few rows])
710 AT_DATA([matrix-data.sps], [dnl
711 matrix data
712     variables = rowtype_ s1 var01 var02 var03 var04
713     /split s1
714     /format = upper diagonal
715     /file='matrix-data.txt'.
716 FORMATS var01 TO var04 (F6.2).
717 LIST.
718 ])
719 AT_DATA([matrix-data.txt], [dnl
720 mean 1    21.4  5.0  72.9  17.4
721 sd   1    6.5  1.6  22.8  5.7
722 n    1   106  106  106  106
723 corr 1   1.00  .32  .48  .28
724 corr 2   1.00  .32  .48  .28
725 corr 2        2.00  .72  .54
726 ])
727
728 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
729 matrix-data.txt:5: error: Matrix CORR had 1 rows but 4 rows were expected.
730  
731 matrix-data.txt:6: error: Matrix CORR had 2 rows but 4 rows were expected.
732
733 Table: Split Values
734 Variable,Value
735 s1,1
736
737 Table: Data List
738 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
739 1,MEAN,,21.40,5.00,72.90,17.40
740 1,STDDEV,,6.50,1.60,22.80,5.70
741 1,N,,106.00,106.00,106.00,106.00
742 1,CORR,var01,1.00,.32,.48,.28
743 1,CORR,var02,.32,1.00,.  ,.  @&t@
744 1,CORR,var03,.48,.  ,1.00,.  @&t@
745 1,CORR,var04,.28,.  ,.  ,1.00
746
747 Table: Split Values
748 Variable,Value
749 s1,2
750
751 Table: Data List
752 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
753 2,CORR,var01,1.00,.32,.48,.28
754 2,CORR,var02,.32,2.00,.72,.54
755 2,CORR,var03,.48,.72,1.00,.  @&t@
756 2,CORR,var04,.28,.54,.  ,1.00
757 ])
758 AT_CLEANUP
759
760 AT_SETUP([MATRIX DATA - badly formed])
761 AT_DATA([data.sps], [dnl
762 data list list NOTABLE /ROWTYPE_ (a8) VARNAME_(a4) v1 v2 v3 v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx.
763 begin data
764 mean ""                          1 2 3 4
765 sd   ""                          5 6 7 8
766 n    ""                          2 3 4 5
767 corr v1                          11 22 33 44
768 corr v2                          55 66 77 88
769 corr v3                          111 222 333 444
770 corr v4                           4 3 21 1
771 end data.
772
773 DEBUG MATRIX READ.
774 ])
775
776 AT_CHECK([pspp --testing-mode -O format=csv data.sps], [0], [dnl
777 data.sps:12: warning: DEBUG MATRIX READ: CORR matrix has 4 columns but 3 rows named variables to be analyzed (and 1 rows named unknown variables).
778
779 Table: Debug Matrix Reader
780 ,,,v1,v2,v3,v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx
781 1,Correlation,v1,11.000,22.000,33.000,44.000
782 ,,v2,55.000,66.000,77.000,88.000
783 ,,v3,111.000,222.000,333.000,444.000
784 ,,v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx,.   ,.   ,.   ,.   @&t@
785 ,N,Value,2.000,3.000,4.000,5.000
786 ,Mean,Value,1.000,2.000,3.000,4.000
787 ])
788 AT_CLEANUP
789
790 AT_SETUP([MATRIX DATA - N subcommand])
791 AT_DATA([matrix-data.sps], [dnl
792 matrix data
793     variables = rowtype_  var01 var02 var03 var04
794     /n = 99
795     /format = upper nodiagonal.
796 begin data
797 mean 34 35 36 37
798 sd   22 11 55 66
799 n_vector 1 2 3 4
800 corr  9 8 7
801 corr  6 5
802 corr  4
803 end data.
804
805 list.
806 ])
807
808 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
809 matrix-data.sps:8: error: N record is not allowed with N subcommand.  Ignoring N record.
810
811 Table: Data List
812 ROWTYPE_,VARNAME_,var01,var02,var03,var04
813 N,,99.0000,99.0000,99.0000,99.0000
814 MEAN,,34.0000,35.0000,36.0000,37.0000
815 STDDEV,,22.0000,11.0000,55.0000,66.0000
816 CORR,var01,1.0000,9.0000,8.0000,7.0000
817 CORR,var02,9.0000,1.0000,6.0000,5.0000
818 CORR,var03,8.0000,6.0000,1.0000,4.0000
819 CORR,var04,7.0000,5.0000,4.0000,1.0000
820 ])
821 AT_CLEANUP
822
823 dnl Keep this test in sync with Example 3 in doc/matrices.texi.
824 AT_SETUP([MATRIX DATA - N subcommand - 2])
825 AT_DATA([matrix-data.sps], [dnl
826 MATRIX DATA
827     VARIABLES=ROWTYPE_ var01 TO var08
828     /FORMAT=UPPER NODIAGONAL
829     /N 92.
830 BEGIN DATA.
831 MEAN  24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
832 SD     5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
833 CORR         .17   .50  -.33   .27   .36  -.22   .18
834 CORR               .29   .29  -.20   .32   .12   .38
835 CORR                     .05   .20  -.15   .16   .21
836 CORR                           .20   .32  -.17   .12
837 CORR                                 .27   .12  -.24
838 CORR                                      -.20  -.38
839 CORR                                             .04
840 END DATA.
841 FORMATS var01 TO var08(F6.2).
842 LIST.
843 ])
844
845 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
846 Table: Data List
847 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
848 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
849 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
850 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
851 CORR,var01,1.00,.17,.50,-.33,.27,.36,-.22,.18
852 CORR,var02,.17,1.00,.29,.29,-.20,.32,.12,.38
853 CORR,var03,.50,.29,1.00,.05,.20,-.15,.16,.21
854 CORR,var04,-.33,.29,.05,1.00,.20,.32,-.17,.12
855 CORR,var05,.27,-.20,.20,.20,1.00,.27,.12,-.24
856 CORR,var06,.36,.32,-.15,.32,.27,1.00,-.20,-.38
857 CORR,var07,-.22,.12,.16,-.17,.12,-.20,1.00,.04
858 CORR,var08,.18,.38,.21,.12,-.24,-.38,.04,1.00
859 ])
860 AT_CLEANUP
861
862 dnl A "no-crash" test.  This was observed to cause problems.
863 dnl See bug #58596
864 AT_SETUP([MATRIX DATA - crash])
865
866 AT_DATA([matrix-data.sps], [dnl
867 begin data
868 corr 31
869
870 matrix data
871     var1
872 begin data
873     corr    1.00
874 end data .
875
876 matrix data
877     variables = roxtype_  var01
878    /format = upper nodiagonal.
879 begin data
880 ])
881
882 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [ignore])
883 AT_CLEANUP
884 \f
885 dnl Keep this test in sync with Example 6 in doc/matrices.texi.
886 AT_SETUP([MATRIX DATA - LOWER DIAGONAL without ROWTYPE_])
887 AT_DATA([matrix-data.sps], [dnl
888 MATRIX DATA
889     VARIABLES=var01 TO var08
890    /CONTENTS=MEAN SD N CORR.
891 BEGIN DATA.
892 24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
893  5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
894   92    92    92    92    92    92    92    92
895 1.00
896  .18  1.00
897 -.22  -.17  1.00
898  .36   .31  -.14  1.00
899  .27   .16  -.12   .22  1.00
900  .33   .15  -.17   .24   .21  1.00
901  .50   .29  -.20   .32   .12   .38  1.00
902  .17   .29  -.05   .20   .27   .20   .04  1.00
903 END DATA.
904 FORMATS var01 TO var08(F5.2).
905 LIST.
906 ])
907 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
908 Table: Data List
909 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
910 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
911 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
912 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
913 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
914 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
915 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
916 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
917 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
918 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
919 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
920 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
921 ])
922 AT_CLEANUP
923
924 AT_SETUP([MATRIX DATA - extraneous data without ROWTYPE_])
925 AT_DATA([matrix-data.sps], [dnl
926 MATRIX DATA
927     VARIABLES=var01 TO var08
928    /CONTENTS=MEAN SD N CORR.
929 BEGIN DATA.
930 24.3   5.4  69.7  20.1  13.4   2.7  27.9   3.7
931  5.7   1.5  23.5   5.8   2.8   4.5   5.4   1.5
932   92    92    92    92    92    92    92    92
933 1.00   .18
934  .18  1.00
935 -.22  -.17  1.00
936  .36   .31  -.14  1.00
937  .27   .16  -.12   .22  1.00
938  .33   .15  -.17   .24   .21  1.00
939  .50   .29  -.20   .32   .12   .38  1.00
940  .17   .29  -.05   .20   .27   .20   .04  1.00
941 END DATA.
942 FORMATS var01 TO var08(F5.2).
943 LIST.
944 ])
945 AT_CHECK([pspp matrix-data.sps -O format=csv], [1], [dnl
946 matrix-data.sps:8.8-8.10: error: Extraneous data expecting end of line.
947
948 Table: Data List
949 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
950 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
951 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
952 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
953 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
954 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
955 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
956 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
957 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
958 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
959 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
960 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
961 ])
962 AT_CLEANUP
963
964 dnl Keep this test in sync with Example 7 in doc/matrices.texi.
965 AT_SETUP([MATRIX DATA - Split variables with explicit values without ROWTYPE_])
966 AT_DATA([matrix-data.sps], [dnl
967 MATRIX DATA
968     VARIABLES=s1 var01 TO var04
969     /SPLIT=s1
970     /FORMAT=FULL
971     /CONTENTS=MEAN SD N CORR.
972 BEGIN DATA.
973 0 34 35 36 37
974 0 22 11 55 66
975 0 99 98 99 92
976 0  1 .9 .8 .7
977 0 .9  1 .6 .5
978 0 .8 .6  1 .4
979 0 .7 .5 .4  1
980 1 44 45 34 39
981 1 23 15 51 46
982 1 98 34 87 23
983 1  1 .2 .3 .4
984 1 .2  1 .5 .6
985 1 .3 .5  1 .7
986 1 .4 .6 .7  1
987 END DATA.
988 FORMATS var01 TO var04(F5.2).
989 LIST.
990 ])
991 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
992 Table: Split Values
993 Variable,Value
994 s1,0
995
996 Table: Data List
997 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
998 0,MEAN,,34.00,35.00,36.00,37.00
999 0,STDDEV,,22.00,11.00,55.00,66.00
1000 0,N,,99.00,98.00,99.00,92.00
1001 0,CORR,var01,1.00,.90,.80,.70
1002 0,CORR,var02,.90,1.00,.60,.50
1003 0,CORR,var03,.80,.60,1.00,.40
1004 0,CORR,var04,.70,.50,.40,1.00
1005
1006 Table: Split Values
1007 Variable,Value
1008 s1,1
1009
1010 Table: Data List
1011 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
1012 1,MEAN,,44.00,45.00,34.00,39.00
1013 1,STDDEV,,23.00,15.00,51.00,46.00
1014 1,N,,98.00,34.00,87.00,23.00
1015 1,CORR,var01,1.00,.20,.30,.40
1016 1,CORR,var02,.20,1.00,.50,.60
1017 1,CORR,var03,.30,.50,1.00,.70
1018 1,CORR,var04,.40,.60,.70,1.00
1019 ])
1020 AT_CLEANUP
1021
1022 dnl Keep this test in sync with Example 8 in doc/matrices.texi.
1023 AT_SETUP([MATRIX DATA - Split variable with sequential values without ROWTYPE_])
1024 AT_DATA([matrix-data.sps], [dnl
1025 MATRIX DATA
1026     VARIABLES=var01 TO var04
1027     /SPLIT=s1
1028     /FORMAT=FULL
1029     /CONTENTS=MEAN SD N CORR.
1030 BEGIN DATA.
1031 34 35 36 37
1032 22 11 55 66
1033 99 98 99 92
1034  1 .9 .8 .7
1035 .9  1 .6 .5
1036 .8 .6  1 .4
1037 .7 .5 .4  1
1038 44 45 34 39
1039 23 15 51 46
1040 98 34 87 23
1041  1 .2 .3 .4
1042 .2  1 .5 .6
1043 .3 .5  1 .7
1044 .4 .6 .7  1
1045 END DATA.
1046 FORMATS var01 TO var04(F5.2).
1047 LIST.
1048 ])
1049 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
1050 Table: Split Values
1051 Variable,Value
1052 s1,1
1053
1054 Table: Data List
1055 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
1056 1,MEAN,,34.00,35.00,36.00,37.00
1057 1,STDDEV,,22.00,11.00,55.00,66.00
1058 1,N,,99.00,98.00,99.00,92.00
1059 1,CORR,var01,1.00,.90,.80,.70
1060 1,CORR,var02,.90,1.00,.60,.50
1061 1,CORR,var03,.80,.60,1.00,.40
1062 1,CORR,var04,.70,.50,.40,1.00
1063
1064 Table: Split Values
1065 Variable,Value
1066 s1,2
1067
1068 Table: Data List
1069 s1,ROWTYPE_,VARNAME_,var01,var02,var03,var04
1070 2,MEAN,,44.00,45.00,34.00,39.00
1071 2,STDDEV,,23.00,15.00,51.00,46.00
1072 2,N,,98.00,34.00,87.00,23.00
1073 2,CORR,var01,1.00,.20,.30,.40
1074 2,CORR,var02,.20,1.00,.50,.60
1075 2,CORR,var03,.30,.50,1.00,.70
1076 2,CORR,var04,.40,.60,.70,1.00
1077 ])
1078 AT_CLEANUP
1079
1080 dnl Keep this test in sync with Example 9 in doc/matrices.texi.
1081 AT_SETUP([MATRIX DATA - Factor variables grouping within-cell records by factor without ROWTYPE_])
1082 AT_DATA([matrix-data.sps], [dnl
1083 MATRIX DATA
1084     VARIABLES=f1 var01 TO var04
1085     /FACTOR=f1
1086     /CELLS=2
1087     /CONTENTS=(MEAN SD N) CORR.
1088 BEGIN DATA.
1089 0 34 35 36 37
1090 0 22 11 55 66
1091 0 99 98 99 92
1092 1 44 45 34 39
1093 1 23 15 51 46
1094 1 98 34 87 23
1095    1
1096   .9  1
1097   .8 .6  1
1098   .7 .5 .4  1
1099 END DATA.
1100 FORMATS var01 TO var04(F5.1).
1101 LIST.
1102 ])
1103 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
1104 Table: Data List
1105 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
1106 MEAN,0,,34.0,35.0,36.0,37.0
1107 STDDEV,0,,22.0,11.0,55.0,66.0
1108 N,0,,99.0,98.0,99.0,92.0
1109 MEAN,1,,44.0,45.0,34.0,39.0
1110 STDDEV,1,,23.0,15.0,51.0,46.0
1111 N,1,,98.0,34.0,87.0,23.0
1112 CORR,.,var01,1.0,.9,.8,.7
1113 CORR,.,var02,.9,1.0,.6,.5
1114 CORR,.,var03,.8,.6,1.0,.4
1115 CORR,.,var04,.7,.5,.4,1.0
1116 ])
1117 AT_CLEANUP
1118
1119 dnl Keep this test in sync with Example 10 in doc/matrices.texi.
1120 AT_SETUP([MATRIX DATA - Factor variables grouping within-cell records by row type without ROWTYPE_])
1121 AT_DATA([matrix-data.sps], [dnl
1122 MATRIX DATA
1123     VARIABLES=f1 var01 TO var04
1124     /FACTOR=f1
1125     /CELLS=2
1126     /CONTENTS=(MEAN) (SD) (N) CORR.
1127 BEGIN DATA.
1128 0 34 35 36 37
1129 1 44 45 34 39
1130 0 22 11 55 66
1131 1 23 15 51 46
1132 0 99 98 99 92
1133 1 98 34 87 23
1134    1
1135   .9  1
1136   .8 .6  1
1137   .7 .5 .4  1
1138 END DATA.
1139 FORMATS var01 TO var04(F5.1).
1140 LIST.
1141 ])
1142 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
1143 Table: Data List
1144 ROWTYPE_,f1,VARNAME_,var01,var02,var03,var04
1145 MEAN,0,,34.0,35.0,36.0,37.0
1146 MEAN,1,,44.0,45.0,34.0,39.0
1147 STDDEV,0,,22.0,11.0,55.0,66.0
1148 STDDEV,1,,23.0,15.0,51.0,46.0
1149 N,0,,99.0,98.0,99.0,92.0
1150 N,1,,98.0,34.0,87.0,23.0
1151 CORR,.,var01,1.0,.9,.8,.7
1152 CORR,.,var02,.9,1.0,.6,.5
1153 CORR,.,var03,.8,.6,1.0,.4
1154 CORR,.,var04,.7,.5,.4,1.0
1155 ])
1156 AT_CLEANUP
1157
1158 AT_SETUP([MATRIX DATA - syntax errors])
1159 AT_DATA([matrix-data.sps], [dnl
1160 MATRIX DATA VARIABLES=var01 varname_.
1161 MATRIX DATA VARIABLES=v v v.
1162 MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/SPLIT=rowtype_.
1163 MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/FACTORS=rowtype_.
1164 MATRIX DATA VARIABLES=rowtype_ s1 v1 v2 v3/SPLIT=v1/FACTORS=v1.
1165
1166 MATRIX DATA VARIABLES=v1 v2 v3/FORMAT=FULL NODIAGONAL.
1167 MATRIX DATA VARIABLES=v1 v2 v3/FACTORS=v1.
1168 MATRIX DATA VARIABLES=v1 v2 v3.
1169 BEGIN DATA.
1170 END DATA.
1171 MATRIX DATA VARIABLES=v1/FACTORS=v1.
1172 MATRIX DATA VARIABLES=v1 v2 v3 ROWTYPE_.
1173 MATRIX DATA VARIABLES=v1 v2 v3/CONTENTS=N/N=5.
1174 MATRIX DATA VARIABLES=v1/CONTENTS=XYZZY.
1175 MATRIX DATA VARIABLES=v1/CONTENTS=(.
1176 MATRIX DATA VARIABLES=v1/CONTENTS=(CORR.
1177 MATRIX DATA VARIABLES=v1/CONTENTS=).
1178 MATRIX DATA.
1179 MATRIX DATA VARIABLES=v*.
1180 MATRIX DATA VARIABLES=v/N=-1.
1181 MATRIX DATA VARIABLES=v/FORMAT=XYZZY.
1182 MATRIX DATA VARIABLES=v/FILE=123.
1183 MATRIX DATA VARIABLES=v/SPLIT=123.
1184 MATRIX DATA VARIABLES=v/CELLS=-1.
1185 MATRIX DATA VARIABLES=v/XYZZY.
1186 ])
1187 AT_CHECK([pspp matrix-data.sps -O format=csv], [1], [dnl
1188 matrix-data.sps:1: error: MATRIX DATA: VARIABLES may not include VARNAME_.
1189
1190 "matrix-data.sps:2.25: error: MATRIX DATA: Variable v appears twice in variable list.
1191     2 | MATRIX DATA VARIABLES=v v v.
1192       |                         ^"
1193
1194 "matrix-data.sps:3.47-3.54: error: MATRIX DATA: ROWTYPE_ is not allowed on SPLIT or FACTORS.
1195     3 | MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/SPLIT=rowtype_.
1196       |                                               ^~~~~~~~"
1197
1198 "matrix-data.sps:4.49-4.56: error: MATRIX DATA: ROWTYPE_ is not allowed on SPLIT or FACTORS.
1199     4 | MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/FACTORS=rowtype_.
1200       |                                                 ^~~~~~~~"
1201
1202 matrix-data.sps:5: error: MATRIX DATA: v1 may not appear on both SPLIT and FACTORS.
1203
1204 matrix-data.sps:7: error: MATRIX DATA: FORMAT=FULL and FORMAT=NODIAGONAL are mutually exclusive.
1205
1206 matrix-data.sps:8: error: MATRIX DATA: CELLS is required when factor variables are specified and VARIABLES does not include ROWTYPE_.
1207
1208 matrix-data.sps:9: warning: MATRIX DATA: CONTENTS was not specified and VARIABLES does not include ROWTYPE_.  Assuming CONTENTS=CORR.
1209
1210 matrix-data.sps:12: error: MATRIX DATA: CELLS is required when factor variables are specified and VARIABLES does not include ROWTYPE_.
1211
1212 matrix-data.sps:13: error: MATRIX DATA: VARIABLES includes ROWTYPE_ but the continuous variables are not the last ones on VARIABLES.
1213
1214 matrix-data.sps:14: error: MATRIX DATA: Cannot specify N on CONTENTS along with the N subcommand.
1215
1216 "matrix-data.sps:15.35-15.39: error: MATRIX DATA: Syntax error expecting one of the following: CORR, COV, MAT, N_MATRIX, PROX, COUNT, DFE, MEAN, MSE, STDDEV, N, N_SCALAR, N_VECTOR, SD.
1217    15 | MATRIX DATA VARIABLES=v1/CONTENTS=XYZZY.
1218       |                                   ^~~~~"
1219
1220 "matrix-data.sps:16.36: error: MATRIX DATA: Syntax error expecting one of the following: CORR, COV, MAT, N_MATRIX, PROX, COUNT, DFE, MEAN, MSE, STDDEV, N, N_SCALAR, N_VECTOR, SD.
1221    16 | MATRIX DATA VARIABLES=v1/CONTENTS=@{:@.
1222       |                                    ^"
1223
1224 "matrix-data.sps:17.40: error: MATRIX DATA: Syntax error expecting one of the following: CORR, COV, MAT, N_MATRIX, PROX, COUNT, DFE, MEAN, MSE, STDDEV, N, N_SCALAR, N_VECTOR, SD.
1225    17 | MATRIX DATA VARIABLES=v1/CONTENTS=@{:@CORR.
1226       |                                        ^"
1227
1228 "matrix-data.sps:18.35: error: MATRIX DATA: Syntax error expecting one of the following: CORR, COV, MAT, N_MATRIX, PROX, COUNT, DFE, MEAN, MSE, STDDEV, N, N_SCALAR, N_VECTOR, SD.
1229    18 | MATRIX DATA VARIABLES=v1/CONTENTS=@:}@.
1230       |                                   ^"
1231
1232 "matrix-data.sps:19.12: error: MATRIX DATA: Syntax error expecting VARIABLES.
1233    19 | MATRIX DATA.
1234       |            ^"
1235
1236 "matrix-data.sps:20.24: error: MATRIX DATA: Syntax error expecting `/'.
1237    20 | MATRIX DATA VARIABLES=v*.
1238       |                        ^"
1239
1240 "matrix-data.sps:21.27-21.28: error: MATRIX DATA: Syntax error expecting non-negative integer for N.
1241    21 | MATRIX DATA VARIABLES=v/N=-1.
1242       |                           ^~"
1243
1244 "matrix-data.sps:22.32-22.36: error: MATRIX DATA: Syntax error.
1245    22 | MATRIX DATA VARIABLES=v/FORMAT=XYZZY.
1246       |                                ^~~~~"
1247
1248 "matrix-data.sps:23.30-23.32: error: MATRIX DATA: Syntax error expecting a file name or handle name.
1249    23 | MATRIX DATA VARIABLES=v/FILE=123.
1250       |                              ^~~"
1251
1252 "matrix-data.sps:24.31-24.33: error: MATRIX DATA: Syntax error expecting variable name.
1253    24 | MATRIX DATA VARIABLES=v/SPLIT=123.
1254       |                               ^~~"
1255
1256 "matrix-data.sps:25.31-25.32: error: MATRIX DATA: Syntax error expecting non-negative integer for CELLS.
1257    25 | MATRIX DATA VARIABLES=v/CELLS=-1.
1258       |                               ^~"
1259
1260 "matrix-data.sps:26.25-26.29: error: MATRIX DATA: Syntax error.
1261    26 | MATRIX DATA VARIABLES=v/XYZZY.
1262       |                         ^~~~~"
1263 ])
1264 AT_CLEANUP
1265
1266 dnl I don't know what lunatic thought this was OK, but we strive to be
1267 dnl compatible.
1268 AT_SETUP([MATRIX DATA - plus and minus as delimiters])
1269 AT_DATA([matrix-data.sps], [dnl
1270 MATRIX DATA
1271     VARIABLES=ROWTYPE_ var01 TO var08.
1272 BEGIN DATA.
1273 MEAN+24.3+5.4+69.7+20.1+13.4+2.7+27.9+3.7
1274 SD +5.7+1.5+23.5+5.8+2.8+4.5+5.4+1.5
1275 N+92+92+92+92+92+92+92+92
1276 CORR+1.00
1277 CORR+.18+1.00
1278 CORR-.22e+0-.17+1.00
1279 CORR+.36d-0+.31-.14+1.00
1280 CORR+.27+.16-.12+.22+1.00
1281 CORR+.33+.15-.17+.24+.21+1.00
1282 CORR+.50+.29-.20+.32+.12+.38+1.00
1283 CORR+.17+.29-.05+.20+.27+.20+.04+1.00
1284 END DATA.
1285 FORMATS var01 TO var08(F5.2).
1286 LIST.
1287 ])
1288
1289 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
1290 Table: Data List
1291 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
1292 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
1293 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
1294 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
1295 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
1296 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
1297 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
1298 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
1299 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
1300 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
1301 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
1302 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00
1303 ])
1304 AT_CLEANUP