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 - DO IF])
2860 AT_DATA([matrix.sps], [dnl
2888 AT_CHECK([pspp matrix.sps], [1], [dnl
2895 matrix.sps:20.7-20.12: error: MATRIX: Expression for DO IF must evaluate to
2896 scalar, not a 1×2 matrix.
2900 matrix.sps:24.9-24.10: error: MATRIX: Expression for ELSE IF must evaluate to
2901 scalar, not a 0×0 matrix.
2907 AT_SETUP([MATRIX - unbounded LOOP])
2908 AT_DATA([matrix.sps], [dnl
2910 * Truly unbounded loop.
2920 * Unbounded loop terminates with BREAK.
2935 AT_CHECK([pspp matrix.sps], [0], [dnl
2940 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2941 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2948 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2953 AT_SETUP([MATRIX - indexed or conditional LOOP])
2954 AT_DATA([matrix.sps], [dnl
2956 * Indexed loop terminates based on index.
2964 * Indexed loop terminates based on MXLOOPS.
2972 * Indexed loop terminates with BREAK.
2983 * Indexed loop terminates with top IF.
2985 LOOP x=1 TO 50 IF NCOL(y) < 15.
2991 * Indexed loop terminates with bottom IF.
2995 END LOOP IF NCOL(y) >= 22.
3012 LOOP i=1 TO NROW(indexing).
3014 LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
3017 PRINT {indexing(i, :), y}.
3026 LOOP i=5 TO 8 BY {}.
3035 LOOP i=1e100 to 1e200.
3039 AT_CHECK([pspp matrix.sps], [1], [dnl
3044 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3051 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3052 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
3059 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3066 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3072 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3076 1 10 1 1 2 3 4 5 6 7 8 9 10
3086 10 1 -1 10 9 8 7 6 5 4 3 2 1
3096 matrix.sps:66.8-66.9: error: MATRIX: Expression for LOOP must evaluate to
3097 scalar, not a 0×0 matrix.
3098 66 | LOOP i={} TO 5.
3101 matrix.sps:69.13-69.14: error: MATRIX: Expression for TO must evaluate to
3102 scalar, not a 0×0 matrix.
3103 69 | LOOP i=5 TO {}.
3106 matrix.sps:72.18-72.19: error: MATRIX: Expression for BY must evaluate to
3107 scalar, not a 0×0 matrix.
3108 72 | LOOP i=5 TO 8 BY {}.
3111 matrix.sps:75.9-75.10: error: MATRIX: Expression for LOOP IF must evaluate to
3112 scalar, not a 0×0 matrix.
3116 matrix.sps:79.13-79.14: error: MATRIX: Expression for END LOOP IF must evaluate
3117 to scalar, not a 0×0 matrix.
3118 79 | END LOOP IF {}.
3121 matrix.sps:81.8-81.12: error: MATRIX: Expression for LOOP is outside the
3123 81 | LOOP i=1e100 to 1e200.
3128 AT_SETUP([MATRIX - BREAK outside LOOP])
3129 AT_DATA([matrix.sps], [dnl
3134 AT_CHECK([pspp matrix.sps], [1], [dnl
3135 matrix.sps:2.1-2.5: error: BREAK: BREAK not inside LOOP.
3141 AT_SETUP([MATRIX - READ])
3142 AT_DATA([matrix.txt], [dnl
3168 AT_DATA([matrix2.txt], [dnl
3174 AT_DATA([matrix3.txt], [dnl
3181 AT_DATA([matrix.sps], [dnl
3183 READ x/FILE='matrix.txt'/SIZE=4/FIELD=1 TO 1.
3185 READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
3187 READ x/SIZE={2,4}/FIELD=1 TO 80.
3189 READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
3191 READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
3194 READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
3196 READ x/SIZE={2,3}/FIELD=1 TO 20/FORMAT=DOLLAR.
3198 READ x/SIZE={2,4}/FIELD=1 TO 20/FORMAT=DOLLAR5.1.
3200 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4PCT'.
3202 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4A'.
3206 LOOP IF NOT EOF('matrix2.txt').
3207 READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
3212 COMPUTE m = MAKE(5, 5, 0).
3214 READ count /FILE='matrix3.txt' /FIELD=1 TO 1 /SIZE=1.
3215 READ m(i, 1:count) /FIELD=3 TO 100 /REREAD.
3220 AT_CHECK([pspp matrix.sps], [0], [dnl
3279 AT_SETUP([MATRIX - READ - negative])
3280 AT_DATA([matrix.sps], [dnl
3287 READ x/FIELD=1 TO !.
3288 READ x/FIELD=1 TO 0.
3289 READ x/FIELD=1 TO 10 BY !.
3290 READ x/FIELD=1 TO 10 BY 6.
3294 READ x/FORMAT=F8.2/FORMAT=F8.2.
3295 READ x/FORMAT='5XYZZY'.
3296 READ x/FORMAT=XYZZY.
3299 READ x/FIELD=1 TO 10.
3300 READ x/FIELD=1 TO 10/SIZE={1,2}.
3301 READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3302 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3303 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3304 READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3305 READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3306 READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3308 READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3309 READ x/FIELD=1 TO 10/SIZE={1,3}/FILE='matrix.txt'/MODE=SYMMETRIC.
3310 READ x/FIELD=1 TO 10/SIZE=2/FILE='matrix.txt'.
3313 AT_DATA([matrix.txt], [dnl
3317 AT_CHECK([pspp matrix.sps], [1], [dnl
3318 matrix.sps:2.6: error: READ: Syntax error expecting identifier.
3322 matrix.sps:3.13: error: READ: Syntax error expecting a file name or handle
3327 matrix.sps:4.17: error: READ: Syntax error expecting string.
3328 4 | READ x/ENCODING=!.
3331 matrix.sps:5.14: error: READ: Syntax error expecting positive integer for
3336 matrix.sps:6.16: error: READ: Syntax error expecting `TO'.
3337 6 | READ x/FIELD=1 !.
3340 matrix.sps:7.19: error: READ: Syntax error expecting positive integer for TO.
3341 7 | READ x/FIELD=1 TO !.
3344 matrix.sps:8.19: error: READ: Syntax error expecting positive integer for TO.
3345 8 | READ x/FIELD=1 TO 0.
3348 matrix.sps:9.25: error: READ: Syntax error expecting integer between 1 and 10
3350 9 | READ x/FIELD=1 TO 10 BY !.
3353 matrix.sps:10.14-10.25: error: READ: Field width 6 does not evenly divide
3355 10 | READ x/FIELD=1 TO 10 BY 6.
3358 matrix.sps:10.14-10.20: note: READ: This syntax designates the record width.
3359 10 | READ x/FIELD=1 TO 10 BY 6.
3362 matrix.sps:10.25: note: READ: This syntax specifies the field width.
3363 10 | READ x/FIELD=1 TO 10 BY 6.
3366 matrix.sps:11.13: error: READ: Syntax error expecting matrix expression.
3370 matrix.sps:12.13: error: READ: Syntax error expecting RECTANGULAR or SYMMETRIC.
3374 matrix.sps:13.15: error: READ: Syntax error expecting identifier.
3375 13 | READ x/FORMAT=!.
3378 matrix.sps:14.20-14.25: error: READ: Subcommand FORMAT may only be specified
3380 14 | READ x/FORMAT=F8.2/FORMAT=F8.2.
3383 matrix.sps:15.15-15.22: error: READ: Unknown format XYZZY.
3384 15 | READ x/FORMAT='5XYZZY'.
3387 matrix.sps:16.15-16.19: error: READ: Unknown format type `XYZZY'.
3388 16 | READ x/FORMAT=XYZZY.
3391 matrix.sps:17.8: error: READ: Syntax error expecting FILE, FIELD, MODE, REREAD,
3396 matrix.sps:18.1-18.7: error: READ: Required subcommand FIELD was not specified.
3400 matrix.sps:19: error: READ: SIZE is required for reading data into a full
3401 matrix (as opposed to a submatrix).
3403 matrix.sps:19.6: note: READ: This expression designates a full matrix.
3404 19 | READ x/FIELD=1 TO 10.
3407 matrix.sps:20.1-20.32: error: READ: Required subcommand FILE was not specified.
3408 20 | READ x/FIELD=1 TO 10/SIZE={1,2}.
3409 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3411 matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
3413 matrix.sps:21.57-21.61: note: READ: This syntax designates the number of
3415 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3418 matrix.sps:21.14-21.20: note: READ: This syntax designates the record width.
3419 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3422 matrix.sps:22: error: READ: This command specifies two different field widths.
3424 matrix.sps:22.62-22.63: note: READ: This syntax specifies field width 5.
3425 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3428 matrix.sps:22.25: note: READ: This syntax specifies field width 2.
3429 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3432 matrix.sps:23: error: READ: This command specifies two different field widths.
3434 matrix.sps:23.62-23.65: note: READ: This syntax specifies 2 repetitions.
3435 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3438 matrix.sps:23.14-23.20: note: READ: This syntax designates record width 10,
3439 which divided by 2 repetitions implies field width 5.
3440 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3443 matrix.sps:23.25: note: READ: This syntax specifies field width 2.
3444 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3447 matrix.sps:24.27-24.35: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3448 element vector, not a 2×2 matrix.
3449 24 | READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3452 matrix.sps:25.27-25.33: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3453 element vector, not a 1×3 matrix.
3454 25 | READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3457 matrix.sps:26.28-26.29: error: MATRIX: Matrix dimensions -1×1 specified on SIZE
3458 are outside valid range.
3459 26 | READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3462 matrix.sps:28: error: MATRIX: Dimensions specified on SIZE differ from
3463 dimensions of destination submatrix.
3465 matrix.sps:28.32-28.36: note: MATRIX: SIZE specifies dimensions 2×2.
3466 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3469 matrix.sps:28.6-28.11: note: MATRIX: Destination submatrix has dimensions 1×3.
3470 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3473 matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
3476 matrix.txt:1.1-1.5: warning: Error reading "xyzzy" as format F for matrix row
3477 1, column 1: Field contents are not numeric.
3479 matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
3480 1: Matrix data may not contain missing value.
3484 AT_SETUP([MATRIX - WRITE])
3485 AT_DATA([matrix.sps], [dnl
3487 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
3488 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
3489 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
3490 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
3491 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
3492 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
3493 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
3494 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
3495 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
3498 AT_CHECK([pspp matrix.sps])
3499 AT_CHECK([cat matrix.txt], [0], [dnl
3521 AT_SETUP([MATRIX - WRITE - negative])
3522 AT_DATA([matrix.sps], [dnl
3529 WRITE 1/FIELD=1 TO 0.
3530 WRITE 1/FIELD=1 TO 10 BY 20.
3531 WRITE 1/FIELD=1 TO 10 BY 6.
3532 WRITE 1/MODE=TRAPEZOIDAL.
3533 WRITE 1/FORMAT=F5/FORMAT=F5.
3534 WRITE 1/FORMAT='5ASDF'.
3535 WRITE 1/FORMAT=ASDF5.
3538 WRITE 1/FIELD=1 TO 10.
3539 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3540 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3541 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3542 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3543 WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3546 AT_CHECK([pspp matrix.sps], [1], [dnl
3547 matrix.sps:2.7: error: WRITE: Syntax error expecting matrix expression.
3551 matrix.sps:3.17: error: WRITE: Syntax error expecting a file name or handle
3553 3 | WRITE 1/OUTFILE=!.
3556 matrix.sps:4.18: error: WRITE: Syntax error expecting string.
3557 4 | WRITE 1/ENCODING=!.
3560 matrix.sps:5.15: error: WRITE: Syntax error expecting positive integer for
3562 5 | WRITE 1/FIELD=!.
3565 matrix.sps:6.17: error: WRITE: Syntax error expecting `TO'.
3566 6 | WRITE 1/FIELD=1 !.
3569 matrix.sps:7.20: error: WRITE: Syntax error expecting positive integer for TO.
3570 7 | WRITE 1/FIELD=1 TO 0.
3573 matrix.sps:8.26-8.27: error: WRITE: Syntax error expecting integer between 1
3575 8 | WRITE 1/FIELD=1 TO 10 BY 20.
3578 matrix.sps:9.15-9.26: error: WRITE: Field width 6 does not evenly divide record
3580 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3583 matrix.sps:9.15-9.21: note: WRITE: This syntax designates the record width.
3584 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3587 matrix.sps:9.26: note: WRITE: This syntax specifies the field width.
3588 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3591 matrix.sps:10.14-10.24: error: WRITE: Syntax error expecting RECTANGULAR or
3593 10 | WRITE 1/MODE=TRAPEZOIDAL.
3596 matrix.sps:11.19-11.24: error: WRITE: Subcommand FORMAT may only be specified
3598 11 | WRITE 1/FORMAT=F5/FORMAT=F5.
3601 matrix.sps:12.16-12.22: error: WRITE: Unknown format ASDF.
3602 12 | WRITE 1/FORMAT='5ASDF'.
3605 matrix.sps:13.16-13.20: error: WRITE: Unknown format type `ASDF'.
3606 13 | WRITE 1/FORMAT=ASDF5.
3609 matrix.sps:14.9: error: WRITE: Syntax error expecting OUTFILE, FIELD, MODE,
3614 matrix.sps:15.1-15.8: error: WRITE: Required subcommand FIELD was not
3619 matrix.sps:16.1-16.22: error: WRITE: Required subcommand OUTFILE was not
3621 16 | WRITE 1/FIELD=1 TO 10.
3622 | ^~~~~~~~~~~~~~~~~~~~~~
3624 matrix.sps:17.51-17.55: note: WRITE: This syntax designates the number of
3626 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3629 matrix.sps:17.15-17.21: note: WRITE: This syntax designates the record width.
3630 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3633 matrix.sps:18: error: WRITE: This command specifies two different field widths.
3635 matrix.sps:18.56-18.59: note: WRITE: This syntax specifies 5 repetitions.
3636 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3639 matrix.sps:18.15-18.21: note: WRITE: This syntax designates record width 10,
3640 which divided by 5 repetitions implies field width 2.
3641 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3644 matrix.sps:18.26: note: WRITE: This syntax specifies field width 5.
3645 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3648 matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
3649 requires a width between 6 and 40.
3651 matrix.sps:19.56: note: WRITE: This syntax specifies format E.
3652 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3655 matrix.sps:19.26: note: WRITE: This syntax specifies field width 5.
3656 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3659 matrix.sps:20.51-20.52: error: WRITE: Format A9 is too wide for 8-byte matrix
3661 20 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3664 matrix.sps:21.7-21.11: error: MATRIX: WRITE with MODE=TRIANGULAR requires a
3665 square matrix but the matrix to be written has dimensions 1×2.
3666 21 | WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3671 AT_SETUP([MATRIX - GET])
3672 AT_DATA([matrix.sps], [dnl
3673 DATA LIST LIST NOTABLE /a b c.
3674 MISSING VALUES a(1) b(5).
3683 GET x0 /NAMES=names0.
3685 PRINT names0/FORMAT=A8.
3689 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
3691 PRINT names1/FORMAT=A8.
3695 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
3697 PRINT names2/FORMAT=A8.
3701 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
3703 PRINT names3/FORMAT=A8.
3707 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
3709 PRINT names4/FORMAT=A8.
3712 SAVE OUTFILE='matrix.sav'.
3716 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
3718 PRINT names5/FORMAT=A8.
3722 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
3724 PRINT names6/FORMAT=A8.
3728 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
3730 PRINT names7/FORMAT=A8.
3733 AT_CHECK([pspp matrix.sps], [1], [dnl
3734 matrix.sps:11: error: MATRIX: Variable a in case 2 has user-missing value 1.
3736 matrix.sps:12.7-12.8: error: MATRIX: Uninitialized variable x0 used in
3746 matrix.sps:17: error: MATRIX: Variable c in case 4 is system-missing.
3748 matrix.sps:18.7-18.8: error: MATRIX: Uninitialized variable x1 used in
3766 matrix.sps:29: error: MATRIX: Variable c in case 4 is system-missing.
3768 matrix.sps:30.7-30.8: error: MATRIX: Uninitialized variable x3 used in
3788 matrix.sps:44: error: MATRIX: Variable c in case 4 is system-missing.
3790 matrix.sps:45.7-45.8: error: MATRIX: Uninitialized variable x5 used in
3823 AT_SETUP([MATRIX - GET - negative])
3824 AT_DATA([matrix.sps], [dnl
3825 DATA LIST LIST NOTABLE /a b c * d(a1).
3826 MISSING VALUES a(1) b(5).
3833 SAVE OUTFILE='matrix.sav'.
3845 GET x/VARIABLES=x TO !.
3847 GET x/VARIABLES=c TO a.
3857 AT_CHECK([pspp matrix.sps], [1], [dnl
3858 matrix.sps:12.5: error: GET: Syntax error expecting identifier.
3862 matrix.sps:13.17: error: GET: Syntax error expecting variable name.
3863 13 | GET x/VARIABLES=!.
3866 matrix.sps:14.12: error: GET: Syntax error expecting a file name or handle
3871 matrix.sps:15.16: error: GET: Syntax error expecting string.
3872 15 | GET x/ENCODING=!.
3875 matrix.sps:16.13: error: GET: Syntax error expecting identifier.
3879 matrix.sps:17.15: error: GET: Syntax error expecting ACCEPT or OMIT or a number
3881 17 | GET x/MISSING=!.
3884 matrix.sps:18.14: error: GET: Syntax error expecting OMIT or a number for
3886 18 | GET x/SYSMIS=!.
3889 matrix.sps:19.7: error: GET: Syntax error expecting FILE, VARIABLES, NAMES,
3894 matrix.sps:20.17: error: GET: Syntax error expecting variable name.
3895 20 | GET x/VARIABLES=!.
3898 matrix.sps:21.22: error: GET: Syntax error expecting variable name.
3899 21 | GET x/VARIABLES=x TO !.
3902 matrix.sps:22.17: error: MATRIX: x is not a variable name.
3903 22 | GET x/VARIABLES=x.
3906 matrix.sps:23.17-23.22: error: MATRIX: c TO a is not valid syntax since c
3907 precedes a in the dictionary.
3908 23 | GET x/VARIABLES=c TO a.
3911 matrix.sps:24.17: error: MATRIX: d is not a numeric variable.
3912 24 | GET x/VARIABLES=d.
3915 matrix.sps:25: error: MATRIX: Variable d is not numeric.
3917 matrix.sps:30: error: MATRIX: The GET command cannot read an empty active file.
3921 AT_SETUP([MATRIX - SAVE])
3922 AT_DATA([matrix.sps], [dnl
3924 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3925 SAVE {7,8,9}/VARIABLES=a b c d.
3927 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3928 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3930 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3931 SAVE {4,'xyzw',6}/STRINGS=a, b.
3934 AT_CHECK([pspp matrix.sps])
3935 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3941 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3946 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
3953 AT_SETUP([MATRIX - SAVE - inline])
3954 AT_DATA([matrix.sps], [dnl
3956 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
3957 SAVE {7,8,9}/VARIABLES=a b c d.
3962 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
3963 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3968 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
3969 SAVE {4,'xyzw',6}/STRINGS=a, b.
3973 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3992 AT_SETUP([MATRIX - SAVE - negative])
3993 AT_DATA([matrix.sps], [dnl
4001 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
4002 SAVE 1/OUTFILE='matrix2.sav'.
4003 SAVE {1,2}/OUTFILE='matrix2.sav'.
4004 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
4005 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
4006 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
4009 AT_CHECK([pspp matrix.sps], [1], [dnl
4010 matrix.sps:2.6: error: SAVE: Syntax error expecting matrix expression.
4014 matrix.sps:3.16: error: SAVE: Syntax error expecting a file name or handle
4016 3 | SAVE 1/OUTFILE=!.
4019 matrix.sps:4.18: error: SAVE: Syntax error expecting variable name.
4020 4 | SAVE 1/VARIABLES=!.
4023 matrix.sps:5.14: error: SAVE: Syntax error expecting matrix expression.
4027 matrix.sps:6.8: error: SAVE: Syntax error expecting OUTFILE, VARIABLES, NAMES,
4032 matrix.sps:7.1-7.7: error: SAVE: Required subcommand OUTFILE was not specified.
4036 matrix.sps:8.35-8.39: warning: SAVE: Ignoring NAMES because VARIABLES was also
4038 8 | SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
4041 matrix.sps:10: error: MATRIX: Cannot save 1×2 matrix to `matrix2.sav' because
4042 the first SAVE to `matrix2.sav' in this matrix program wrote a 1-column matrix.
4044 matrix.sps:9: error: MATRIX: This is the location of the first SAVE to
4047 error: Duplicate variable name a in SAVE statement.
4049 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
4051 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
4056 AT_SETUP([MATRIX - MGET])
4057 AT_DATA([matrix.sps], [dnl
4059 VARIABLES=ROWTYPE_ var01 TO var08.
4061 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4062 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4063 N 92 92 92 92 92 92 92 92
4067 CORR .36 .31 -.14 1.00
4068 CORR .27 .16 -.12 .22 1.00
4069 CORR .33 .15 -.17 .24 .21 1.00
4070 CORR .50 .29 -.20 .32 .12 .38 1.00
4071 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
4076 PRINT MN/FORMAT=F5.1.
4077 PRINT SD/FORMAT=F5.1.
4078 PRINT NC/FORMAT=F5.0.
4079 PRINT CR/FORMAT=F5.2.
4082 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4083 Table: Matrix Variables Created by MGET
4092 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4095 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4098 92 92 92 92 92 92 92 92
4101 1.00 .18 -.22 .36 .27 .33 .50 .17
4102 .18 1.00 -.17 .31 .16 .15 .29 .29
4103 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
4104 .36 .31 -.14 1.00 .22 .24 .32 .20
4105 .27 .16 -.12 .22 1.00 .21 .12 .27
4106 .33 .15 -.17 .24 .21 1.00 .38 .20
4107 .50 .29 -.20 .32 .12 .38 1.00 .04
4108 .17 .29 -.05 .20 .27 .20 .04 1.00
4112 AT_SETUP([MATRIX - MGET with split variables])
4113 AT_DATA([matrix.sps], [dnl
4115 variables = s1 s2 rowtype_ var01 var02 var03
4119 8 0 mean 21.4 5.0 72.9
4124 8 0 corr -.16 -.22 1
4125 8 1 mean 11.4 1.0 52.9
4135 PRINT MNS1/FORMAT=F5.1.
4136 PRINT SDS1/FORMAT=F5.1.
4137 PRINT NCS1/FORMAT=F5.0.
4138 PRINT CRS1/FORMAT=F5.2.
4139 PRINT MNS2/FORMAT=F5.1.
4140 PRINT SDS2/FORMAT=F5.1.
4141 PRINT NCS2/FORMAT=F5.0.
4142 PRINT CRS2/FORMAT=F5.2.
4145 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
4146 Table: Matrix Variables Created by MGET
4147 ,Split Values,,Dimensions,
4188 AT_SETUP([MATRIX - MGET with factor variables])
4189 AT_DATA([matrix.sps], [dnl
4191 VARIABLES=ROWTYPE_ f1 var01 TO var04
4205 FORMATS var01 TO var04(F5.1).
4206 SAVE OUTFILE='matrix.sav'.
4208 AT_DATA([matrix2.sps], [dnl
4210 MGET FILE='matrix.sav'.
4211 PRINT MNF1/FORMAT=F2.0.
4212 PRINT SDF1/FORMAT=F2.0.
4213 PRINT NCF1/FORMAT=F2.0.
4214 PRINT MNF2/FORMAT=F2.0.
4215 PRINT SDF2/FORMAT=F2.0.
4216 PRINT NCF2/FORMAT=F2.0.
4217 PRINT CR/FORMAT=F3.1.
4220 AT_CHECK([pspp matrix.sps])
4221 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4222 Table: Matrix Variables Created by MGET
4223 ,Factors,Dimensions,
4259 AT_SETUP([MATRIX - MGET with factor and split variables])
4260 AT_DATA([matrix.sps], [dnl
4262 variables = s f rowtype_ var01 var02 var03
4267 8 0 mean 21.4 5.0 72.9
4272 8 . corr -.16 -.22 1
4273 9 1 mean 11.4 1.0 52.9
4283 PRINT MNF1S1/FORMAT=F5.1.
4284 PRINT SDF1S1/FORMAT=F5.1.
4285 PRINT NCF1S1/FORMAT=F5.0.
4286 PRINT CRS1/FORMAT=F5.2.
4287 PRINT MNF1S2/FORMAT=F5.1.
4288 PRINT SDF1S2/FORMAT=F5.1.
4289 PRINT NCF1S2/FORMAT=F5.0.
4290 PRINT CRS2/FORMAT=F5.2.
4293 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4294 Table: Matrix Variables Created by MGET
4295 ,Split Values,Factors,Dimensions,
4336 AT_SETUP([MATRIX - MGET with TYPE])
4337 AT_DATA([matrix.sps], [dnl
4339 VARIABLES=ROWTYPE_ f1 var01 TO var04
4353 FORMATS var01 TO var04(F5.1).
4354 SAVE OUTFILE='matrix.sav'.
4356 AT_DATA([matrix2.sps], [dnl
4358 MGET/FILE='matrix.sav'/TYPE=CORR.
4359 PRINT CR/FORMAT=F3.1.
4362 AT_CHECK([pspp matrix.sps])
4363 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4364 Table: Matrix Variables Created by MGET
4365 ,Factors,Dimensions,
4377 AT_SETUP([MATRIX - MGET - negative - parsing])
4378 AT_DATA([matrix.sps], [dnl
4387 AT_CHECK([pspp matrix.sps], [1], [dnl
4388 matrix.sps:2.6: error: MGET: Syntax error expecting FILE or TYPE.
4392 matrix.sps:3.11: error: MGET: Syntax error expecting a file name or handle
4397 matrix.sps:4.15: error: MGET: Syntax error expecting string.
4398 4 | MGET ENCODING=!.
4401 matrix.sps:5.11: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4406 matrix.sps:6.16: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4408 6 | MGET TYPE=CORR !.
4413 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
4414 AT_DATA([matrix.sps], [dnl
4415 DATA LIST LIST NOTABLE /x.
4424 AT_CHECK([pspp matrix.sps], [1], [dnl
4425 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
4427 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
4431 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
4432 AT_DATA([matrix.sps], [dnl
4433 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
4442 AT_CHECK([pspp matrix.sps], [1], [dnl
4443 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
4444 byte string, but it has width 7.
4446 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
4447 byte string, but it has width 0.
4451 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
4452 AT_DATA([matrix.sps], [dnl
4453 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
4462 AT_CHECK([pspp matrix.sps], [1], [dnl
4463 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
4468 AT_SETUP([MATRIX - MGET - no continuous variables])
4469 AT_DATA([matrix.sps], [dnl
4470 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
4479 AT_CHECK([pspp matrix.sps], [1], [dnl
4480 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
4484 AT_SETUP([MATRIX - MGET - unexpected string variables])
4485 AT_DATA([matrix.sps], [dnl
4486 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
4495 AT_CHECK([pspp matrix.sps], [1], [dnl
4496 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
4501 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
4502 AT_DATA([matrix.sps], [dnl
4503 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4512 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4513 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
4517 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
4518 AT_DATA([matrix.sps], [dnl
4519 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4529 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4530 Table: Matrix Variables Created by MGET
4535 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
4539 AT_SETUP([MATRIX - MGET - missing values in input])
4540 AT_DATA([matrix.sps], [dnl
4541 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
4549 PRINT ncs1/FORMAT=F5.
4550 PRINT ncs2/FORMAT=F5.
4553 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4554 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
4556 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
4558 Table: Matrix Variables Created by MGET
4559 ,Split Values,Dimensions,
4572 AT_SETUP([MATRIX - MSAVE])
4573 AT_DATA([matrix.sps], [dnl
4575 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
4576 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
4577 MSAVE {11, 12}/TYPE=MEAN.
4578 MSAVE {13, 14}/TYPE=STDDEV.
4579 MSAVE {15, 16}/TYPE=N.
4580 MSAVE {17, 18}/TYPE=COUNT.
4585 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4587 ROWTYPE_,VARNAME_,X,Y
4600 AT_SETUP([MATRIX - MSAVE with factor variables])
4601 AT_DATA([matrix.sps], [dnl
4603 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
4604 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4605 MSAVE {11, 12}/TYPE=MEAN.
4606 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
4607 MSAVE {15, 16}/TYPE=N.
4608 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
4614 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
4619 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4621 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
4622 CORR,1.00,1.00,COL1,1.00,2.00
4623 CORR,1.00,1.00,COL2,3.00,4.00
4624 COV,1.00,1.00,COL1,5.00,6.00
4625 COV,1.00,1.00,COL2,7.00,8.00
4626 COV,1.00,1.00,,9.00,10.00
4627 MEAN,1.00,1.00,,11.00,12.00
4628 STDDEV,2.00,1.00,,13.00,14.00
4629 N,2.00,1.00,,15.00,16.00
4630 COUNT,1.00,2.00,,17.00,18.00
4633 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
4634 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
4635 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
4639 AT_SETUP([MATRIX - MSAVE with split variables])
4640 AT_DATA([matrix.sps], [dnl
4642 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
4643 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4644 MSAVE {11, 12}/TYPE=MEAN.
4645 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
4646 MSAVE {15, 16}/TYPE=N.
4647 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
4653 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
4658 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4660 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
4661 1.00,1.00,CORR,COL1,1.00,2.00
4662 1.00,1.00,CORR,COL2,3.00,4.00
4663 1.00,1.00,COV,COL1,5.00,6.00
4664 1.00,1.00,COV,COL2,7.00,8.00
4665 1.00,1.00,COV,,9.00,10.00
4666 1.00,1.00,MEAN,,11.00,12.00
4667 2.00,1.00,STDDEV,,13.00,14.00
4668 2.00,1.00,N,,15.00,16.00
4669 1.00,2.00,COUNT,,17.00,18.00
4672 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
4673 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
4674 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
4678 AT_SETUP([MATRIX - MSAVE with factor and split variables])
4679 AT_DATA([matrix.sps], [dnl
4681 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
4682 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4683 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
4684 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
4685 MSAVE {15, 16}/TYPE=N.
4686 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
4691 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4693 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
4694 1.00,CORR,1.00,COL1,1.00,2.00
4695 1.00,CORR,1.00,COL2,3.00,4.00
4696 1.00,COV,1.00,COL1,5.00,6.00
4697 1.00,COV,1.00,COL2,7.00,8.00
4698 1.00,COV,1.00,,9.00,10.00
4699 1.00,MEAN,2.00,,11.00,12.00
4700 2.00,STDDEV,1.00,,13.00,14.00
4701 2.00,N,1.00,,15.00,16.00
4702 2.00,COUNT,2.00,,17.00,18.00
4706 AT_SETUP([MATRIX - MSAVE - negative])
4707 AT_DATA([matrix.sps], [dnl
4712 MSAVE 1/VARIABLES=!.
4719 MSAVE 1/TYPE=COV/FNAMES=x.
4720 MSAVE 1/TYPE=COV/SNAMES=x.
4723 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4727 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4728 MSAVE 1/TYPE=COV/VARIABLES=x.
4729 MSAVE 1/TYPE=COV/FNAMES=x.
4730 MSAVE 1/TYPE=COV/SNAMES=x.
4734 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4735 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4736 MSAVE {1,2;3}/TYPE=COV.
4737 MSAVE 0/TYPE=COV/FACTOR={1,2}.
4738 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4742 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4746 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
4750 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4754 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4758 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4759 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4760 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4761 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4762 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4763 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4766 AT_CHECK([pspp matrix.sps], [1], [dnl
4767 matrix.sps:2.7: error: MSAVE: Syntax error expecting matrix expression.
4771 matrix.sps:3.14: error: MSAVE: Syntax error expecting COV, CORR, MEAN, STDDEV,
4776 matrix.sps:4.17: error: MSAVE: Syntax error expecting a file name or handle
4778 4 | MSAVE 1/OUTFILE=!.
4781 matrix.sps:5.19: error: MSAVE: Syntax error expecting variable name.
4782 5 | MSAVE 1/VARIABLES=!.
4785 matrix.sps:6.16: error: MSAVE: Syntax error expecting variable name.
4786 6 | MSAVE 1/FNAMES=!.
4789 matrix.sps:7.16: error: MSAVE: Syntax error expecting variable name.
4790 7 | MSAVE 1/SNAMES=!.
4793 matrix.sps:8.15: error: MSAVE: Syntax error expecting matrix expression.
4794 8 | MSAVE 1/SPLIT=!.
4797 matrix.sps:9.16: error: MSAVE: Syntax error expecting matrix expression.
4798 9 | MSAVE 1/FACTOR=!.
4801 matrix.sps:10.9: error: MSAVE: Syntax error expecting TYPE, OUTFILE, VARIABLES,
4802 FNAMES, SNAMES, SPLIT, or FACTOR.
4806 matrix.sps:11.1-11.8: error: MSAVE: Required subcommand TYPE was not specified.
4810 matrix.sps:12.25: error: MSAVE: FNAMES requires FACTOR.
4811 12 | MSAVE 1/TYPE=COV/FNAMES=x.
4814 matrix.sps:13.25: error: MSAVE: SNAMES requires SPLIT.
4815 13 | MSAVE 1/TYPE=COV/SNAMES=x.
4818 matrix.sps:14.1-14.17: error: MSAVE: Required subcommand OUTFILE was not
4820 14 | MSAVE 1/TYPE=COV.
4823 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
4824 within a single MATRIX command.
4826 matrix.sps:16.26-16.37: note: MSAVE: This is the OUTFILE on the first MSAVE
4828 16 | MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4831 matrix.sps:20.26-20.38: note: MSAVE: This is the OUTFILE on a later MSAVE
4833 20 | MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4836 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables on each
4837 MSAVE within a given MATRIX.
4839 matrix.sps:19.16: error: MSAVE: This is the specification of VARIABLES on the
4844 matrix.sps:21.28: error: MSAVE: This is a different specification of VARIABLES
4846 21 | MSAVE 1/TYPE=COV/VARIABLES=x.
4849 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables on each
4850 MSAVE within a given MATRIX.
4852 matrix.sps:17.23: error: MSAVE: This is the specification of FNAMES on the
4854 17 | /FACTOR=1 /FNAMES=y
4857 matrix.sps:22.25: error: MSAVE: This is a different specification of FNAMES on
4859 22 | MSAVE 1/TYPE=COV/FNAMES=x.
4862 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables on each
4863 MSAVE within a given MATRIX.
4865 matrix.sps:18.22: error: MSAVE: This is the specification of SNAMES on the
4867 18 | /SPLIT=2 /SNAMES=z
4870 matrix.sps:23.25: error: MSAVE: This is a different specification of SNAMES on
4872 23 | MSAVE 1/TYPE=COV/SNAMES=x.
4875 matrix.sps:28.7-28.11: error: MATRIX: Matrix on MSAVE has 2 columns but there
4877 28 | MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/
4881 matrix.sps:29.7-29.13: error: MATRIX: This expression tries to vertically join
4882 matrices with differing numbers of columns.
4883 29 | MSAVE {1,2;3}/TYPE=COV.
4886 matrix.sps:29.8-29.10: note: MATRIX: This operand is a 1×2 matrix.
4887 29 | MSAVE {1,2;3}/TYPE=COV.
4890 matrix.sps:29.12: note: MATRIX: This operand is a 1×1 matrix.
4891 29 | MSAVE {1,2;3}/TYPE=COV.
4894 matrix.sps:30.25-30.29: error: MATRIX: There are 1 factor variables, but 2
4895 factor values were supplied.
4896 30 | MSAVE 0/TYPE=COV/FACTOR={1,2}.
4899 matrix.sps:31.33-31.37: error: MATRIX: There are 1 split variables, but 2 split
4900 values were supplied.
4901 31 | MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4904 matrix.sps:35.49: error: MSAVE: Variable x appears twice in variable list.
4905 35 | MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4908 matrix.sps:39.56: error: MATRIX: Duplicate or invalid FACTOR variable name x.
4909 39 | MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/
4913 matrix.sps:43.50: error: MATRIX: Duplicate or invalid variable name x.
4914 43 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4917 matrix.sps:47.50: error: MATRIX: Duplicate or invalid variable name x.
4918 47 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4921 matrix.sps:51.47-51.54: error: MSAVE: Variable name VARNAME_ is reserved.
4922 51 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4925 matrix.sps:52.47-52.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4926 52 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4929 matrix.sps:53.47-53.54: error: MSAVE: Variable name VARNAME_ is reserved.
4930 53 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4933 matrix.sps:54.47-54.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4934 54 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4937 matrix.sps:55.50-55.57: error: MSAVE: Variable name VARNAME_ is reserved.
4938 55 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4941 matrix.sps:56.50-56.57: error: MSAVE: Variable name ROWTYPE_ is reserved.
4942 56 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4947 AT_SETUP([MATRIX - DISPLAY])
4948 AT_DATA([matrix-template.sps], [dnl
4957 for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
4958 sed "s/command/$command/" < matrix-template.sps > matrix.sps
4959 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4960 Table: Matrix Variables
4961 ,Dimension,,Size (kB)
4971 AT_SETUP([MATRIX - DISPLAY - negative])
4972 AT_DATA([matrix.sps], [dnl
4977 AT_CHECK([pspp matrix.sps], [1], [dnl
4978 matrix.sps:2.9: error: DISPLAY: Syntax error expecting DICTIONARY or STATUS.
4984 AT_SETUP([MATRIX - RELEASE])
4985 AT_DATA([matrix.sps], [dnl
4993 AT_CHECK([pspp matrix.sps], [1], [dnl
4997 matrix.sps:5.7: error: MATRIX: Uninitialized variable x used in expression.
5003 AT_SETUP([MATRIX - RELEASE - negative])
5004 AT_DATA([matrix.sps], [dnl
5017 AT_CHECK([pspp matrix.sps], [1], [dnl
5018 matrix.sps:2.9: error: RELEASE: Syntax error expecting end of command.
5022 matrix.sps:3.9: error: RELEASE: Syntax error expecting variable name.
5026 matrix.sps:5.12: error: RELEASE: Syntax error expecting end of command.
5030 matrix.sps:7.11: error: RELEASE: Syntax error expecting end of command.