3 AT_SETUP([MATRIX - empty matrices])
4 AT_DATA([matrix.sps], [dnl
8 COMPUTE b={a; 1; 2; 3}.
10 COMPUTE c={a, 1, 2, 3}.
12 /* Multiplication of empty matrices previously assert-failed in blas.
17 AT_CHECK([pspp matrix.sps], [0], [dnl
32 AT_SETUP([MATRIX - submatrices as rvalues - all columns or all rows])
33 AT_DATA([matrix.sps], [dnl
35 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1, :).
36 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1}, :).
37 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2}, :).
38 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2, 3}, :).
39 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1; 3; 2}, :).
40 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 3, 3}, :).
41 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:2, :).
42 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:3, :).
43 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({}, :).
45 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1).
46 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1}).
47 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2}).
48 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2, 3}).
49 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1; 3; 2}).
50 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 3, 3}).
51 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:2).
52 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:3).
53 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {}).
55 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, :).
57 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(0, :).
58 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 0).
59 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(4, :).
60 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 4).
66 PRINT {1, 2, 3, 4}({1, 2; 3, 4}, :).
67 PRINT {1, 2, 3, 4}(:, {1, 2; 3, 4}).
70 AT_CHECK([pspp matrix.sps], [1], [dnl
71 {1, 2, 3; 4, 5, 6; 7, 8, 9}(1, :)
74 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1}, :)
77 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2}, :)
81 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2, 3}, :)
86 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1; 3; 2}, :)
91 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 3, 3}, :)
96 {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:2, :)
100 {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:3, :)
105 {1, 2, 3; 4, 5, 6; 7, 8, 9}({}, :)
107 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1)
112 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1})
117 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2})
122 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2, 3})
127 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1; 3; 2})
132 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 3, 3})
137 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:2)
142 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:3)
147 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {})
151 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, :)
156 matrix.sps:24.35: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
157 24 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(0, :).
160 matrix.sps:25.38: error: MATRIX: 0 is not a valid column index for a 3×3
162 25 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 0).
165 matrix.sps:26.35: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
166 26 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(4, :).
169 matrix.sps:27.38: error: MATRIX: 4 is not a valid column index for a 3×3
171 27 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 4).
180 matrix.sps:33.20-33.31: error: MATRIX: Matrix row index must be scalar or
181 vector, not a 2×2 matrix.
182 33 | PRINT {1, 2, 3, 4}({1, 2; 3, 4}, :).
185 matrix.sps:34.23-34.34: error: MATRIX: Matrix column index must be scalar or
186 vector, not a 2×2 matrix.
187 34 | PRINT {1, 2, 3, 4}(:, {1, 2; 3, 4}).
192 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues])
193 AT_DATA([matrix.sps], [dnl
195 COMPUTE y={1, 2, 3; 4, 5, 6; 7, 8, 9}.
198 COMPUTE x1(1, :) = {11, 12, 13}.
202 COMPUTE x2(2, :) = {14, 15, 16}.
206 COMPUTE x3(3, :) = {17, 18, 19}.
210 COMPUTE x4(:, 1) = {11; 14; 17}.
214 COMPUTE x5(:, 2) = {12; 15; 18}.
218 COMPUTE x6(:, 3) = {13; 16; 19}.
222 COMPUTE x7(1, 1) = 11.
226 COMPUTE x8(1:2, 2:3) = {12, 13; 15, 16}.
230 COMPUTE x9({3, 1}, {2; 3}) = {18, 19; 12, 13}.
234 AT_CHECK([pspp matrix.sps], [0], [dnl
282 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues - negative])
283 AT_DATA([matrix.sps], [dnl
285 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
286 COMPUTE x(1, :) = {}.
287 COMPUTE x(1, :) = 15.
288 COMPUTE x(1, :) = {11, 12}.
289 COMPUTE x(1, :) = {11, 12, 13, 14}.
290 COMPUTE x(:, 1) = {}.
291 COMPUTE x(:, 1) = 15.
292 COMPUTE x(:, 1) = {11, 12}.
293 COMPUTE x(:, 1) = {11, 12, 13, 14}.
297 COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
300 COMPUTE x({1, 2; 3, 4}, 5) = 1.
301 COMPUTE x(3, {1, 2; 3, 4}) = 1.
305 AT_CHECK([pspp matrix.sps], [1], [dnl
306 matrix.sps:3.9-3.15: error: MATRIX: Numbers of indexes for assigning to x
307 differ from the size of the source matrix.
308 3 | COMPUTE x(1, :) = {}.
311 matrix.sps:3.11: note: MATRIX: There is 1 row index.
312 3 | COMPUTE x(1, :) = {}.
315 matrix.sps:3.14: note: MATRIX: Destination matrix x has 3 columns.
316 3 | COMPUTE x(1, :) = {}.
319 matrix.sps:3.19-3.20: note: MATRIX: The source matrix is 0×0.
320 3 | COMPUTE x(1, :) = {}.
323 matrix.sps:4.9-4.15: error: MATRIX: Number of column indexes for assigning to x
324 differs from number of columns in source matrix.
325 4 | COMPUTE x(1, :) = 15.
328 matrix.sps:4.14: note: MATRIX: Destination matrix x has 3 columns.
329 4 | COMPUTE x(1, :) = 15.
332 matrix.sps:4.19-4.20: note: MATRIX: The source matrix is 1×1.
333 4 | COMPUTE x(1, :) = 15.
336 matrix.sps:5.9-5.15: error: MATRIX: Number of column indexes for assigning to x
337 differs from number of columns in source matrix.
338 5 | COMPUTE x(1, :) = {11, 12}.
341 matrix.sps:5.14: note: MATRIX: Destination matrix x has 3 columns.
342 5 | COMPUTE x(1, :) = {11, 12}.
345 matrix.sps:5.19-5.26: note: MATRIX: The source matrix is 1×2.
346 5 | COMPUTE x(1, :) = {11, 12}.
349 matrix.sps:6.9-6.15: error: MATRIX: Number of column indexes for assigning to x
350 differs from number of columns in source matrix.
351 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
354 matrix.sps:6.14: note: MATRIX: Destination matrix x has 3 columns.
355 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
358 matrix.sps:6.19-6.34: note: MATRIX: The source matrix is 1×4.
359 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
362 matrix.sps:7.9-7.15: error: MATRIX: Numbers of indexes for assigning to x
363 differ from the size of the source matrix.
364 7 | COMPUTE x(:, 1) = {}.
367 matrix.sps:7.11: note: MATRIX: Destination matrix x has 3 rows.
368 7 | COMPUTE x(:, 1) = {}.
371 matrix.sps:7.14: note: MATRIX: There is 1 column index.
372 7 | COMPUTE x(:, 1) = {}.
375 matrix.sps:7.19-7.20: note: MATRIX: The source matrix is 0×0.
376 7 | COMPUTE x(:, 1) = {}.
379 matrix.sps:8.9-8.15: error: MATRIX: Number of row indexes for assigning to x
380 differs from number of rows in source matrix.
381 8 | COMPUTE x(:, 1) = 15.
384 matrix.sps:8.11: note: MATRIX: Destination matrix x has 3 rows.
385 8 | COMPUTE x(:, 1) = 15.
388 matrix.sps:8.19-8.20: note: MATRIX: The source matrix is 1×1.
389 8 | COMPUTE x(:, 1) = 15.
392 matrix.sps:9.9-9.15: error: MATRIX: Numbers of indexes for assigning to x
393 differ from the size of the source matrix.
394 9 | COMPUTE x(:, 1) = {11, 12}.
397 matrix.sps:9.11: note: MATRIX: Destination matrix x has 3 rows.
398 9 | COMPUTE x(:, 1) = {11, 12}.
401 matrix.sps:9.14: note: MATRIX: There is 1 column index.
402 9 | COMPUTE x(:, 1) = {11, 12}.
405 matrix.sps:9.19-9.26: note: MATRIX: The source matrix is 1×2.
406 9 | COMPUTE x(:, 1) = {11, 12}.
409 matrix.sps:10.9-10.15: error: MATRIX: Numbers of indexes for assigning to x
410 differ from the size of the source matrix.
411 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
414 matrix.sps:10.11: note: MATRIX: Destination matrix x has 3 rows.
415 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
418 matrix.sps:10.14: note: MATRIX: There is 1 column index.
419 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
422 matrix.sps:10.19-10.34: note: MATRIX: The source matrix is 1×4.
423 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
426 matrix.sps:11.9-11.12: error: MATRIX: Can't use vector indexing on 3×3 matrix
428 11 | COMPUTE x(:) = 1.
431 matrix.sps:12.11: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
432 12 | COMPUTE x(0, 1) = 1.
435 matrix.sps:13.14: error: MATRIX: 0 is not a valid column index for a 3×3
437 13 | COMPUTE x(1, 0) = 1.
440 matrix.sps:14.11-14.19: error: MATRIX: 0 is not a valid row index for a 3×3
442 14 | COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
445 matrix.sps:15.11: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
446 15 | COMPUTE x(4, 3) = 1.
449 matrix.sps:16.14: error: MATRIX: 4 is not a valid column index for a 3×3
451 16 | COMPUTE x(3, 4) = 1.
454 matrix.sps:17.11-17.22: error: MATRIX: Matrix row index must be scalar or
455 vector, not a 2×2 matrix.
456 17 | COMPUTE x({1, 2; 3, 4}, 5) = 1.
459 matrix.sps:18.14-18.25: error: MATRIX: Matrix column index must be scalar or
460 vector, not a 2×2 matrix.
461 18 | COMPUTE x(3, {1, 2; 3, 4}) = 1.
471 AT_SETUP([MATRIX - subvectors as rvalues])
472 AT_DATA([matrix.sps], [dnl
474 PRINT {10, 20, 30}({}).
475 PRINT {10, 20, 30}(2).
476 PRINT {10, 20, 30}({2}).
477 PRINT {10, 20, 30}({1,3}).
478 PRINT {10, 20, 30}({2,3}).
479 PRINT {10, 20, 30}({1;3}).
480 PRINT {10, 20, 30}({2;3}).
481 PRINT {10, 20, 30}(2:3).
482 PRINT {10, 20, 30}(:).
484 PRINT {10; 20; 30}({}).
485 PRINT {10; 20; 30}(2).
486 PRINT {10; 20; 30}({2}).
487 PRINT {10; 20; 30}({1,3}).
488 PRINT {10; 20; 30}({2,3}).
489 PRINT {10; 20; 30}({1;3}).
490 PRINT {10; 20; 30}({2;3}).
491 PRINT {10; 20; 30}(2:3).
492 PRINT {10; 20; 30}(:).
496 PRINT {1, 2; 3, 4}(:).
497 PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
498 PRINT {1, 2, 3, 4}(0).
499 PRINT {1, 2, 3, 4}(5).
502 AT_CHECK([pspp matrix.sps], [1], [dnl
564 matrix.sps:24.7-24.18: error: MATRIX: Vector index operator may not be applied
566 24 | PRINT {1, 2; 3, 4}(:).
569 matrix.sps:25.20-25.31: error: MATRIX: Vector index must be scalar or vector,
571 25 | PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
574 matrix.sps:26.20: error: MATRIX: Index 0 is out of range for vector with 4
576 26 | PRINT {1, 2, 3, 4}(0).
579 matrix.sps:27.20: error: MATRIX: Index 5 is out of range for vector with 4
581 27 | PRINT {1, 2, 3, 4}(5).
586 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues])
587 AT_DATA([matrix.sps], [dnl
589 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
592 COMPUTE r1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
596 COMPUTE r2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
604 COMPUTE r4(1:2) = {11:12}.
608 COMPUTE r5({8;9}) = {18:19}.
611 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
614 COMPUTE c1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
618 COMPUTE c2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
626 COMPUTE c4(1:2) = {11:12}.
630 COMPUTE c5(8:9) = {18:19}.
634 AT_CHECK([pspp matrix.sps], [0], [dnl
636 11 12 13 14 15 16 17 18 19
639 11 12 13 14 15 16 17 18 19
651 11 12 13 14 15 16 17 18 19
654 11 12 13 14 15 16 17 18 19
667 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues - negative])
668 AT_DATA([matrix.sps], [dnl
670 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
671 COMPUTE r(1:3) = {1, 2; 3, 4}.
673 COMPUTE r(1:3) = {1}.
674 COMPUTE r(1:3) = {1, 2}.
675 COMPUTE r(1:3) = {1, 2, 3, 4}.
677 COMPUTE r(1:3) = {1}.
678 COMPUTE r(1:3) = {1; 2}.
679 COMPUTE r(1:3) = {1; 2; 3; 4}.
680 COMPUTE r(:) = {1; 2; 3; 4}.
683 COMPUTE r({1, 2; 3, 4}) = 1.
685 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
686 COMPUTE c(1:3) = {1, 2; 3, 4}.
688 COMPUTE c(1:3) = {1}.
689 COMPUTE c(1:3) = {1, 2}.
690 COMPUTE c(1:3) = {1, 2, 3, 4}.
692 COMPUTE c(1:3) = {1}.
693 COMPUTE c(1:3) = {1; 2}.
694 COMPUTE c(1:3) = {1; 2; 3; 4}.
695 COMPUTE c(:) = {1; 2; 3; 4}.
698 COMPUTE c({1, 2; 3, 4}) = 1.
700 COMPUTE m = {1, 2; 3, 4}.
705 AT_CHECK([pspp matrix.sps], [1], [dnl
706 matrix.sps:3.9-3.14: error: MATRIX: Only an 3-element vector may be assigned to
707 this 3-element subvector of r.
708 3 | COMPUTE r(1:3) = {1, 2; 3, 4}.
711 matrix.sps:3.18-3.29: error: MATRIX: The source is an 2×2 matrix.
712 3 | COMPUTE r(1:3) = {1, 2; 3, 4}.
715 matrix.sps:4.9-4.14: error: MATRIX: Only an 3-element vector may be assigned to
716 this 3-element subvector of r.
717 4 | COMPUTE r(1:3) = {}.
720 matrix.sps:4.18-4.19: error: MATRIX: The source vector has 0 elements.
721 4 | COMPUTE r(1:3) = {}.
724 matrix.sps:5.9-5.14: error: MATRIX: Only an 3-element vector may be assigned to
725 this 3-element subvector of r.
726 5 | COMPUTE r(1:3) = {1}.
729 matrix.sps:5.19: error: MATRIX: The source vector has 1 element.
730 5 | COMPUTE r(1:3) = {1}.
733 matrix.sps:6.9-6.14: error: MATRIX: Only an 3-element vector may be assigned to
734 this 3-element subvector of r.
735 6 | COMPUTE r(1:3) = {1, 2}.
738 matrix.sps:6.18-6.23: error: MATRIX: The source vector has 2 elements.
739 6 | COMPUTE r(1:3) = {1, 2}.
742 matrix.sps:7.9-7.14: error: MATRIX: Only an 3-element vector may be assigned to
743 this 3-element subvector of r.
744 7 | COMPUTE r(1:3) = {1, 2, 3, 4}.
747 matrix.sps:7.18-7.29: error: MATRIX: The source vector has 4 elements.
748 7 | COMPUTE r(1:3) = {1, 2, 3, 4}.
751 matrix.sps:8.9-8.14: error: MATRIX: Only an 3-element vector may be assigned to
752 this 3-element subvector of r.
753 8 | COMPUTE r(1:3) = {}.
756 matrix.sps:8.18-8.19: error: MATRIX: The source vector has 0 elements.
757 8 | COMPUTE r(1:3) = {}.
760 matrix.sps:9.9-9.14: error: MATRIX: Only an 3-element vector may be assigned to
761 this 3-element subvector of r.
762 9 | COMPUTE r(1:3) = {1}.
765 matrix.sps:9.19: error: MATRIX: The source vector has 1 element.
766 9 | COMPUTE r(1:3) = {1}.
769 matrix.sps:10.9-10.14: error: MATRIX: Only an 3-element vector may be assigned
770 to this 3-element subvector of r.
771 10 | COMPUTE r(1:3) = {1; 2}.
774 matrix.sps:10.18-10.23: error: MATRIX: The source vector has 2 elements.
775 10 | COMPUTE r(1:3) = {1; 2}.
778 matrix.sps:11.9-11.14: error: MATRIX: Only an 3-element vector may be assigned
779 to this 3-element subvector of r.
780 11 | COMPUTE r(1:3) = {1; 2; 3; 4}.
783 matrix.sps:11.18-11.29: error: MATRIX: The source vector has 4 elements.
784 11 | COMPUTE r(1:3) = {1; 2; 3; 4}.
787 matrix.sps:12.9-12.12: error: MATRIX: Only an 9-element vector may be assigned
788 to this 9-element subvector of r.
789 12 | COMPUTE r(:) = {1; 2; 3; 4}.
792 matrix.sps:12.16-12.27: error: MATRIX: The source vector has 4 elements.
793 12 | COMPUTE r(:) = {1; 2; 3; 4}.
796 matrix.sps:13.11: error: MATRIX: Index 0 is out of range for vector with 9
798 13 | COMPUTE r(0) = 5.
801 matrix.sps:14.11-14.12: error: MATRIX: Index 10 is out of range for vector with
803 14 | COMPUTE r(10) = 5.
806 matrix.sps:15.11-15.22: error: MATRIX: Vector index must be scalar or vector,
808 15 | COMPUTE r({1, 2; 3, 4}) = 1.
811 matrix.sps:18.9-18.14: error: MATRIX: Only an 3-element vector may be assigned
812 to this 3-element subvector of c.
813 18 | COMPUTE c(1:3) = {1, 2; 3, 4}.
816 matrix.sps:18.18-18.29: error: MATRIX: The source is an 2×2 matrix.
817 18 | COMPUTE c(1:3) = {1, 2; 3, 4}.
820 matrix.sps:19.9-19.14: error: MATRIX: Only an 3-element vector may be assigned
821 to this 3-element subvector of c.
822 19 | COMPUTE c(1:3) = {}.
825 matrix.sps:19.18-19.19: error: MATRIX: The source vector has 0 elements.
826 19 | COMPUTE c(1:3) = {}.
829 matrix.sps:20.9-20.14: error: MATRIX: Only an 3-element vector may be assigned
830 to this 3-element subvector of c.
831 20 | COMPUTE c(1:3) = {1}.
834 matrix.sps:20.19: error: MATRIX: The source vector has 1 element.
835 20 | COMPUTE c(1:3) = {1}.
838 matrix.sps:21.9-21.14: error: MATRIX: Only an 3-element vector may be assigned
839 to this 3-element subvector of c.
840 21 | COMPUTE c(1:3) = {1, 2}.
843 matrix.sps:21.18-21.23: error: MATRIX: The source vector has 2 elements.
844 21 | COMPUTE c(1:3) = {1, 2}.
847 matrix.sps:22.9-22.14: error: MATRIX: Only an 3-element vector may be assigned
848 to this 3-element subvector of c.
849 22 | COMPUTE c(1:3) = {1, 2, 3, 4}.
852 matrix.sps:22.18-22.29: error: MATRIX: The source vector has 4 elements.
853 22 | COMPUTE c(1:3) = {1, 2, 3, 4}.
856 matrix.sps:23.9-23.14: error: MATRIX: Only an 3-element vector may be assigned
857 to this 3-element subvector of c.
858 23 | COMPUTE c(1:3) = {}.
861 matrix.sps:23.18-23.19: error: MATRIX: The source vector has 0 elements.
862 23 | COMPUTE c(1:3) = {}.
865 matrix.sps:24.9-24.14: error: MATRIX: Only an 3-element vector may be assigned
866 to this 3-element subvector of c.
867 24 | COMPUTE c(1:3) = {1}.
870 matrix.sps:24.19: error: MATRIX: The source vector has 1 element.
871 24 | COMPUTE c(1:3) = {1}.
874 matrix.sps:25.9-25.14: error: MATRIX: Only an 3-element vector may be assigned
875 to this 3-element subvector of c.
876 25 | COMPUTE c(1:3) = {1; 2}.
879 matrix.sps:25.18-25.23: error: MATRIX: The source vector has 2 elements.
880 25 | COMPUTE c(1:3) = {1; 2}.
883 matrix.sps:26.9-26.14: error: MATRIX: Only an 3-element vector may be assigned
884 to this 3-element subvector of c.
885 26 | COMPUTE c(1:3) = {1; 2; 3; 4}.
888 matrix.sps:26.18-26.29: error: MATRIX: The source vector has 4 elements.
889 26 | COMPUTE c(1:3) = {1; 2; 3; 4}.
892 matrix.sps:27.9-27.12: error: MATRIX: Only an 9-element vector may be assigned
893 to this 9-element subvector of c.
894 27 | COMPUTE c(:) = {1; 2; 3; 4}.
897 matrix.sps:27.16-27.27: error: MATRIX: The source vector has 4 elements.
898 27 | COMPUTE c(:) = {1; 2; 3; 4}.
901 matrix.sps:28.11: error: MATRIX: Index 0 is out of range for vector with 9
903 28 | COMPUTE c(0) = 5.
906 matrix.sps:29.11-29.12: error: MATRIX: Index 10 is out of range for vector with
908 29 | COMPUTE c(10) = 5.
911 matrix.sps:30.11-30.22: error: MATRIX: Vector index must be scalar or vector,
913 30 | COMPUTE c({1, 2; 3, 4}) = 1.
916 matrix.sps:33.9-33.12: error: MATRIX: Can't use vector indexing on 2×2 matrix
918 33 | COMPUTE m(5) = 1.
921 matrix.sps:34.9-34.12: error: MATRIX: Can't use vector indexing on 2×2 matrix
923 34 | COMPUTE m(:) = 1.
928 AT_SETUP([MATRIX - COMPUTE - negative])
929 AT_DATA([matrix.sps], [dnl
937 AT_CHECK([pspp matrix.sps], [1], [dnl
938 matrix.sps:2.10: error: COMPUTE: Syntax error expecting `='.
942 matrix.sps:3.11: error: COMPUTE: Syntax error expecting matrix expression.
946 matrix.sps:4.9: error: MATRIX: Undefined variable x.
950 matrix.sps:5.9: error: COMPUTE: Undefined variable y.
956 AT_SETUP([MATRIX - elementwise arithmetic operators])
957 AT_DATA([matrix.sps], [dnl
962 PRINT ({1,2;3,4} + {5,6;7,8}).
963 PRINT ({1,2;3,4} + 5).
964 PRINT (5 + {5,6;7,8}).
965 PRINT ({1,2;3,4} + {5,6}).
967 PRINT ({1,2;3,4} - {5,6;7,8}).
968 PRINT ({1,2;3,4} - 5).
969 PRINT (5 - {5,6;7,8}).
970 PRINT ({1,2;3,4} - {5,6}).
972 PRINT ({1,2;3,4} * 5).
973 PRINT (5 * {5,6;7,8}).
975 PRINT ({2,4;6,8} / 2).
976 PRINT (12 / {1,2;3,4}).
977 PRINT ({2,8;18,32} / {1,2;3,4}).
979 PRINT ({1,2;3,4} &* {5,6;7,8}).
980 PRINT ({1,2;3,4} &* 5).
981 PRINT (5 &* {5,6;7,8}).
982 PRINT ({1,2;3,4} &* {5,6}).
984 PRINT ({2,4;6,8} &/ 2).
985 PRINT (12 &/ {1,2;3,4}).
986 PRINT ({2,8;18,32} &/ {1,2;3,4}).
988 PRINT ({1,2;3,4} &** 2).
989 PRINT (2 &** {1,2;3,4}).
990 PRINT ({1,2;3,4} &** {2,3;4,5}).
991 PRINT ({1,2;3,4} &** {5,6}).
994 AT_CHECK([pspp matrix.sps], [1], [dnl
1002 ({1,2;3,4} + {5,6;7,8})
1014 matrix.sps:8.8-8.24: error: MATRIX: The operands of + must have the same
1015 dimensions or one must be a scalar.
1016 8 | PRINT ({1,2;3,4} + {5,6}).
1019 matrix.sps:8.8-8.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1020 8 | PRINT ({1,2;3,4} + {5,6}).
1023 matrix.sps:8.20-8.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
1024 8 | PRINT ({1,2;3,4} + {5,6}).
1027 ({1,2;3,4} - {5,6;7,8})
1039 matrix.sps:13.8-13.24: error: MATRIX: The operands of - must have the same
1040 dimensions or one must be a scalar.
1041 13 | PRINT ({1,2;3,4} - {5,6}).
1044 matrix.sps:13.8-13.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1045 13 | PRINT ({1,2;3,4} - {5,6}).
1048 matrix.sps:13.20-13.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
1049 13 | PRINT ({1,2;3,4} - {5,6}).
1068 ({2,8;18,32} / {1,2;3,4})
1072 ({1,2;3,4} &* {5,6;7,8})
1084 matrix.sps:25.8-25.25: error: MATRIX: The operands of &* must have the same
1085 dimensions or one must be a scalar.
1086 25 | PRINT ({1,2;3,4} &* {5,6}).
1087 | ^~~~~~~~~~~~~~~~~~
1089 matrix.sps:25.8-25.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1090 25 | PRINT ({1,2;3,4} &* {5,6}).
1093 matrix.sps:25.21-25.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
1094 25 | PRINT ({1,2;3,4} &* {5,6}).
1105 ({2,8;18,32} &/ {1,2;3,4})
1117 ({1,2;3,4} &** {2,3;4,5})
1121 matrix.sps:34.8-34.26: error: MATRIX: The operands of &** must have the same
1122 dimensions or one must be a scalar.
1123 34 | PRINT ({1,2;3,4} &** {5,6}).
1124 | ^~~~~~~~~~~~~~~~~~~
1126 matrix.sps:34.8-34.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1127 34 | PRINT ({1,2;3,4} &** {5,6}).
1130 matrix.sps:34.22-34.26: note: MATRIX: The right-hand operand is a 1×2 matrix.
1131 34 | PRINT ({1,2;3,4} &** {5,6}).
1136 AT_SETUP([MATRIX - relational operators])
1137 AT_DATA([matrix.sps], [dnl
1139 PRINT ({1, 1; 2, 2} > {1, 2; 1, 2}).
1140 PRINT ({1, 1; 2, 2} > 1).
1141 PRINT (2 > {1, 2; 1, 2}).
1142 PRINT ({1, 2} > {1; 2}).
1144 PRINT ({1, 1; 2, 2} < {1, 2; 1, 2}).
1145 PRINT ({1, 1; 2, 2} < 2).
1146 PRINT (1 < {1, 2; 1, 2}).
1147 PRINT ({1, 2} < {1; 2}).
1149 PRINT ({1, 1; 2, 2} <> {1, 2; 1, 2}).
1150 PRINT ({1, 1; 2, 2} <> 2).
1151 PRINT (1 <> {1, 2; 1, 2}).
1152 PRINT ({1, 2} <> {1; 2}).
1154 PRINT ({1, 1; 2, 2} >= {1, 2; 1, 2}).
1155 PRINT ({1, 1; 2, 2} >= 2).
1156 PRINT (1 >= {1, 2; 1, 2}).
1157 PRINT ({1, 2} >= {1; 2}).
1159 PRINT ({1, 1; 2, 2} <= {1, 2; 1, 2}).
1160 PRINT ({1, 1; 2, 2} <= 2).
1161 PRINT (1 <= {1, 2; 1, 2}).
1162 PRINT ({1, 2} <= {1; 2}).
1164 PRINT ({1, 1; 2, 2} = {1, 2; 1, 2}).
1165 PRINT ({1, 1; 2, 2} = 2).
1166 PRINT (1 = {1, 2; 1, 2}).
1167 PRINT ({1, 2} = {1; 2}).
1170 AT_CHECK([pspp matrix.sps], [1], [dnl
1171 ({1, 1; 2, 2} > {1, 2; 1, 2})
1183 matrix.sps:5.8-5.22: error: MATRIX: The operands of > must have the same
1184 dimensions or one must be a scalar.
1185 5 | PRINT ({1, 2} > {1; 2}).
1188 matrix.sps:5.8-5.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1189 5 | PRINT ({1, 2} > {1; 2}).
1192 matrix.sps:5.17-5.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1193 5 | PRINT ({1, 2} > {1; 2}).
1196 ({1, 1; 2, 2} < {1, 2; 1, 2})
1208 matrix.sps:10.8-10.22: error: MATRIX: The operands of < must have the same
1209 dimensions or one must be a scalar.
1210 10 | PRINT ({1, 2} < {1; 2}).
1213 matrix.sps:10.8-10.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1214 10 | PRINT ({1, 2} < {1; 2}).
1217 matrix.sps:10.17-10.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1218 10 | PRINT ({1, 2} < {1; 2}).
1221 ({1, 1; 2, 2} <> {1, 2; 1, 2})
1233 matrix.sps:15.8-15.23: error: MATRIX: The operands of <> must have the same
1234 dimensions or one must be a scalar.
1235 15 | PRINT ({1, 2} <> {1; 2}).
1238 matrix.sps:15.8-15.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1239 15 | PRINT ({1, 2} <> {1; 2}).
1242 matrix.sps:15.18-15.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1243 15 | PRINT ({1, 2} <> {1; 2}).
1246 ({1, 1; 2, 2} >= {1, 2; 1, 2})
1258 matrix.sps:20.8-20.23: error: MATRIX: The operands of >= must have the same
1259 dimensions or one must be a scalar.
1260 20 | PRINT ({1, 2} >= {1; 2}).
1263 matrix.sps:20.8-20.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1264 20 | PRINT ({1, 2} >= {1; 2}).
1267 matrix.sps:20.18-20.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1268 20 | PRINT ({1, 2} >= {1; 2}).
1271 ({1, 1; 2, 2} <= {1, 2; 1, 2})
1283 matrix.sps:25.8-25.23: error: MATRIX: The operands of <= must have the same
1284 dimensions or one must be a scalar.
1285 25 | PRINT ({1, 2} <= {1; 2}).
1288 matrix.sps:25.8-25.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1289 25 | PRINT ({1, 2} <= {1; 2}).
1292 matrix.sps:25.18-25.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1293 25 | PRINT ({1, 2} <= {1; 2}).
1296 ({1, 1; 2, 2} = {1, 2; 1, 2})
1308 matrix.sps:30.8-30.22: error: MATRIX: The operands of = must have the same
1309 dimensions or one must be a scalar.
1310 30 | PRINT ({1, 2} = {1; 2}).
1313 matrix.sps:30.8-30.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1314 30 | PRINT ({1, 2} = {1; 2}).
1317 matrix.sps:30.17-30.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1318 30 | PRINT ({1, 2} = {1; 2}).
1323 AT_SETUP([MATRIX - logical operators])
1324 AT_DATA([matrix.sps], [dnl
1326 PRINT (NOT {-1, 0, 1}).
1328 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1329 PRINT ({-1, 0, 1} AND -1).
1330 PRINT ({-1, 0, 1} AND 0).
1331 PRINT ({-1, 0, 1} AND 1).
1332 PRINT ({-1, 0} AND {2; 3}).
1334 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1335 PRINT ({-1, 0, 1} OR -1).
1336 PRINT ({-1, 0, 1} OR 0).
1337 PRINT ({-1, 0, 1} OR 1).
1338 PRINT ({-1, 0} OR {2; 3}).
1340 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1341 PRINT ({-1, 0, 1} XOR -1).
1342 PRINT ({-1, 0, 1} XOR 0).
1343 PRINT ({-1, 0, 1} XOR 1).
1344 PRINT ({-1, 0} XOR {2; 3}).
1347 AT_CHECK([pspp matrix.sps], [1], [dnl
1351 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1365 matrix.sps:8.8-8.25: error: MATRIX: The operands of AND must have the same
1366 dimensions or one must be a scalar.
1367 8 | PRINT ({-1, 0} AND {2; 3}).
1368 | ^~~~~~~~~~~~~~~~~~
1370 matrix.sps:8.8-8.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1371 8 | PRINT ({-1, 0} AND {2; 3}).
1374 matrix.sps:8.20-8.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
1375 8 | PRINT ({-1, 0} AND {2; 3}).
1378 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1392 matrix.sps:14.8-14.24: error: MATRIX: The operands of OR must have the same
1393 dimensions or one must be a scalar.
1394 14 | PRINT ({-1, 0} OR {2; 3}).
1397 matrix.sps:14.8-14.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1398 14 | PRINT ({-1, 0} OR {2; 3}).
1401 matrix.sps:14.19-14.24: note: MATRIX: The right-hand operand is a 2×1 matrix.
1402 14 | PRINT ({-1, 0} OR {2; 3}).
1405 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1419 matrix.sps:20.8-20.25: error: MATRIX: The operands of XOR must have the same
1420 dimensions or one must be a scalar.
1421 20 | PRINT ({-1, 0} XOR {2; 3}).
1422 | ^~~~~~~~~~~~~~~~~~
1424 matrix.sps:20.8-20.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1425 20 | PRINT ({-1, 0} XOR {2; 3}).
1428 matrix.sps:20.20-20.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
1429 20 | PRINT ({-1, 0} XOR {2; 3}).
1434 AT_SETUP([MATRIX - matrix operators])
1435 AT_DATA([matrix.sps], [dnl
1437 PRINT ({0, 1; 0, 0} * {0, 0; 1, 0}).
1438 PRINT ({0, 0; 1, 0} * {0, 1; 0, 0}).
1439 PRINT ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12}).
1440 PRINT ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3}).
1441 COMPUTE m = {0, 1, 0, 0; 1, 0, 1, 0; 0, 1, 0, 1; 0, 0, 1, 0}.
1449 PRINT {3, 3.5; 3.2, 3.6}**-1/FORMAT F6.2.
1451 PRINT ({1, 2, 3} * {1, 2}).
1457 AT_CHECK([pspp matrix.sps], [1], [dnl
1458 ({0, 1; 0, 0} * {0, 0; 1, 0})
1462 ({0, 0; 1, 0} * {0, 1; 0, 0})
1466 ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12})
1470 ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3})
1515 {3, 3.5; 3.2, 3.6}**-1
1519 matrix.sps:16.8-16.25: error: MATRIX: Matrices not conformable for
1521 16 | PRINT ({1, 2, 3} * {1, 2}).
1522 | ^~~~~~~~~~~~~~~~~~
1524 matrix.sps:16.8-16.16: note: MATRIX: The left-hand operand is a 1×3 matrix.
1525 16 | PRINT ({1, 2, 3} * {1, 2}).
1528 matrix.sps:16.20-16.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
1529 16 | PRINT ({1, 2, 3} * {1, 2}).
1532 matrix.sps:17.7-17.15: error: MATRIX: Matrix exponentation with ** requires a
1533 square matrix on the left-hand size, not one with dimensions 1×3.
1534 17 | PRINT {1, 2, 3}**2.
1537 matrix.sps:18.10-18.15: error: MATRIX: Matrix exponentiation with ** requires a
1538 scalar on the right-hand side, not a matrix with dimensions 1×2.
1539 18 | PRINT m**{1, 2}.
1542 matrix.sps:19.10-19.12: error: MATRIX: Exponent 1.5 in matrix exponentiation is
1543 non-integer or outside the valid range.
1549 AT_SETUP([MATRIX - sequences and construction])
1550 AT_DATA([matrix.sps], [dnl
1572 AT_CHECK([pspp matrix.sps], [1], [dnl
1601 matrix.sps:15.12: error: MATRIX: The increment operand to : must be nonzero.
1605 matrix.sps:16.14: error: MATRIX: The increment operand to : must be nonzero.
1606 16 | PRINT {-1:-3:0}.
1609 matrix.sps:18.7-18.15: error: MATRIX: This expression tries to vertically join
1610 matrices with differing numbers of columns.
1611 18 | PRINT {1, 2; 3}.
1614 matrix.sps:18.8-18.11: note: MATRIX: This operand is a 1×2 matrix.
1615 18 | PRINT {1, 2; 3}.
1618 matrix.sps:18.14: note: MATRIX: This operand is a 1×1 matrix.
1619 18 | PRINT {1, 2; 3}.
1622 matrix.sps:19.7-19.17: error: MATRIX: This expression tries to horizontally
1623 join matrices with differing numbers of rows.
1624 19 | PRINT {{2; 5}, 3}.
1627 matrix.sps:19.8-19.13: note: MATRIX: This operand is a 2×1 matrix.
1628 19 | PRINT {{2; 5}, 3}.
1631 matrix.sps:19.16: note: MATRIX: This operand is a 1×1 matrix.
1632 19 | PRINT {{2; 5}, 3}.
1637 AT_SETUP([MATRIX - comments])
1638 AT_DATA([matrix.sps], [dnl
1642 COMMENT Comment two.
1646 AT_CHECK([pspp matrix.sps], [0], [dnl
1655 AT_SETUP([MATRIX - string matrices])
1656 AT_DATA([matrix.sps], [dnl
1658 COMPUTE m={'This is', 'a string', 'matrix', 'including', 'some', 'long strings'}.
1662 AT_CHECK([pspp matrix.sps], [0], [dnl
1664 This is a string matrix includin some long str
1668 AT_SETUP([MATRIX - ABS ALL ANY ARSIN ARTAN])
1669 AT_DATA([matrix.sps], [dnl
1671 PRINT ABS({-1, 0, 1}).
1673 PRINT ALL({0, 0, 0}).
1675 PRINT ALL({-1, 0, 1}).
1677 PRINT ANY({0, 0, 0}).
1679 PRINT ANY({-1, 0, 1}).
1681 PRINT ARSIN({-1, 0, 1})/FORMAT=F5.2.
1683 PRINT ARTAN({-5, -1, 0, 1, 5})/FORMAT=F5.2.
1686 AT_CHECK([pspp matrix.sps], [0], [dnl
1711 ARTAN({-5, -1, 0, 1, 5})
1712 -1.37 -.79 .00 .79 1.37
1716 AT_SETUP([MATRIX - BLOCK CHOL CMAX CMIN COS])
1717 AT_DATA([matrix.sps], [dnl
1719 PRINT BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11}).
1721 COMPUTE b=CHOL({4, 12, -16; 12, 37, -43; -16, -43, 98}).
1725 PRINT CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1727 PRINT CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1729 PRINT COS({0.785, 1.57; 3.14, 1.57 + 3.14}) /FORMAT=F5.2.
1733 AT_CHECK([pspp matrix.sps], [0], [dnl
1734 BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11})
1753 CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11})
1756 CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11})
1759 COS({0.785, 1.57; 3.14, 1.57 + 3.14})
1765 AT_SETUP([MATRIX - CSSQ CSUM DESIGN DET DIAG])
1766 AT_DATA([matrix.sps], [dnl
1768 PRINT CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1769 PRINT CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1770 PRINT DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1}).
1771 PRINT DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1}).
1772 PRINT DET({1, 2, 3; 4, 5, 6; 7, 8, 9}) /FORMAT F4.1.
1773 PRINT DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10}).
1776 AT_CHECK([pspp matrix.sps], [0], [dnl
1777 CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
1780 CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
1783 DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1})
1788 warning: Column 2 in DESIGN argument has constant value.
1790 DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1})
1795 DET({1, 2, 3; 4, 5, 6; 7, 8, 9})
1798 DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10})
1805 AT_SETUP([MATRIX - EVAL EXP GINV GRADE GSCH])
1806 AT_DATA([matrix.sps], [dnl
1808 PRINT EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})/FORMAT=F5.2.
1810 PRINT EXP({2, 3; 4, 5})/FORMAT F5.2.
1812 PRINT GINV({1, 2})/FORMAT F5.2.
1813 COMPUTE a={1, 2, 3; 4, 5, 6; 7, 8, 9}.
1815 PRINT (a*g*a)/FORMAT F5.2.
1817 PRINT GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5}).
1818 COMPUTE x={26, 690, 323, 208, 671, 818, 732, 711, 585, 792}.
1820 COMPUTE asort(GRADE(asort))=asort.
1823 COMPUTE dsort(GRADE(-dsort))=dsort.
1826 PRINT (GSCH({3, 2; 1, 2}) * SQRT(10))/FORMAT F5.2.
1827 PRINT (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))/FORMAT F5.2.
1829 PRINT GSCH({0, 0, 0; 0, 0, 0}).
1832 AT_CHECK([pspp matrix.sps], [1], [dnl
1833 EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})
1851 GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5})
1857 26 208 323 585 671 690 711 732 792 818
1860 818 792 732 711 690 671 585 323 208 26
1862 (GSCH({3, 2; 1, 2}) * SQRT(10))
1866 (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))
1870 matrix.sps:22.12-22.17: error: MATRIX: GSCH requires its argument to have at
1871 least as many columns as rows, but it has dimensions 2×1.
1872 22 | PRINT GSCH({0; 0}).
1875 matrix.sps:23.12-23.29: error: MATRIX: 2×3 argument to GSCH contains only 0
1876 linearly independent columns.
1877 23 | PRINT GSCH({0, 0, 0; 0, 0, 0}).
1878 | ^~~~~~~~~~~~~~~~~~
1882 AT_SETUP([MATRIX - IDENT INV KRONEKER LG10 LN])
1883 AT_DATA([matrix.sps], [dnl
1890 PRINT INV({3, 3.5; 3.2, 3.6})/FORMAT F8.2.
1891 PRINT INV({4, 7; 2, 6})/FORMAT F8.2.
1892 PRINT (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)/FORMAT F8.2.
1894 PRINT KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7}).
1896 PRINT LG10({1, 10, 100, 1000}).
1898 PRINT LN({1, 2; 3, 4})/FORMAT F5.2.
1902 AT_CHECK([pspp matrix.sps], [1], [dnl
1922 INV({3, 3.5; 3.2, 3.6})
1930 (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)
1935 KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7})
1941 LG10({1, 10, 100, 1000})
1948 matrix.sps:16.7-16.11: error: MATRIX: Argument 1 to matrix function LN must be
1953 matrix.sps:16.10: note: MATRIX: Argument 1 is 0.
1959 AT_SETUP([MATRIX - MAGIC])
1960 AT_DATA([matrix.sps], [dnl
1965 COMPUTE total=n*(n**2 + 1) / 2.
1966 COMPUTE tb={MSUM(DIAG(T(m))), CSUM(m), MSUM(DIAG(m))} - total.
1967 COMPUTE lr=RSUM(m) - total.
1968 PRINT {tb; lr, m, lr; tb}/FORMAT F4.0.
1972 AT_CHECK([pspp matrix.sps], [0], [dnl
1998 0 24 14 22 18 17 16 0
1999 0 13 23 15 19 20 21 0
2005 0 30 39 48 1 10 19 28 0
2006 0 38 47 7 9 18 27 29 0
2007 0 46 6 8 17 26 35 37 0
2008 0 5 14 16 25 34 36 45 0
2009 0 13 15 24 33 42 44 4 0
2010 0 21 23 32 41 43 3 12 0
2011 0 22 31 40 49 2 11 20 0
2015 0 1 9 17 25 40 48 56 64 0
2016 0 63 55 47 39 26 18 10 2 0
2017 0 3 11 19 27 38 46 54 62 0
2018 0 61 53 45 37 28 20 12 4 0
2019 0 60 52 44 32 33 21 13 5 0
2020 0 6 14 22 30 35 43 51 59 0
2021 0 58 50 42 34 31 23 15 7 0
2022 0 8 16 24 36 29 41 49 57 0
2025 0 0 0 0 0 0 0 0 0 0 0
2026 0 47 58 69 80 1 12 23 34 45 0
2027 0 57 68 79 9 11 22 33 44 46 0
2028 0 67 78 8 10 21 32 43 54 56 0
2029 0 77 7 18 20 31 42 53 55 66 0
2030 0 6 17 19 30 41 52 63 65 76 0
2031 0 16 27 29 40 51 62 64 75 5 0
2032 0 26 28 39 50 61 72 74 4 15 0
2033 0 36 38 49 60 71 73 3 14 25 0
2034 0 37 48 59 70 81 2 13 24 35 0
2035 0 0 0 0 0 0 0 0 0 0 0
2037 0 0 0 0 0 0 0 0 0 0 0 0
2038 0 1 9 17 25 33 68 76 84 92 100 0
2039 0 99 91 83 75 67 34 26 18 10 2 0
2040 0 3 11 19 27 35 66 74 82 90 98 0
2041 0 97 89 81 72 65 36 29 20 12 4 0
2042 0 60 42 58 44 56 50 49 53 47 46 0
2043 0 41 59 43 57 45 51 52 48 54 55 0
2044 0 96 88 80 73 64 37 28 21 13 5 0
2045 0 6 14 22 30 38 63 71 79 87 95 0
2046 0 94 86 78 70 62 39 31 23 15 7 0
2047 0 8 16 24 32 40 61 69 77 85 93 0
2048 0 0 0 0 0 0 0 0 0 0 0 0
2052 AT_SETUP([MATRIX - MAKE MDIAG MMAX MMIN MOD])
2053 AT_DATA([matrix.sps], [dnl
2055 PRINT MAKE(1, 2, 3).
2056 PRINT MAKE(2, 1, 4).
2057 PRINT MAKE(2, 3, 5).
2059 PRINT MDIAG({1, 2, 3, 4}).
2060 PRINT MDIAG({1; 2; 3; 4}).
2061 PRINT MDIAG({1, 2; 3, 4}).
2063 PRINT MMAX({55, 44; 66, 11}).
2065 PRINT MMIN({55, 44; 66, 11}).
2067 PRINT MOD({5, 4, 3, 2, 1, 0}, 3).
2068 PRINT MOD({5, 4, 3, 2, 1, 0}, -3).
2069 PRINT MOD({-5, -4, -3, -2, -1, 0}, 3).
2070 PRINT MOD({-5, -4, -3, -2, -1, 0}, -3).
2071 PRINT MOD({5, 4, 3, 2, 1, 0}, 1.5) /FORMAT F5.1.
2072 PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
2075 AT_CHECK([pspp matrix.sps], [1], [dnl
2099 matrix.sps:8.13-8.24: error: MATRIX: Function MDIAG argument 1 must be a
2100 vector, not a 2×2 matrix.
2101 8 | PRINT MDIAG({1, 2; 3, 4}).
2104 MMAX({55, 44; 66, 11})
2107 MMIN({55, 44; 66, 11})
2110 MOD({5, 4, 3, 2, 1, 0}, 3)
2113 MOD({5, 4, 3, 2, 1, 0}, -3)
2116 MOD({-5, -4, -3, -2, -1, 0}, 3)
2119 MOD({-5, -4, -3, -2, -1, 0}, -3)
2122 MOD({5, 4, 3, 2, 1, 0}, 1.5)
2125 matrix.sps:19.7-19.32: error: MATRIX: Argument 2 to matrix function MOD must
2127 19 | PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
2128 | ^~~~~~~~~~~~~~~~~~~~~~~~~~
2132 AT_SETUP([MATRIX - MSSQ MSUM NCOL NROW RANK])
2133 AT_DATA([matrix.sps], [dnl
2135 PRINT MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2137 PRINT MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2139 PRINT NCOL({1, 0; -2, -3; 3, 3}).
2141 PRINT NROW({1, 0; -2, -3; 3, 3}).
2143 PRINT RANK({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2144 PRINT RANK({1, 1, 0, 2; -1, -1, 0, -2}).
2145 PRINT RANK({1, -1; 1, -1; 0, 0; 2, -2}).
2146 PRINT RANK({1, 2, 1; -2, -3, 1; 3, 5, 0}).
2147 PRINT RANK({1, 0, 2; 2, 1, 0; 3, 2, 1}).
2150 AT_CHECK([pspp matrix.sps], [0], [dnl
2151 MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0})
2154 MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0})
2157 NCOL({1, 0; -2, -3; 3, 3})
2160 NROW({1, 0; -2, -3; 3, 3})
2163 RANK({1, 0, 1; -2, -3, 1; 3, 3, 0})
2166 RANK({1, 1, 0, 2; -1, -1, 0, -2})
2169 RANK({1, -1; 1, -1; 0, 0; 2, -2})
2172 RANK({1, 2, 1; -2, -3, 1; 3, 5, 0})
2175 RANK({1, 0, 2; 2, 1, 0; 3, 2, 1})
2180 AT_SETUP([MATRIX - RESHAPE RMAX RMIN RND RNKORDER])
2181 AT_DATA([matrix.sps], [dnl
2183 PRINT RESHAPE(1:12, 1, 12).
2184 PRINT RESHAPE(1:12, 2, 6).
2185 PRINT RESHAPE(1:12, 3, 4).
2186 PRINT RESHAPE(1:12, 4, 3).
2187 PRINT RESHAPE(1:12, 6, 2).
2188 PRINT RESHAPE(1:12, 12, 1).
2190 PRINT RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2192 PRINT RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2194 PRINT RND({-1.6, -1.5, -1.4;
2197 1.4, 1.5, 1.6})/FORMAT F5.1.
2199 PRINT RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5}) /FORMAT F5.1.
2202 AT_CHECK([pspp matrix.sps], [0], [dnl
2203 RESHAPE(1:12, 1, 12)
2204 1 2 3 4 5 6 7 8 9 10 11 12
2229 RESHAPE(1:12, 12, 1)
2243 RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0})
2248 RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0})
2253 RND({-1.6, -1.5, -1.4;
2262 RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5})
2269 AT_SETUP([MATRIX - RSSQ RSUM SIN SOLVE SQRT])
2270 AT_DATA([matrix.sps], [dnl
2272 PRINT RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
2273 PRINT RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
2275 PRINT SIN({0, .78, 1.57, 2.35, 3.14}) /FORMAT F5.2.
2277 PRINT SOLVE({2, 3; 4, 9}, {6, 2; 15, 5}) /FORMAT=F6.2.
2278 PRINT SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8}) /FORMAT=F6.2.
2279 PRINT SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3}) /FORMAT=F6.2.
2280 PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2282 PRINT SQRT({0, 1, 2, 3, 4, 9, 81}) /FORMAT=F5.2.
2286 AT_CHECK([pspp matrix.sps], [1], [dnl
2287 RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
2292 RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
2297 SIN({0, .78, 1.57, 2.35, 3.14})
2298 .00 .70 1.00 .71 .00
2300 SOLVE({2, 3; 4, 9}, {6, 2; 15, 5})
2304 SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8})
2309 SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3})
2314 matrix.sps:10.7-10.33: error: MATRIX: SOLVE arguments must have the same number
2316 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2317 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
2319 matrix.sps:10.13-10.24: note: MATRIX: Argument 1 has dimensions 2×2.
2320 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2323 matrix.sps:10.27-10.32: note: MATRIX: Argument 2 has dimensions 1×2.
2324 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2327 SQRT({0, 1, 2, 3, 4, 9, 81})
2328 .00 1.00 1.41 1.73 2.00 3.00 9.00
2330 matrix.sps:13.7-13.14: error: MATRIX: Argument 1 to matrix function SQRT must
2331 be greater than or equal to 0.
2332 13 | PRINT SQRT(-1).
2335 matrix.sps:13.12-13.13: note: MATRIX: Argument 1 is -1.
2336 13 | PRINT SQRT(-1).
2341 AT_SETUP([MATRIX - SSCP SVAL SWEEP TRACE TRANSPOS TRUNC])
2342 AT_DATA([matrix.sps], [dnl
2344 COMPUTE m={1, 2, 3; 4, 5, 6}
2345 COMPUTE sscp1=SSCP(m).
2346 COMPUTE sscp2=T(m)*m.
2348 PRINT (sscp1 <> sscp2).
2350 PRINT SVAL({1, 1; 0, 0})/FORMAT F5.2.
2351 PRINT SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})/FORMAT F5.2.
2352 PRINT SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
2354 PRINT SVAL({2, 4; 1, 3; 0, 0; 0, 0})/FORMAT F5.2.
2356 COMPUTE s0 = {6, 12, 0, 12; 12, 28, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
2357 PRINT SWEEP(s0, 1)/FORMAT F5.2.
2358 PRINT SWEEP(SWEEP(s0, 1), 2)/FORMAT F5.2.
2359 PRINT SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)/FORMAT F5.2.
2361 COMPUTE s1 = {6, 12, 0, 12; 12, 0, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
2364 COMPUTE s2 = {0, 1, 2; 3, 4, 5; 6, 7, 8}.
2373 PRINT ALL(T(T(s0)) = s0).
2375 PRINT TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
2376 PRINT TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
2379 AT_CHECK([pspp matrix.sps], [0], [dnl
2394 SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})
2399 SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
2405 SVAL({2, 4; 1, 3; 0, 0; 0, 0})
2413 -2.00 1.00 2.00 4.00
2415 SWEEP(SWEEP(s0, 1), 2)
2419 -1.50 -.25 2.00 3.75
2421 SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)
2425 -1.50 -.25 -.33 3.08
2439 -.7500000000 -.2500000000 .7500000000
2440 .7500000000 .2500000000 1.2500000000
2441 .7500000000 -1.7500000000 -.7500000000
2444 -1.5000000000 -.7500000000 -.2500000000
2445 -.7500000000 -.3750000000 -.6250000000
2446 .7500000000 .8750000000 .1250000000
2466 TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
2470 TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
2476 AT_SETUP([MATRIX - UNIFORM])
2477 AT_DATA([matrix.sps], [dnl
2480 PRINT (UNIFORM(4, 5)*10)/FORMAT F5.2.
2483 AT_CHECK([pspp matrix.sps], [0], [dnl
2485 7.71 2.99 .21 4.95 6.34
2486 4.43 7.49 8.32 4.99 5.83
2487 2.25 .25 1.98 7.09 7.61
2488 2.66 1.69 2.64 .88 1.50
2492 AT_SETUP([MATRIX - invalid function arguments])
2493 AT_DATA([matrix.sps], [dnl
2495 COMPUTE x=MOD({1,2,3},{4,5,6}).
2496 COMPUTE x=MDIAG({1, 2; 3, 4}).
2498 COMPUTE x=ARSIN({1, 1; -1, 2}).
2499 COMPUTE x=CDF.UNIFORM(2,1,1).
2500 COMPUTE x=CDF.UNIFORM(1,2,1).
2501 COMPUTE x=CDF.UNIFORM({1,2},1,1).
2505 AT_CHECK([pspp matrix.sps], [1], [dnl
2506 matrix.sps:2.23-2.29: error: MATRIX: Function MOD argument 2 must be a scalar,
2508 2 | COMPUTE x=MOD({1,2,3},{4,5,6}).
2511 matrix.sps:3.17-3.28: error: MATRIX: Function MDIAG argument 1 must be a
2512 vector, not a 2×2 matrix.
2513 3 | COMPUTE x=MDIAG({1, 2; 3, 4}).
2516 matrix.sps:4.17: error: MATRIX: Argument 1 to matrix function ARSIN is 2, which
2517 is outside the valid range [[-1,1]].
2518 4 | COMPUTE x=ARSIN(2).
2521 matrix.sps:5.17-5.29: error: MATRIX: Row 2, column 2 of argument 1 to matrix
2522 function ARSIN is 2, which is outside the valid range [[-1,1]].
2523 5 | COMPUTE x=ARSIN({1, 1; -1, 2}).
2526 error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
2529 matrix.sps:6.23: note: MATRIX: Argument 1 is 2.
2530 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
2533 matrix.sps:6.27: note: MATRIX: Argument 3 is 1.
2534 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
2537 error: Argument 2 to matrix function CDF.UNIFORM must be less than or equal to
2540 matrix.sps:7.25: note: MATRIX: Argument 2 is 2.
2541 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
2544 matrix.sps:7.27: note: MATRIX: Argument 3 is 1.
2545 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
2548 error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
2551 matrix.sps:8.23-8.27: note: MATRIX: Row 1, column 2 of argument 1 is 2.
2552 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
2555 matrix.sps:8.31: note: MATRIX: Argument 3 is 1.
2556 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
2559 matrix.sps:9.11-9.18: error: MATRIX: Argument 1 to matrix function MAGIC must
2560 be greater than or equal to 3.
2561 9 | COMPUTE x=MAGIC(2).
2564 matrix.sps:9.17: note: MATRIX: Argument 1 is 2.
2565 9 | COMPUTE x=MAGIC(2).
2570 AT_SETUP([MATRIX - invalid number function arguments])
2571 AT_DATA([matrix.sps], [dnl
2575 COMPUTE x=KRONEKER(1,2,3).
2577 COMPUTE x=IDENT(1,2,3).
2581 AT_CHECK([pspp matrix.sps], [1], [dnl
2582 matrix.sps:2: error: COMPUTE: Matrix function ABS requires 1 argument.
2584 matrix.sps:3: error: COMPUTE: Matrix function ABS requires 1 argument.
2586 matrix.sps:4: error: COMPUTE: Matrix function KRONEKER requires 2 arguments.
2588 matrix.sps:5: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2589 but 0 were provided.
2591 matrix.sps:6: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2592 but 3 were provided.
2594 matrix.sps:7: error: COMPUTE: Matrix function BLOCK requires at least one
2599 AT_SETUP([MATRIX - CALL SETDIAG])
2600 AT_DATA([matrix.sps], [dnl
2602 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
2605 CALL SETDIAG(x1, 10).
2609 CALL SETDIAG(x2, {10, 11}).
2613 CALL SETDIAG(x3, {10, 11, 12}).
2617 CALL SETDIAG(x4, {10, 11, 12, 13}).
2621 CALL SETDIAG(x5, {10, 11; 12, 13}).
2626 AT_CHECK([pspp matrix.sps], [1], [dnl
2647 matrix.sps:21.18-21.33: error: MATRIX: SETDIAG argument 2 must be a scalar or a
2648 vector, not a 2×2 matrix.
2649 21 | CALL SETDIAG(x5, {10, 11; 12, 13}).
2659 dnl I have some doubts about the correctness of the results below.
2660 AT_SETUP([MATRIX - CALL EIGEN])
2661 AT_DATA([matrix.sps], [dnl
2663 CALL EIGEN({1, 0; 0, 1}, evec, eval).
2667 CALL EIGEN({3, 2, 4; 2, 0, 2; 4, 2, 3}, evec2, eval2).
2672 AT_CHECK([pspp matrix.sps], [0], [dnl
2682 -.6666666667 .0000000000 .7453559925
2683 -.3333333333 -.8944271910 -.2981423970
2684 -.6666666667 .4472135955 -.5962847940
2693 AT_SETUP([MATRIX - CALL SVD])
2694 AT_DATA([matrix.sps], [dnl
2696 CALL SVD({3, 2, 2; 2, 3, -2}, u, s, v).
2697 PRINT (u * s * T(v))/FORMAT F5.1.
2699 CALL SVD({2, 4; 1, 3; 0, 0; 0, 0}, u, s, v).
2700 PRINT (u*s*T(v))/FORMAT F5.1.
2702 CALL SVD({-3, 1; 6, -2; 6, -2}, u, s, v).
2703 PRINT (u*s*T(v))/FORMAT F5.1.
2706 AT_CHECK([pspp matrix.sps], [0], [dnl
2724 AT_SETUP([MATRIX - PRINT])
2725 AT_DATA([matrix.sps], [dnl
2727 PRINT/TITLE="title 1".
2728 PRINT/SPACE=2/TITLE="title 2".
2730 COMPUTE m={1, 2, 3; 3, 4, 5; 6, 7, 8}.
2731 PRINT m/RLABELS=123, a b c, long name.
2732 PRINT m/RNAMES={'123', 'a b c', 'long name'}.
2733 PRINT m/CLABELS=col1, col2, long column name.
2734 PRINT m/CNAMES={'col1', 'col2', 'long column name'}.
2735 PRINT m/RLABELS=123, a b c, long name
2736 /CLABELS=col1, col2, long column name.
2737 PRINT m/RNAMES={'123', 'a b c', 'long name'}
2738 /CNAMES={'col1', 'col2', 'long column name'}.
2739 PRINT {123e10, 456e10, 500}.
2743 AT_DATA([matrix-tables.sps], [dnl
2744 SET MDISPLAY=TABLES.
2745 INCLUDE 'matrix.sps'.
2748 AT_CHECK([pspp matrix.sps], [0], [dnl
2789 {123e10, 456e10, 500}
2791 1.2300000000 4.5600000000 .0000000005
2794 AT_CHECK([pspp matrix-tables.sps], [0], [dnl
2816 +----+----+----------------+
2817 |col1|col2|long column name|
2818 +----+----+----------------+
2822 +----+----+----------------+
2825 +----+----+--------+
2826 |col1|col2|long col|
2827 +----+----+--------+
2831 +----+----+--------+
2834 +---------+----+----+----------------+
2835 | |col1|col2|long column name|
2836 +---------+----+----+----------------+
2839 |long name| 6| 7| 8|
2840 +---------+----+----+----------------+
2843 +--------+----+----+--------+
2844 | |col1|col2|long col|
2845 +--------+----+----+--------+
2849 +--------+----+----+--------+
2851 {123e10, 456e10, 500}
2852 +----------------------------------------------+
2853 |1.2300000000[[a]] 4.5600000000[[a]] .0000000005[[a]]|
2854 +----------------------------------------------+
2859 AT_SETUP([MATRIX - PRINT - negative])
2860 AT_DATA([matrix.sps], [dnl
2873 AT_CHECK([pspp matrix.sps], [1], [dnl
2874 matrix.sps:2.7: error: PRINT: Syntax error expecting matrix expression.
2878 matrix.sps:3.14: error: PRINT: Syntax error expecting valid format specifier.
2882 matrix.sps:4.14-4.16: error: PRINT: Output format P52.0 specifies width 52, but
2883 P requires a width between 1 and 16.
2884 4 | PRINT/FORMAT=P52.
2887 matrix.sps:5.13: error: PRINT: Syntax error expecting string.
2891 matrix.sps:6.13: error: PRINT: Syntax error expecting positive integer for
2896 matrix.sps:7.14: error: PRINT: Syntax error expecting matrix expression.
2900 matrix.sps:8.14: error: PRINT: Syntax error expecting matrix expression.
2904 matrix.sps:9.7: error: PRINT: Syntax error expecting FORMAT, TITLE, SPACE,
2905 RLABELS, CLABELS, RNAMES, or CNAMES.
2911 AT_SETUP([MATRIX - DO IF])
2912 AT_DATA([matrix.sps], [dnl
2940 AT_CHECK([pspp matrix.sps], [1], [dnl
2947 matrix.sps:20.7-20.12: error: MATRIX: Expression for DO IF must evaluate to
2948 scalar, not a 1×2 matrix.
2952 matrix.sps:24.9-24.10: error: MATRIX: Expression for ELSE IF must evaluate to
2953 scalar, not a 0×0 matrix.
2959 AT_SETUP([MATRIX - unbounded LOOP])
2960 AT_DATA([matrix.sps], [dnl
2962 * Truly unbounded loop.
2972 * Unbounded loop terminates with BREAK.
2987 AT_CHECK([pspp matrix.sps], [0], [dnl
2992 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2993 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
3000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3005 AT_SETUP([MATRIX - indexed or conditional LOOP])
3006 AT_DATA([matrix.sps], [dnl
3008 * Indexed loop terminates based on index.
3016 * Indexed loop terminates based on MXLOOPS.
3024 * Indexed loop terminates with BREAK.
3035 * Indexed loop terminates with top IF.
3037 LOOP x=1 TO 50 IF NCOL(y) < 15.
3043 * Indexed loop terminates with bottom IF.
3047 END LOOP IF NCOL(y) >= 22.
3064 LOOP i=1 TO NROW(indexing).
3066 LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
3069 PRINT {indexing(i, :), y}.
3078 LOOP i=5 TO 8 BY {}.
3087 LOOP i=1e100 to 1e200.
3091 AT_CHECK([pspp matrix.sps], [1], [dnl
3096 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3103 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3104 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
3111 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3118 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3124 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3128 1 10 1 1 2 3 4 5 6 7 8 9 10
3138 10 1 -1 10 9 8 7 6 5 4 3 2 1
3148 matrix.sps:66.8-66.9: error: MATRIX: Expression for LOOP must evaluate to
3149 scalar, not a 0×0 matrix.
3150 66 | LOOP i={} TO 5.
3153 matrix.sps:69.13-69.14: error: MATRIX: Expression for TO must evaluate to
3154 scalar, not a 0×0 matrix.
3155 69 | LOOP i=5 TO {}.
3158 matrix.sps:72.18-72.19: error: MATRIX: Expression for BY must evaluate to
3159 scalar, not a 0×0 matrix.
3160 72 | LOOP i=5 TO 8 BY {}.
3163 matrix.sps:75.9-75.10: error: MATRIX: Expression for LOOP IF must evaluate to
3164 scalar, not a 0×0 matrix.
3168 matrix.sps:79.13-79.14: error: MATRIX: Expression for END LOOP IF must evaluate
3169 to scalar, not a 0×0 matrix.
3170 79 | END LOOP IF {}.
3173 matrix.sps:81.8-81.12: error: MATRIX: Expression for LOOP is outside the
3175 81 | LOOP i=1e100 to 1e200.
3180 AT_SETUP([MATRIX - BREAK outside LOOP])
3181 AT_DATA([matrix.sps], [dnl
3186 AT_CHECK([pspp matrix.sps], [1], [dnl
3187 matrix.sps:2.1-2.5: error: BREAK: BREAK not inside LOOP.
3193 AT_SETUP([MATRIX - READ])
3194 AT_DATA([matrix.txt], [dnl
3220 AT_DATA([matrix2.txt], [dnl
3226 AT_DATA([matrix3.txt], [dnl
3233 AT_DATA([matrix.sps], [dnl
3235 READ x/FILE='matrix.txt'/SIZE=4/FIELD=1 TO 1.
3237 READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
3239 READ x/SIZE={2,4}/FIELD=1 TO 80.
3241 READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
3243 READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
3246 READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
3248 READ x/SIZE={2,3}/FIELD=1 TO 20/FORMAT=DOLLAR.
3250 READ x/SIZE={2,4}/FIELD=1 TO 20/FORMAT=DOLLAR5.1.
3252 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4PCT'.
3254 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4A'.
3258 LOOP IF NOT EOF('matrix2.txt').
3259 READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
3264 COMPUTE m = MAKE(5, 5, 0).
3266 READ count /FILE='matrix3.txt' /FIELD=1 TO 1 /SIZE=1.
3267 READ m(i, 1:count) /FIELD=3 TO 100 /REREAD.
3272 AT_CHECK([pspp matrix.sps], [0], [dnl
3331 AT_SETUP([MATRIX - READ - negative])
3332 AT_DATA([matrix.sps], [dnl
3339 READ x/FIELD=1 TO !.
3340 READ x/FIELD=1 TO 0.
3341 READ x/FIELD=1 TO 10 BY !.
3342 READ x/FIELD=1 TO 10 BY 6.
3346 READ x/FORMAT=F8.2/FORMAT=F8.2.
3347 READ x/FORMAT='5XYZZY'.
3348 READ x/FORMAT=XYZZY.
3351 READ x/FIELD=1 TO 10.
3352 READ x/FIELD=1 TO 10/SIZE={1,2}.
3353 READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3354 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3355 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3356 READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3357 READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3358 READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3360 READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3361 READ x/FIELD=1 TO 10/SIZE={1,3}/FILE='matrix.txt'/MODE=SYMMETRIC.
3362 READ x/FIELD=1 TO 10/SIZE=2/FILE='matrix.txt'.
3365 AT_DATA([matrix.txt], [dnl
3369 AT_CHECK([pspp matrix.sps], [1], [dnl
3370 matrix.sps:2.6: error: READ: Syntax error expecting identifier.
3374 matrix.sps:3.13: error: READ: Syntax error expecting a file name or handle
3379 matrix.sps:4.17: error: READ: Syntax error expecting string.
3380 4 | READ x/ENCODING=!.
3383 matrix.sps:5.14: error: READ: Syntax error expecting positive integer for
3388 matrix.sps:6.16: error: READ: Syntax error expecting `TO'.
3389 6 | READ x/FIELD=1 !.
3392 matrix.sps:7.19: error: READ: Syntax error expecting positive integer for TO.
3393 7 | READ x/FIELD=1 TO !.
3396 matrix.sps:8.19: error: READ: Syntax error expecting positive integer for TO.
3397 8 | READ x/FIELD=1 TO 0.
3400 matrix.sps:9.25: error: READ: Syntax error expecting integer between 1 and 10
3402 9 | READ x/FIELD=1 TO 10 BY !.
3405 matrix.sps:10.14-10.25: error: READ: Field width 6 does not evenly divide
3407 10 | READ x/FIELD=1 TO 10 BY 6.
3410 matrix.sps:10.14-10.20: note: READ: This syntax designates the record width.
3411 10 | READ x/FIELD=1 TO 10 BY 6.
3414 matrix.sps:10.25: note: READ: This syntax specifies the field width.
3415 10 | READ x/FIELD=1 TO 10 BY 6.
3418 matrix.sps:11.13: error: READ: Syntax error expecting matrix expression.
3422 matrix.sps:12.13: error: READ: Syntax error expecting RECTANGULAR or SYMMETRIC.
3426 matrix.sps:13.15: error: READ: Syntax error expecting identifier.
3427 13 | READ x/FORMAT=!.
3430 matrix.sps:14.20-14.25: error: READ: Subcommand FORMAT may only be specified
3432 14 | READ x/FORMAT=F8.2/FORMAT=F8.2.
3435 matrix.sps:15.15-15.22: error: READ: Unknown format XYZZY.
3436 15 | READ x/FORMAT='5XYZZY'.
3439 matrix.sps:16.15-16.19: error: READ: Unknown format type `XYZZY'.
3440 16 | READ x/FORMAT=XYZZY.
3443 matrix.sps:17.8: error: READ: Syntax error expecting FILE, FIELD, MODE, REREAD,
3448 matrix.sps:18.1-18.7: error: READ: Required subcommand FIELD was not specified.
3452 matrix.sps:19: error: READ: SIZE is required for reading data into a full
3453 matrix (as opposed to a submatrix).
3455 matrix.sps:19.6: note: READ: This expression designates a full matrix.
3456 19 | READ x/FIELD=1 TO 10.
3459 matrix.sps:20.1-20.32: error: READ: Required subcommand FILE was not specified.
3460 20 | READ x/FIELD=1 TO 10/SIZE={1,2}.
3461 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3463 matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
3465 matrix.sps:21.57-21.61: note: READ: This syntax designates the number of
3467 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3470 matrix.sps:21.14-21.20: note: READ: This syntax designates the record width.
3471 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3474 matrix.sps:22: error: READ: This command specifies two different field widths.
3476 matrix.sps:22.62-22.63: note: READ: This syntax specifies field width 5.
3477 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3480 matrix.sps:22.25: note: READ: This syntax specifies field width 2.
3481 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3484 matrix.sps:23: error: READ: This command specifies two different field widths.
3486 matrix.sps:23.62-23.65: note: READ: This syntax specifies 2 repetitions.
3487 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3490 matrix.sps:23.14-23.20: note: READ: This syntax designates record width 10,
3491 which divided by 2 repetitions implies field width 5.
3492 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3495 matrix.sps:23.25: note: READ: This syntax specifies field width 2.
3496 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3499 matrix.sps:24.27-24.35: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3500 element vector, not a 2×2 matrix.
3501 24 | READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3504 matrix.sps:25.27-25.33: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3505 element vector, not a 1×3 matrix.
3506 25 | READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3509 matrix.sps:26.28-26.29: error: MATRIX: Matrix dimensions -1×1 specified on SIZE
3510 are outside valid range.
3511 26 | READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3514 matrix.sps:28: error: MATRIX: Dimensions specified on SIZE differ from
3515 dimensions of destination submatrix.
3517 matrix.sps:28.32-28.36: note: MATRIX: SIZE specifies dimensions 2×2.
3518 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3521 matrix.sps:28.6-28.11: note: MATRIX: Destination submatrix has dimensions 1×3.
3522 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3525 matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
3528 matrix.txt:1.1-1.5: warning: Error reading "xyzzy" as format F for matrix row
3529 1, column 1: Field contents are not numeric.
3531 matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
3532 1: Matrix data may not contain missing value.
3536 AT_SETUP([MATRIX - WRITE])
3537 AT_DATA([matrix.sps], [dnl
3539 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
3540 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
3541 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
3542 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
3543 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
3544 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
3545 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
3546 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
3547 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
3550 AT_CHECK([pspp matrix.sps])
3551 AT_CHECK([cat matrix.txt], [0], [dnl
3573 AT_SETUP([MATRIX - WRITE - negative])
3574 AT_DATA([matrix.sps], [dnl
3581 WRITE 1/FIELD=1 TO 0.
3582 WRITE 1/FIELD=1 TO 10 BY 20.
3583 WRITE 1/FIELD=1 TO 10 BY 6.
3584 WRITE 1/MODE=TRAPEZOIDAL.
3585 WRITE 1/FORMAT=F5/FORMAT=F5.
3586 WRITE 1/FORMAT='5ASDF'.
3587 WRITE 1/FORMAT=ASDF5.
3590 WRITE 1/FIELD=1 TO 10.
3591 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3592 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3593 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3594 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3595 WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3598 AT_CHECK([pspp matrix.sps], [1], [dnl
3599 matrix.sps:2.7: error: WRITE: Syntax error expecting matrix expression.
3603 matrix.sps:3.17: error: WRITE: Syntax error expecting a file name or handle
3605 3 | WRITE 1/OUTFILE=!.
3608 matrix.sps:4.18: error: WRITE: Syntax error expecting string.
3609 4 | WRITE 1/ENCODING=!.
3612 matrix.sps:5.15: error: WRITE: Syntax error expecting positive integer for
3614 5 | WRITE 1/FIELD=!.
3617 matrix.sps:6.17: error: WRITE: Syntax error expecting `TO'.
3618 6 | WRITE 1/FIELD=1 !.
3621 matrix.sps:7.20: error: WRITE: Syntax error expecting positive integer for TO.
3622 7 | WRITE 1/FIELD=1 TO 0.
3625 matrix.sps:8.26-8.27: error: WRITE: Syntax error expecting integer between 1
3627 8 | WRITE 1/FIELD=1 TO 10 BY 20.
3630 matrix.sps:9.15-9.26: error: WRITE: Field width 6 does not evenly divide record
3632 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3635 matrix.sps:9.15-9.21: note: WRITE: This syntax designates the record width.
3636 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3639 matrix.sps:9.26: note: WRITE: This syntax specifies the field width.
3640 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3643 matrix.sps:10.14-10.24: error: WRITE: Syntax error expecting RECTANGULAR or
3645 10 | WRITE 1/MODE=TRAPEZOIDAL.
3648 matrix.sps:11.19-11.24: error: WRITE: Subcommand FORMAT may only be specified
3650 11 | WRITE 1/FORMAT=F5/FORMAT=F5.
3653 matrix.sps:12.16-12.22: error: WRITE: Unknown format ASDF.
3654 12 | WRITE 1/FORMAT='5ASDF'.
3657 matrix.sps:13.16-13.20: error: WRITE: Unknown format type `ASDF'.
3658 13 | WRITE 1/FORMAT=ASDF5.
3661 matrix.sps:14.9: error: WRITE: Syntax error expecting OUTFILE, FIELD, MODE,
3666 matrix.sps:15.1-15.8: error: WRITE: Required subcommand FIELD was not
3671 matrix.sps:16.1-16.22: error: WRITE: Required subcommand OUTFILE was not
3673 16 | WRITE 1/FIELD=1 TO 10.
3674 | ^~~~~~~~~~~~~~~~~~~~~~
3676 matrix.sps:17.51-17.55: note: WRITE: This syntax designates the number of
3678 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3681 matrix.sps:17.15-17.21: note: WRITE: This syntax designates the record width.
3682 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3685 matrix.sps:18: error: WRITE: This command specifies two different field widths.
3687 matrix.sps:18.56-18.59: note: WRITE: This syntax specifies 5 repetitions.
3688 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3691 matrix.sps:18.15-18.21: note: WRITE: This syntax designates record width 10,
3692 which divided by 5 repetitions implies field width 2.
3693 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3696 matrix.sps:18.26: note: WRITE: This syntax specifies field width 5.
3697 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3700 matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
3701 requires a width between 6 and 40.
3703 matrix.sps:19.56: note: WRITE: This syntax specifies format E.
3704 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3707 matrix.sps:19.26: note: WRITE: This syntax specifies field width 5.
3708 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3711 matrix.sps:20.51-20.52: error: WRITE: Format A9 is too wide for 8-byte matrix
3713 20 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3716 matrix.sps:21.7-21.11: error: MATRIX: WRITE with MODE=TRIANGULAR requires a
3717 square matrix but the matrix to be written has dimensions 1×2.
3718 21 | WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3723 AT_SETUP([MATRIX - GET])
3724 AT_DATA([matrix.sps], [dnl
3725 DATA LIST LIST NOTABLE /a b c.
3726 MISSING VALUES a(1) b(5).
3735 GET x0 /NAMES=names0.
3737 PRINT names0/FORMAT=A8.
3741 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
3743 PRINT names1/FORMAT=A8.
3747 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
3749 PRINT names2/FORMAT=A8.
3753 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
3755 PRINT names3/FORMAT=A8.
3759 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
3761 PRINT names4/FORMAT=A8.
3764 SAVE OUTFILE='matrix.sav'.
3768 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
3770 PRINT names5/FORMAT=A8.
3774 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
3776 PRINT names6/FORMAT=A8.
3780 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
3782 PRINT names7/FORMAT=A8.
3785 AT_CHECK([pspp matrix.sps], [1], [dnl
3786 matrix.sps:11: error: MATRIX: Variable a in case 2 has user-missing value 1.
3788 matrix.sps:12.7-12.8: error: MATRIX: Uninitialized variable x0 used in
3798 matrix.sps:17: error: MATRIX: Variable c in case 4 is system-missing.
3800 matrix.sps:18.7-18.8: error: MATRIX: Uninitialized variable x1 used in
3818 matrix.sps:29: error: MATRIX: Variable c in case 4 is system-missing.
3820 matrix.sps:30.7-30.8: error: MATRIX: Uninitialized variable x3 used in
3840 matrix.sps:44: error: MATRIX: Variable c in case 4 is system-missing.
3842 matrix.sps:45.7-45.8: error: MATRIX: Uninitialized variable x5 used in
3875 AT_SETUP([MATRIX - GET - negative])
3876 AT_DATA([matrix.sps], [dnl
3877 DATA LIST LIST NOTABLE /a b c * d(a1).
3878 MISSING VALUES a(1) b(5).
3885 SAVE OUTFILE='matrix.sav'.
3897 GET x/VARIABLES=x TO !.
3899 GET x/VARIABLES=c TO a.
3909 AT_CHECK([pspp matrix.sps], [1], [dnl
3910 matrix.sps:12.5: error: GET: Syntax error expecting identifier.
3914 matrix.sps:13.17: error: GET: Syntax error expecting variable name.
3915 13 | GET x/VARIABLES=!.
3918 matrix.sps:14.12: error: GET: Syntax error expecting a file name or handle
3923 matrix.sps:15.16: error: GET: Syntax error expecting string.
3924 15 | GET x/ENCODING=!.
3927 matrix.sps:16.13: error: GET: Syntax error expecting identifier.
3931 matrix.sps:17.15: error: GET: Syntax error expecting ACCEPT or OMIT or a number
3933 17 | GET x/MISSING=!.
3936 matrix.sps:18.14: error: GET: Syntax error expecting OMIT or a number for
3938 18 | GET x/SYSMIS=!.
3941 matrix.sps:19.7: error: GET: Syntax error expecting FILE, VARIABLES, NAMES,
3946 matrix.sps:20.17: error: GET: Syntax error expecting variable name.
3947 20 | GET x/VARIABLES=!.
3950 matrix.sps:21.22: error: GET: Syntax error expecting variable name.
3951 21 | GET x/VARIABLES=x TO !.
3954 matrix.sps:22.17: error: MATRIX: x is not a variable name.
3955 22 | GET x/VARIABLES=x.
3958 matrix.sps:23.17-23.22: error: MATRIX: c TO a is not valid syntax since c
3959 precedes a in the dictionary.
3960 23 | GET x/VARIABLES=c TO a.
3963 matrix.sps:24.17: error: MATRIX: d is not a numeric variable.
3964 24 | GET x/VARIABLES=d.
3967 matrix.sps:25: error: MATRIX: Variable d is not numeric.
3969 matrix.sps:30: error: MATRIX: The GET command cannot read an empty active file.
3973 AT_SETUP([MATRIX - SAVE])
3974 AT_DATA([matrix.sps], [dnl
3976 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3977 SAVE {7,8,9}/VARIABLES=a b c d.
3979 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3980 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3982 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3983 SAVE {4,'xyzw',6}/STRINGS=a, b.
3986 AT_CHECK([pspp matrix.sps])
3987 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3993 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3998 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
4005 AT_SETUP([MATRIX - SAVE - inline])
4006 AT_DATA([matrix.sps], [dnl
4008 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
4009 SAVE {7,8,9}/VARIABLES=a b c d.
4014 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
4015 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
4020 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
4021 SAVE {4,'xyzw',6}/STRINGS=a, b.
4025 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4044 AT_SETUP([MATRIX - SAVE - negative])
4045 AT_DATA([matrix.sps], [dnl
4053 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
4054 SAVE 1/OUTFILE='matrix2.sav'.
4055 SAVE {1,2}/OUTFILE='matrix2.sav'.
4056 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
4057 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
4058 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
4061 AT_CHECK([pspp matrix.sps], [1], [dnl
4062 matrix.sps:2.6: error: SAVE: Syntax error expecting matrix expression.
4066 matrix.sps:3.16: error: SAVE: Syntax error expecting a file name or handle
4068 3 | SAVE 1/OUTFILE=!.
4071 matrix.sps:4.18: error: SAVE: Syntax error expecting variable name.
4072 4 | SAVE 1/VARIABLES=!.
4075 matrix.sps:5.14: error: SAVE: Syntax error expecting matrix expression.
4079 matrix.sps:6.8: error: SAVE: Syntax error expecting OUTFILE, VARIABLES, NAMES,
4084 matrix.sps:7.1-7.7: error: SAVE: Required subcommand OUTFILE was not specified.
4088 matrix.sps:8.35-8.39: warning: SAVE: Ignoring NAMES because VARIABLES was also
4090 8 | SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
4093 matrix.sps:10: error: MATRIX: Cannot save 1×2 matrix to `matrix2.sav' because
4094 the first SAVE to `matrix2.sav' in this matrix program wrote a 1-column matrix.
4096 matrix.sps:9: error: MATRIX: This is the location of the first SAVE to
4099 error: Duplicate variable name a in SAVE statement.
4101 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
4103 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
4108 AT_SETUP([MATRIX - MGET])
4109 AT_DATA([matrix.sps], [dnl
4111 VARIABLES=ROWTYPE_ var01 TO var08.
4113 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4114 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4115 N 92 92 92 92 92 92 92 92
4119 CORR .36 .31 -.14 1.00
4120 CORR .27 .16 -.12 .22 1.00
4121 CORR .33 .15 -.17 .24 .21 1.00
4122 CORR .50 .29 -.20 .32 .12 .38 1.00
4123 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
4128 PRINT MN/FORMAT=F5.1.
4129 PRINT SD/FORMAT=F5.1.
4130 PRINT NC/FORMAT=F5.0.
4131 PRINT CR/FORMAT=F5.2.
4134 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4135 Table: Matrix Variables Created by MGET
4144 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4147 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4150 92 92 92 92 92 92 92 92
4153 1.00 .18 -.22 .36 .27 .33 .50 .17
4154 .18 1.00 -.17 .31 .16 .15 .29 .29
4155 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
4156 .36 .31 -.14 1.00 .22 .24 .32 .20
4157 .27 .16 -.12 .22 1.00 .21 .12 .27
4158 .33 .15 -.17 .24 .21 1.00 .38 .20
4159 .50 .29 -.20 .32 .12 .38 1.00 .04
4160 .17 .29 -.05 .20 .27 .20 .04 1.00
4164 AT_SETUP([MATRIX - MGET with split variables])
4165 AT_DATA([matrix.sps], [dnl
4167 variables = s1 s2 rowtype_ var01 var02 var03
4171 8 0 mean 21.4 5.0 72.9
4176 8 0 corr -.16 -.22 1
4177 8 1 mean 11.4 1.0 52.9
4187 PRINT MNS1/FORMAT=F5.1.
4188 PRINT SDS1/FORMAT=F5.1.
4189 PRINT NCS1/FORMAT=F5.0.
4190 PRINT CRS1/FORMAT=F5.2.
4191 PRINT MNS2/FORMAT=F5.1.
4192 PRINT SDS2/FORMAT=F5.1.
4193 PRINT NCS2/FORMAT=F5.0.
4194 PRINT CRS2/FORMAT=F5.2.
4197 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
4198 Table: Matrix Variables Created by MGET
4199 ,Split Values,,Dimensions,
4240 AT_SETUP([MATRIX - MGET with factor variables])
4241 AT_DATA([matrix.sps], [dnl
4243 VARIABLES=ROWTYPE_ f1 var01 TO var04
4257 FORMATS var01 TO var04(F5.1).
4258 SAVE OUTFILE='matrix.sav'.
4260 AT_DATA([matrix2.sps], [dnl
4262 MGET FILE='matrix.sav'.
4263 PRINT MNF1/FORMAT=F2.0.
4264 PRINT SDF1/FORMAT=F2.0.
4265 PRINT NCF1/FORMAT=F2.0.
4266 PRINT MNF2/FORMAT=F2.0.
4267 PRINT SDF2/FORMAT=F2.0.
4268 PRINT NCF2/FORMAT=F2.0.
4269 PRINT CR/FORMAT=F3.1.
4272 AT_CHECK([pspp matrix.sps])
4273 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4274 Table: Matrix Variables Created by MGET
4275 ,Factors,Dimensions,
4311 AT_SETUP([MATRIX - MGET with factor and split variables])
4312 AT_DATA([matrix.sps], [dnl
4314 variables = s f rowtype_ var01 var02 var03
4319 8 0 mean 21.4 5.0 72.9
4324 8 . corr -.16 -.22 1
4325 9 1 mean 11.4 1.0 52.9
4335 PRINT MNF1S1/FORMAT=F5.1.
4336 PRINT SDF1S1/FORMAT=F5.1.
4337 PRINT NCF1S1/FORMAT=F5.0.
4338 PRINT CRS1/FORMAT=F5.2.
4339 PRINT MNF1S2/FORMAT=F5.1.
4340 PRINT SDF1S2/FORMAT=F5.1.
4341 PRINT NCF1S2/FORMAT=F5.0.
4342 PRINT CRS2/FORMAT=F5.2.
4345 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4346 Table: Matrix Variables Created by MGET
4347 ,Split Values,Factors,Dimensions,
4388 AT_SETUP([MATRIX - MGET with TYPE])
4389 AT_DATA([matrix.sps], [dnl
4391 VARIABLES=ROWTYPE_ f1 var01 TO var04
4405 FORMATS var01 TO var04(F5.1).
4406 SAVE OUTFILE='matrix.sav'.
4408 AT_DATA([matrix2.sps], [dnl
4410 MGET/FILE='matrix.sav'/TYPE=CORR.
4411 PRINT CR/FORMAT=F3.1.
4414 AT_CHECK([pspp matrix.sps])
4415 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4416 Table: Matrix Variables Created by MGET
4417 ,Factors,Dimensions,
4429 AT_SETUP([MATRIX - MGET - negative - parsing])
4430 AT_DATA([matrix.sps], [dnl
4439 AT_CHECK([pspp matrix.sps], [1], [dnl
4440 matrix.sps:2.6: error: MGET: Syntax error expecting FILE or TYPE.
4444 matrix.sps:3.11: error: MGET: Syntax error expecting a file name or handle
4449 matrix.sps:4.15: error: MGET: Syntax error expecting string.
4450 4 | MGET ENCODING=!.
4453 matrix.sps:5.11: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4458 matrix.sps:6.16: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4460 6 | MGET TYPE=CORR !.
4465 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
4466 AT_DATA([matrix.sps], [dnl
4467 DATA LIST LIST NOTABLE /x.
4476 AT_CHECK([pspp matrix.sps], [1], [dnl
4477 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
4479 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
4483 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
4484 AT_DATA([matrix.sps], [dnl
4485 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
4494 AT_CHECK([pspp matrix.sps], [1], [dnl
4495 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
4496 byte string, but it has width 7.
4498 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
4499 byte string, but it has width 0.
4503 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
4504 AT_DATA([matrix.sps], [dnl
4505 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
4514 AT_CHECK([pspp matrix.sps], [1], [dnl
4515 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
4520 AT_SETUP([MATRIX - MGET - no continuous variables])
4521 AT_DATA([matrix.sps], [dnl
4522 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
4531 AT_CHECK([pspp matrix.sps], [1], [dnl
4532 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
4536 AT_SETUP([MATRIX - MGET - unexpected string variables])
4537 AT_DATA([matrix.sps], [dnl
4538 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
4547 AT_CHECK([pspp matrix.sps], [1], [dnl
4548 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
4553 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
4554 AT_DATA([matrix.sps], [dnl
4555 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4564 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4565 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
4569 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
4570 AT_DATA([matrix.sps], [dnl
4571 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4581 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4582 Table: Matrix Variables Created by MGET
4587 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
4591 AT_SETUP([MATRIX - MGET - missing values in input])
4592 AT_DATA([matrix.sps], [dnl
4593 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
4601 PRINT ncs1/FORMAT=F5.
4602 PRINT ncs2/FORMAT=F5.
4605 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4606 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
4608 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
4610 Table: Matrix Variables Created by MGET
4611 ,Split Values,Dimensions,
4624 AT_SETUP([MATRIX - MSAVE])
4625 AT_DATA([matrix.sps], [dnl
4627 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
4628 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
4629 MSAVE {11, 12}/TYPE=MEAN.
4630 MSAVE {13, 14}/TYPE=STDDEV.
4631 MSAVE {15, 16}/TYPE=N.
4632 MSAVE {17, 18}/TYPE=COUNT.
4637 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4639 ROWTYPE_,VARNAME_,X,Y
4652 AT_SETUP([MATRIX - MSAVE with factor variables])
4653 AT_DATA([matrix.sps], [dnl
4655 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
4656 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4657 MSAVE {11, 12}/TYPE=MEAN.
4658 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
4659 MSAVE {15, 16}/TYPE=N.
4660 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
4666 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
4671 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4673 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
4674 CORR,1.00,1.00,COL1,1.00,2.00
4675 CORR,1.00,1.00,COL2,3.00,4.00
4676 COV,1.00,1.00,COL1,5.00,6.00
4677 COV,1.00,1.00,COL2,7.00,8.00
4678 COV,1.00,1.00,,9.00,10.00
4679 MEAN,1.00,1.00,,11.00,12.00
4680 STDDEV,2.00,1.00,,13.00,14.00
4681 N,2.00,1.00,,15.00,16.00
4682 COUNT,1.00,2.00,,17.00,18.00
4685 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
4686 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
4687 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
4691 AT_SETUP([MATRIX - MSAVE with split variables])
4692 AT_DATA([matrix.sps], [dnl
4694 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
4695 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4696 MSAVE {11, 12}/TYPE=MEAN.
4697 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
4698 MSAVE {15, 16}/TYPE=N.
4699 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
4705 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
4710 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4712 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
4713 1.00,1.00,CORR,COL1,1.00,2.00
4714 1.00,1.00,CORR,COL2,3.00,4.00
4715 1.00,1.00,COV,COL1,5.00,6.00
4716 1.00,1.00,COV,COL2,7.00,8.00
4717 1.00,1.00,COV,,9.00,10.00
4718 1.00,1.00,MEAN,,11.00,12.00
4719 2.00,1.00,STDDEV,,13.00,14.00
4720 2.00,1.00,N,,15.00,16.00
4721 1.00,2.00,COUNT,,17.00,18.00
4724 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
4725 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
4726 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
4730 AT_SETUP([MATRIX - MSAVE with factor and split variables])
4731 AT_DATA([matrix.sps], [dnl
4733 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
4734 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4735 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
4736 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
4737 MSAVE {15, 16}/TYPE=N.
4738 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
4743 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4745 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
4746 1.00,CORR,1.00,COL1,1.00,2.00
4747 1.00,CORR,1.00,COL2,3.00,4.00
4748 1.00,COV,1.00,COL1,5.00,6.00
4749 1.00,COV,1.00,COL2,7.00,8.00
4750 1.00,COV,1.00,,9.00,10.00
4751 1.00,MEAN,2.00,,11.00,12.00
4752 2.00,STDDEV,1.00,,13.00,14.00
4753 2.00,N,1.00,,15.00,16.00
4754 2.00,COUNT,2.00,,17.00,18.00
4758 AT_SETUP([MATRIX - MSAVE - negative])
4759 AT_DATA([matrix.sps], [dnl
4764 MSAVE 1/VARIABLES=!.
4771 MSAVE 1/TYPE=COV/FNAMES=x.
4772 MSAVE 1/TYPE=COV/SNAMES=x.
4775 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4779 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4780 MSAVE 1/TYPE=COV/VARIABLES=x.
4781 MSAVE 1/TYPE=COV/FNAMES=x.
4782 MSAVE 1/TYPE=COV/SNAMES=x.
4786 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4787 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4788 MSAVE {1,2;3}/TYPE=COV.
4789 MSAVE 0/TYPE=COV/FACTOR={1,2}.
4790 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4794 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4798 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
4802 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4806 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4810 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4811 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4812 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4813 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4814 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4815 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4818 AT_CHECK([pspp matrix.sps], [1], [dnl
4819 matrix.sps:2.7: error: MSAVE: Syntax error expecting matrix expression.
4823 matrix.sps:3.14: error: MSAVE: Syntax error expecting COV, CORR, MEAN, STDDEV,
4828 matrix.sps:4.17: error: MSAVE: Syntax error expecting a file name or handle
4830 4 | MSAVE 1/OUTFILE=!.
4833 matrix.sps:5.19: error: MSAVE: Syntax error expecting variable name.
4834 5 | MSAVE 1/VARIABLES=!.
4837 matrix.sps:6.16: error: MSAVE: Syntax error expecting variable name.
4838 6 | MSAVE 1/FNAMES=!.
4841 matrix.sps:7.16: error: MSAVE: Syntax error expecting variable name.
4842 7 | MSAVE 1/SNAMES=!.
4845 matrix.sps:8.15: error: MSAVE: Syntax error expecting matrix expression.
4846 8 | MSAVE 1/SPLIT=!.
4849 matrix.sps:9.16: error: MSAVE: Syntax error expecting matrix expression.
4850 9 | MSAVE 1/FACTOR=!.
4853 matrix.sps:10.9: error: MSAVE: Syntax error expecting TYPE, OUTFILE, VARIABLES,
4854 FNAMES, SNAMES, SPLIT, or FACTOR.
4858 matrix.sps:11.1-11.8: error: MSAVE: Required subcommand TYPE was not specified.
4862 matrix.sps:12.25: error: MSAVE: FNAMES requires FACTOR.
4863 12 | MSAVE 1/TYPE=COV/FNAMES=x.
4866 matrix.sps:13.25: error: MSAVE: SNAMES requires SPLIT.
4867 13 | MSAVE 1/TYPE=COV/SNAMES=x.
4870 matrix.sps:14.1-14.17: error: MSAVE: Required subcommand OUTFILE was not
4872 14 | MSAVE 1/TYPE=COV.
4875 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
4876 within a single MATRIX command.
4878 matrix.sps:16.26-16.37: note: MSAVE: This is the OUTFILE on the first MSAVE
4880 16 | MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4883 matrix.sps:20.26-20.38: note: MSAVE: This is the OUTFILE on a later MSAVE
4885 20 | MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4888 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables on each
4889 MSAVE within a given MATRIX.
4891 matrix.sps:19.16: error: MSAVE: This is the specification of VARIABLES on the
4896 matrix.sps:21.28: error: MSAVE: This is a different specification of VARIABLES
4898 21 | MSAVE 1/TYPE=COV/VARIABLES=x.
4901 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables on each
4902 MSAVE within a given MATRIX.
4904 matrix.sps:17.23: error: MSAVE: This is the specification of FNAMES on the
4906 17 | /FACTOR=1 /FNAMES=y
4909 matrix.sps:22.25: error: MSAVE: This is a different specification of FNAMES on
4911 22 | MSAVE 1/TYPE=COV/FNAMES=x.
4914 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables on each
4915 MSAVE within a given MATRIX.
4917 matrix.sps:18.22: error: MSAVE: This is the specification of SNAMES on the
4919 18 | /SPLIT=2 /SNAMES=z
4922 matrix.sps:23.25: error: MSAVE: This is a different specification of SNAMES on
4924 23 | MSAVE 1/TYPE=COV/SNAMES=x.
4927 matrix.sps:28.7-28.11: error: MATRIX: Matrix on MSAVE has 2 columns but there
4929 28 | MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/
4933 matrix.sps:29.7-29.13: error: MATRIX: This expression tries to vertically join
4934 matrices with differing numbers of columns.
4935 29 | MSAVE {1,2;3}/TYPE=COV.
4938 matrix.sps:29.8-29.10: note: MATRIX: This operand is a 1×2 matrix.
4939 29 | MSAVE {1,2;3}/TYPE=COV.
4942 matrix.sps:29.12: note: MATRIX: This operand is a 1×1 matrix.
4943 29 | MSAVE {1,2;3}/TYPE=COV.
4946 matrix.sps:30.25-30.29: error: MATRIX: There are 1 factor variables, but 2
4947 factor values were supplied.
4948 30 | MSAVE 0/TYPE=COV/FACTOR={1,2}.
4951 matrix.sps:31.33-31.37: error: MATRIX: There are 1 split variables, but 2 split
4952 values were supplied.
4953 31 | MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4956 matrix.sps:35.49: error: MSAVE: Variable x appears twice in variable list.
4957 35 | MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4960 matrix.sps:39.56: error: MATRIX: Duplicate or invalid FACTOR variable name x.
4961 39 | MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/
4965 matrix.sps:43.50: error: MATRIX: Duplicate or invalid variable name x.
4966 43 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4969 matrix.sps:47.50: error: MATRIX: Duplicate or invalid variable name x.
4970 47 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4973 matrix.sps:51.47-51.54: error: MSAVE: Variable name VARNAME_ is reserved.
4974 51 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4977 matrix.sps:52.47-52.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4978 52 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4981 matrix.sps:53.47-53.54: error: MSAVE: Variable name VARNAME_ is reserved.
4982 53 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4985 matrix.sps:54.47-54.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4986 54 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4989 matrix.sps:55.50-55.57: error: MSAVE: Variable name VARNAME_ is reserved.
4990 55 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4993 matrix.sps:56.50-56.57: error: MSAVE: Variable name ROWTYPE_ is reserved.
4994 56 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4999 AT_SETUP([MATRIX - DISPLAY])
5000 AT_DATA([matrix-template.sps], [dnl
5009 for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
5010 sed "s/command/$command/" < matrix-template.sps > matrix.sps
5011 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
5012 Table: Matrix Variables
5013 ,Dimension,,Size (kB)
5023 AT_SETUP([MATRIX - DISPLAY - negative])
5024 AT_DATA([matrix.sps], [dnl
5029 AT_CHECK([pspp matrix.sps], [1], [dnl
5030 matrix.sps:2.9: error: DISPLAY: Syntax error expecting DICTIONARY or STATUS.
5036 AT_SETUP([MATRIX - RELEASE])
5037 AT_DATA([matrix.sps], [dnl
5045 AT_CHECK([pspp matrix.sps], [1], [dnl
5049 matrix.sps:5.7: error: MATRIX: Uninitialized variable x used in expression.
5055 AT_SETUP([MATRIX - RELEASE - negative])
5056 AT_DATA([matrix.sps], [dnl
5069 AT_CHECK([pspp matrix.sps], [1], [dnl
5070 matrix.sps:2.9: error: RELEASE: Syntax error expecting end of command.
5074 matrix.sps:3.9: error: RELEASE: Syntax error expecting variable name.
5078 matrix.sps:5.12: error: RELEASE: Syntax error expecting end of command.
5082 matrix.sps:7.11: error: RELEASE: Syntax error expecting end of command.