1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017, 2020 Free Software Foundation, Inc.
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.
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.
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/>.
17 AT_BANNER([MATRIX DATA])
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
23 VARIABLES=ROWTYPE_ var01 TO var08
24 /FILE='matrix-data.txt'.
25 FORMATS var01 TO var08(F5.2).
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
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
42 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
59 AT_SETUP([MATRIX DATA - UPPER DIAGONAL with ROWTYPE_])
60 AT_DATA([matrix-data.sps], [dnl
62 variables = rowtype_ var01 var02 var03 var04
63 /format = upper diagonal.
78 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
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
95 variables = ROWTYPE_ var01 var02 var03 var04
96 /format = full diagonal.
111 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
125 AT_SETUP([MATRIX DATA - UPPER NODIAGONAL with ROWTYPE_])
126 AT_DATA([matrix-data.sps], [dnl
128 variables = rowtype_ var01 var02 var03 var04
129 /format = upper nodiagonal.
143 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
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
160 VARIABLES=ROWTYPE_ var01 TO var08
161 /FORMAT=UPPER NODIAGONAL.
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
174 FORMATS var01 TO var08(F6.2).
177 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
194 AT_SETUP([MATRIX DATA - LOWER NODIAGONAL with ROWTYPE_])
195 AT_DATA([matrix-data.sps], [dnl
197 variables = rowtype_ var01 var02 var03 var04
198 /format = lower nodiagonal
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_.
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
230 AT_SETUP([MATRIX DATA - split data])
231 AT_DATA([matrix-data.sps], [dnl
233 variables = s1 s2 rowtype_ var01 var02 var03
237 8 0 mean 21.4 5.0 72.9
243 8 1 mean 11.4 1.0 52.9
256 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
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
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
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
302 VARIABLES=s1 ROWTYPE_ var01 TO var04
321 FORMATS var01 TO var04(F5.1).
325 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
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
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
360 VARIABLES=ROWTYPE_ f1 var01 TO var04
374 FORMATS var01 TO var04(F5.1).
378 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
394 AT_SETUP([MATRIX DATA - factors and splits])
395 AT_DATA([matrix-data.sps], [dnl
397 variables = s f rowtype_ var01 var02 var03
402 8 0 mean 21.4 5.0 72.9
408 9 1 mean 11.4 1.0 52.9
420 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
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
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
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
459 AT_SETUP([MATRIX DATA - bad ROWTYPE_])
460 AT_DATA([matrix-data.sps], [dnl
462 variables = rowtype_ var01 var02 var03 var04
463 /format = upper diagonal.
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""."
480 AT_SETUP([MATRIX DATA - unexpected ROWTYPE_])
481 AT_DATA([matrix-data.sps], [dnl
483 variables = rowtype_ f1 var01 var02 var03 var04
486 /format = upper diagonal.
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.
508 matrix-data.sps:14: warning: Data contains with-factors row type CORR not included in CONTENTS.
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
525 AT_SETUP([MATRIX DATA - bad number])
526 AT_DATA([matrix-data.sps], [dnl
528 variables = rowtype_ var01 var02 var03 var04
529 /format = upper diagonal.
541 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [dnl
542 matrix-data.sps:7.15: error: Field contents are not numeric.
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
553 AT_SETUP([MATRIX DATA - long variable names])
554 AT_DATA([matrix-data.sps], [dnl
556 variables = rowtype_ var01 var_two variable_number_three variableFour
557 /format = upper diagonal.
562 n_vector 100 101 102 103
572 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
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
592 variables = rowtype_ var01 to var9
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
609 FORMATS var01 to var09(F3.0).
611 factor /matrix = in (corr = *)
612 /analysis var02 var04 var06
613 /method = correlation
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
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
647 Table: Correlation Matrix
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
653 Table: Component Matrix
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
668 var01 var02 var03 var04
669 / format = upper diagonal .
671 mean 21.4 5.0 72.9 17.4
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
684 FORMATS var01 TO var04 (F6.2).
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.
691 matrix-data.sps:11.24-11.31: error: Extraneous data expecting end of line.
693 matrix-data.sps:12.19-12.32: error: Extraneous data expecting end of line.
695 matrix-data.sps:18: error: Matrix CORR had 9 rows but 4 rows were expected.
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
709 AT_SETUP([MATRIX DATA - too few rows])
710 AT_DATA([matrix-data.sps], [dnl
712 variables = rowtype_ s1 var01 var02 var03 var04
714 /format = upper diagonal
715 /file='matrix-data.txt'.
716 FORMATS var01 TO var04 (F6.2).
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
723 corr 1 1.00 .32 .48 .28
724 corr 2 1.00 .32 .48 .28
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.
731 matrix-data.txt:6: error: Matrix CORR had 2 rows but 4 rows were expected.
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
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
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.
769 corr v3 111 222 333 444
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).
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
790 AT_SETUP([MATRIX DATA - N subcommand])
791 AT_DATA([matrix-data.sps], [dnl
793 variables = rowtype_ var01 var02 var03 var04
795 /format = upper nodiagonal.
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.
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
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
827 VARIABLES=ROWTYPE_ var01 TO var08
828 /FORMAT=UPPER NODIAGONAL
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
841 FORMATS var01 TO var08(F6.2).
845 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
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
862 dnl A "no-crash" test. This was observed to cause problems.
864 AT_SETUP([MATRIX DATA - crash])
866 AT_DATA([matrix-data.sps], [dnl
877 variables = roxtype_ var01
878 /format = upper nodiagonal.
882 AT_CHECK([pspp -O format=csv matrix-data.sps], [1], [ignore])
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
889 VARIABLES=var01 TO var08
890 /CONTENTS=MEAN SD N CORR.
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
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
904 FORMATS var01 TO var08(F5.2).
907 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
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
924 AT_SETUP([MATRIX DATA - extraneous data without ROWTYPE_])
925 AT_DATA([matrix-data.sps], [dnl
927 VARIABLES=var01 TO var08
928 /CONTENTS=MEAN SD N CORR.
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
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
942 FORMATS var01 TO var08(F5.2).
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.
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
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
968 VARIABLES=s1 var01 TO var04
971 /CONTENTS=MEAN SD N CORR.
988 FORMATS var01 TO var04(F5.2).
991 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
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
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
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
1026 VARIABLES=var01 TO var04
1029 /CONTENTS=MEAN SD N CORR.
1046 FORMATS var01 TO var04(F5.2).
1049 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
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
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
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
1084 VARIABLES=f1 var01 TO var04
1087 /CONTENTS=(MEAN SD N) CORR.
1100 FORMATS var01 TO var04(F5.1).
1103 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
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
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
1123 VARIABLES=f1 var01 TO var04
1126 /CONTENTS=(MEAN) (SD) (N) CORR.
1139 FORMATS var01 TO var04(F5.1).
1142 AT_CHECK([pspp matrix-data.sps -O format=csv], [0], [dnl
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
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.
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.
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=).
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.
1187 AT_CHECK([pspp matrix-data.sps -O format=csv], [1], [dnl
1188 "matrix-data.sps:1.23-1.36: error: MATRIX DATA: VARIABLES may not include VARNAME_.
1189 1 | MATRIX DATA VARIABLES=var01 varname_.
1192 "matrix-data.sps:2.25: error: MATRIX DATA: Variable v appears twice in variable list.
1193 2 | MATRIX DATA VARIABLES=v v v.
1196 "matrix-data.sps:3.47-3.54: error: MATRIX DATA: ROWTYPE_ is not allowed on SPLIT or FACTORS.
1197 3 | MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/SPLIT=rowtype_.
1200 "matrix-data.sps:4.49-4.56: error: MATRIX DATA: ROWTYPE_ is not allowed on SPLIT or FACTORS.
1201 4 | MATRIX DATA VARIABLES=rowtype_ v1 v2 v3/FACTORS=rowtype_.
1204 "matrix-data.sps:5.61-5.62: error: MATRIX DATA: v1 may not appear on both SPLIT and FACTORS.
1205 5 | MATRIX DATA VARIABLES=rowtype_ s1 v1 v2 v3/SPLIT=v1/FACTORS=v1.
1208 "matrix-data.sps:7.32-7.53: error: MATRIX DATA: FORMAT=FULL and FORMAT=NODIAGONAL are mutually exclusive.
1209 7 | MATRIX DATA VARIABLES=v1 v2 v3/FORMAT=FULL NODIAGONAL.
1210 | ^~~~~~~~~~~~~~~~~~~~~~"
1212 matrix-data.sps:8: error: MATRIX DATA: CELLS is required when factor variables are specified and VARIABLES does not include ROWTYPE_.
1214 matrix-data.sps:9: warning: MATRIX DATA: CONTENTS was not specified and VARIABLES does not include ROWTYPE_. Assuming CONTENTS=CORR.
1216 matrix-data.sps:12: error: MATRIX DATA: CELLS is required when factor variables are specified and VARIABLES does not include ROWTYPE_.
1218 "matrix-data.sps:13.13-13.39: error: MATRIX DATA: VARIABLES includes ROWTYPE_ but the continuous variables are not the last ones on VARIABLES.
1219 13 | MATRIX DATA VARIABLES=v1 v2 v3 ROWTYPE_.
1220 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~"
1222 "matrix-data.sps:14.43-14.45: error: MATRIX DATA: Cannot specify N on CONTENTS along with the N subcommand.
1223 14 | MATRIX DATA VARIABLES=v1 v2 v3/CONTENTS=N/N=5.
1226 "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.
1227 15 | MATRIX DATA VARIABLES=v1/CONTENTS=XYZZY.
1230 "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.
1231 16 | MATRIX DATA VARIABLES=v1/CONTENTS=@{:@.
1234 "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.
1235 17 | MATRIX DATA VARIABLES=v1/CONTENTS=@{:@CORR.
1238 "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.
1239 18 | MATRIX DATA VARIABLES=v1/CONTENTS=@:}@.
1242 "matrix-data.sps:19.12: error: MATRIX DATA: Syntax error expecting VARIABLES.
1246 "matrix-data.sps:20.24: error: MATRIX DATA: Syntax error expecting `/'.
1247 20 | MATRIX DATA VARIABLES=v*.
1250 "matrix-data.sps:21.27-21.28: error: MATRIX DATA: Syntax error expecting non-negative integer for N.
1251 21 | MATRIX DATA VARIABLES=v/N=-1.
1254 "matrix-data.sps:22.32-22.36: error: MATRIX DATA: Syntax error expecting LIST, FREE, UPPER, LOWER, FULL, DIAGONAL, or NODIAGONAL.
1255 22 | MATRIX DATA VARIABLES=v/FORMAT=XYZZY.
1258 "matrix-data.sps:23.30-23.32: error: MATRIX DATA: Syntax error expecting a file name or handle name.
1259 23 | MATRIX DATA VARIABLES=v/FILE=123.
1262 "matrix-data.sps:24.31-24.33: error: MATRIX DATA: Syntax error expecting variable name.
1263 24 | MATRIX DATA VARIABLES=v/SPLIT=123.
1266 "matrix-data.sps:25.31-25.32: error: MATRIX DATA: Syntax error expecting non-negative integer for CELLS.
1267 25 | MATRIX DATA VARIABLES=v/CELLS=-1.
1270 "matrix-data.sps:26.25-26.29: error: MATRIX DATA: Syntax error expecting N, FORMAT, FILE, SPLIT, FACTORS, CELLS, or CONTENTS.
1271 26 | MATRIX DATA VARIABLES=v/XYZZY.
1276 dnl I don't know what lunatic thought this was OK, but we strive to be
1278 AT_SETUP([MATRIX DATA - plus and minus as delimiters])
1279 AT_DATA([matrix-data.sps], [dnl
1281 VARIABLES=ROWTYPE_ var01 TO var08.
1283 MEAN+24.3+5.4+69.7+20.1+13.4+2.7+27.9+3.7
1284 SD +5.7+1.5+23.5+5.8+2.8+4.5+5.4+1.5
1285 N+92+92+92+92+92+92+92+92
1288 CORR-.22e+0-.17+1.00
1289 CORR+.36d-0+.31-.14+1.00
1290 CORR+.27+.16-.12+.22+1.00
1291 CORR+.33+.15-.17+.24+.21+1.00
1292 CORR+.50+.29-.20+.32+.12+.38+1.00
1293 CORR+.17+.29-.05+.20+.27+.20+.04+1.00
1295 FORMATS var01 TO var08(F5.2).
1299 AT_CHECK([pspp -O format=csv matrix-data.sps], [0], [dnl
1301 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
1302 MEAN,,24.30,5.40,69.70,20.10,13.40,2.70,27.90,3.70
1303 STDDEV,,5.70,1.50,23.50,5.80,2.80,4.50,5.40,1.50
1304 N,,92.00,92.00,92.00,92.00,92.00,92.00,92.00,92.00
1305 CORR,var01,1.00,.18,-.22,.36,.27,.33,.50,.17
1306 CORR,var02,.18,1.00,-.17,.31,.16,.15,.29,.29
1307 CORR,var03,-.22,-.17,1.00,-.14,-.12,-.17,-.20,-.05
1308 CORR,var04,.36,.31,-.14,1.00,.22,.24,.32,.20
1309 CORR,var05,.27,.16,-.12,.22,1.00,.21,.12,.27
1310 CORR,var06,.33,.15,-.17,.24,.21,1.00,.38,.20
1311 CORR,var07,.50,.29,-.20,.32,.12,.38,1.00,.04
1312 CORR,var08,.17,.29,-.05,.20,.27,.20,.04,1.00