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}.
14 AT_CHECK([pspp matrix.sps], [0], [dnl
27 AT_SETUP([MATRIX - submatrices as rvalues - all columns or all rows])
28 AT_DATA([matrix.sps], [dnl
30 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1, :).
31 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1}, :).
32 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2}, :).
33 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2, 3}, :).
34 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1; 3; 2}, :).
35 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 3, 3}, :).
36 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:2, :).
37 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:3, :).
38 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({}, :).
40 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1).
41 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1}).
42 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2}).
43 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2, 3}).
44 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1; 3; 2}).
45 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 3, 3}).
46 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:2).
47 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:3).
48 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {}).
50 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, :).
52 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(0, :).
53 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 0).
54 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(4, :).
55 PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 4).
61 PRINT {1, 2, 3, 4}({1, 2; 3, 4}, :).
62 PRINT {1, 2, 3, 4}(:, {1, 2; 3, 4}).
65 AT_CHECK([pspp matrix.sps], [1], [dnl
66 {1, 2, 3; 4, 5, 6; 7, 8, 9}(1, :)
69 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1}, :)
72 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2}, :)
76 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2, 3}, :)
81 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1; 3; 2}, :)
86 {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 3, 3}, :)
91 {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:2, :)
95 {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:3, :)
100 {1, 2, 3; 4, 5, 6; 7, 8, 9}({}, :)
102 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1)
107 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1})
112 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2})
117 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2, 3})
122 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1; 3; 2})
127 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 3, 3})
132 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:2)
137 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:3)
142 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {})
146 {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, :)
151 matrix.sps:24: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
153 matrix.sps:25: error: MATRIX: 0 is not a valid column index for a 3×3 matrix.
155 matrix.sps:26: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
157 matrix.sps:27: error: MATRIX: 4 is not a valid column index for a 3×3 matrix.
165 matrix.sps:33: error: MATRIX: Matrix row index must be scalar or vector, not a
168 matrix.sps:34: error: MATRIX: Matrix column index must be scalar or vector, not
173 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues])
174 AT_DATA([matrix.sps], [dnl
176 COMPUTE y={1, 2, 3; 4, 5, 6; 7, 8, 9}.
179 COMPUTE x1(1, :) = {11, 12, 13}.
183 COMPUTE x2(2, :) = {14, 15, 16}.
187 COMPUTE x3(3, :) = {17, 18, 19}.
191 COMPUTE x4(:, 1) = {11; 14; 17}.
195 COMPUTE x5(:, 2) = {12; 15; 18}.
199 COMPUTE x6(:, 3) = {13; 16; 19}.
203 COMPUTE x7(1, 1) = 11.
207 COMPUTE x8(1:2, 2:3) = {12, 13; 15, 16}.
211 COMPUTE x9({3, 1}, {2; 3}) = {18, 19; 12, 13}.
215 AT_CHECK([pspp matrix.sps], [0], [dnl
263 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues - negative])
264 AT_DATA([matrix.sps], [dnl
266 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
267 COMPUTE x(1, :) = {}.
268 COMPUTE x(1, :) = 15.
269 COMPUTE x(1, :) = {11, 12}.
270 COMPUTE x(1, :) = {11, 12, 13, 14}.
271 COMPUTE x(:, 1) = {}.
272 COMPUTE x(:, 1) = 15.
273 COMPUTE x(:, 1) = {11, 12}.
274 COMPUTE x(:, 1) = {11, 12, 13, 14}.
278 COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
281 COMPUTE x({1, 2; 3, 4}, 5) = 1.
282 COMPUTE x(3, {1, 2; 3, 4}) = 1.
286 AT_CHECK([pspp matrix.sps], [1], [dnl
287 matrix.sps:3: error: MATRIX: Row index vector for assignment to x has 1
288 elements but source matrix has 0 rows.
290 matrix.sps:4: error: MATRIX: Column index vector for assignment to x has 3
291 elements but source matrix has 1 columns.
293 matrix.sps:5: error: MATRIX: Column index vector for assignment to x has 3
294 elements but source matrix has 2 columns.
296 matrix.sps:6: error: MATRIX: Column index vector for assignment to x has 3
297 elements but source matrix has 4 columns.
299 matrix.sps:7: error: MATRIX: Row index vector for assignment to x has 3
300 elements but source matrix has 0 rows.
302 matrix.sps:8: error: MATRIX: Row index vector for assignment to x has 3
303 elements but source matrix has 1 rows.
305 matrix.sps:9: error: MATRIX: Row index vector for assignment to x has 3
306 elements but source matrix has 1 rows.
308 matrix.sps:10: error: MATRIX: Row index vector for assignment to x has 3
309 elements but source matrix has 1 rows.
311 matrix.sps:11: error: MATRIX: Can't use vector indexing on 3×3 matrix x.
313 matrix.sps:12: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
315 matrix.sps:13: error: MATRIX: 0 is not a valid column index for a 3×3 matrix.
317 matrix.sps:14: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
319 matrix.sps:15: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
321 matrix.sps:16: error: MATRIX: 4 is not a valid column index for a 3×3 matrix.
323 matrix.sps:17: error: MATRIX: Matrix row index must be scalar or vector, not a
326 matrix.sps:18: error: MATRIX: Matrix column index must be scalar or vector, not
336 AT_SETUP([MATRIX - subvectors as rvalues])
337 AT_DATA([matrix.sps], [dnl
339 PRINT {10, 20, 30}({}).
340 PRINT {10, 20, 30}(2).
341 PRINT {10, 20, 30}({2}).
342 PRINT {10, 20, 30}({1,3}).
343 PRINT {10, 20, 30}({2,3}).
344 PRINT {10, 20, 30}({1;3}).
345 PRINT {10, 20, 30}({2;3}).
346 PRINT {10, 20, 30}(2:3).
347 PRINT {10, 20, 30}(:).
349 PRINT {10; 20; 30}({}).
350 PRINT {10; 20; 30}(2).
351 PRINT {10; 20; 30}({2}).
352 PRINT {10; 20; 30}({1,3}).
353 PRINT {10; 20; 30}({2,3}).
354 PRINT {10; 20; 30}({1;3}).
355 PRINT {10; 20; 30}({2;3}).
356 PRINT {10; 20; 30}(2:3).
357 PRINT {10; 20; 30}(:).
361 PRINT {1, 2; 3, 4}(:).
362 PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
363 PRINT {1, 2, 3, 4}(0).
364 PRINT {1, 2, 3, 4}(5).
367 AT_CHECK([pspp matrix.sps], [1], [dnl
429 matrix.sps:24: error: MATRIX: Vector index operator may not be applied to a 2×2
432 matrix.sps:25: error: MATRIX: Vector index must be scalar or vector, not a 2×2
435 matrix.sps:26: error: MATRIX: Index 0 is out of range for vector with 4
438 matrix.sps:27: error: MATRIX: Index 5 is out of range for vector with 4
443 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues])
444 AT_DATA([matrix.sps], [dnl
446 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
449 COMPUTE r1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
453 COMPUTE r2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
461 COMPUTE r4(1:2) = {11:12}.
465 COMPUTE r5({8;9}) = {18:19}.
468 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
471 COMPUTE c1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
475 COMPUTE c2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
483 COMPUTE c4(1:2) = {11:12}.
487 COMPUTE c5(8:9) = {18:19}.
491 AT_CHECK([pspp matrix.sps], [0], [dnl
493 11 12 13 14 15 16 17 18 19
496 11 12 13 14 15 16 17 18 19
508 11 12 13 14 15 16 17 18 19
511 11 12 13 14 15 16 17 18 19
524 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues - negative])
525 AT_DATA([matrix.sps], [dnl
527 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
528 COMPUTE r(1:3) = {1, 2; 3, 4}.
530 COMPUTE r(1:3) = {1}.
531 COMPUTE r(1:3) = {1, 2}.
532 COMPUTE r(1:3) = {1, 2, 3, 4}.
534 COMPUTE r(1:3) = {1}.
535 COMPUTE r(1:3) = {1; 2}.
536 COMPUTE r(1:3) = {1; 2; 3; 4}.
537 COMPUTE r(:) = {1; 2; 3; 4}.
540 COMPUTE r({1, 2; 3, 4}) = 1.
542 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
543 COMPUTE c(1:3) = {1, 2; 3, 4}.
545 COMPUTE c(1:3) = {1}.
546 COMPUTE c(1:3) = {1, 2}.
547 COMPUTE c(1:3) = {1, 2, 3, 4}.
549 COMPUTE c(1:3) = {1}.
550 COMPUTE c(1:3) = {1; 2}.
551 COMPUTE c(1:3) = {1; 2; 3; 4}.
552 COMPUTE c(:) = {1; 2; 3; 4}.
555 COMPUTE c({1, 2; 3, 4}) = 1.
557 COMPUTE m = {1, 2; 3, 4}.
562 AT_CHECK([pspp matrix.sps], [1], [dnl
563 matrix.sps:3: error: MATRIX: Can't assign 2×2 matrix to subvector.
565 matrix.sps:4: error: MATRIX: Can't assign 0-element vector to 3-element
568 matrix.sps:5: error: MATRIX: Can't assign 1-element vector to 3-element
571 matrix.sps:6: error: MATRIX: Can't assign 2-element vector to 3-element
574 matrix.sps:7: error: MATRIX: Can't assign 4-element vector to 3-element
577 matrix.sps:8: error: MATRIX: Can't assign 0-element vector to 3-element
580 matrix.sps:9: error: MATRIX: Can't assign 1-element vector to 3-element
583 matrix.sps:10: error: MATRIX: Can't assign 2-element vector to 3-element
586 matrix.sps:11: error: MATRIX: Can't assign 4-element vector to 3-element
589 matrix.sps:12: error: MATRIX: Can't assign 4-element vector to 9-element
592 matrix.sps:13: error: MATRIX: Index 0 is out of range for vector with 9
595 matrix.sps:14: error: MATRIX: Index 10 is out of range for vector with 9
598 matrix.sps:15: error: MATRIX: Vector index must be scalar or vector, not a 2×2
601 matrix.sps:18: error: MATRIX: Can't assign 2×2 matrix to subvector.
603 matrix.sps:19: error: MATRIX: Can't assign 0-element vector to 3-element
606 matrix.sps:20: error: MATRIX: Can't assign 1-element vector to 3-element
609 matrix.sps:21: error: MATRIX: Can't assign 2-element vector to 3-element
612 matrix.sps:22: error: MATRIX: Can't assign 4-element vector to 3-element
615 matrix.sps:23: error: MATRIX: Can't assign 0-element vector to 3-element
618 matrix.sps:24: error: MATRIX: Can't assign 1-element vector to 3-element
621 matrix.sps:25: error: MATRIX: Can't assign 2-element vector to 3-element
624 matrix.sps:26: error: MATRIX: Can't assign 4-element vector to 3-element
627 matrix.sps:27: error: MATRIX: Can't assign 4-element vector to 9-element
630 matrix.sps:28: error: MATRIX: Index 0 is out of range for vector with 9
633 matrix.sps:29: error: MATRIX: Index 10 is out of range for vector with 9
636 matrix.sps:30: error: MATRIX: Vector index must be scalar or vector, not a 2×2
639 matrix.sps:33: error: MATRIX: Can't use vector indexing on 2×2 matrix m.
641 matrix.sps:34: error: MATRIX: Can't use vector indexing on 2×2 matrix m.
645 AT_SETUP([MATRIX - COMPUTE - negative])
646 AT_DATA([matrix.sps], [dnl
654 AT_CHECK([pspp matrix.sps], [1], [dnl
655 matrix.sps:2.10: error: COMPUTE: Syntax error at end of command: expecting `='.
657 matrix.sps:3.11: error: COMPUTE: Syntax error at end of command.
659 matrix.sps:4: error: MATRIX: Undefined variable x.
661 matrix.sps:5: error: COMPUTE: Undefined variable y.
665 AT_SETUP([MATRIX - elementwise arithmetic operators])
666 AT_DATA([matrix.sps], [dnl
671 PRINT ({1,2;3,4} + {5,6;7,8}).
672 PRINT ({1,2;3,4} + 5).
673 PRINT (5 + {5,6;7,8}).
674 PRINT ({1,2;3,4} + {5,6}).
676 PRINT ({1,2;3,4} - {5,6;7,8}).
677 PRINT ({1,2;3,4} - 5).
678 PRINT (5 - {5,6;7,8}).
679 PRINT ({1,2;3,4} - {5,6}).
681 PRINT ({1,2;3,4} * 5).
682 PRINT (5 * {5,6;7,8}).
684 PRINT ({2,4;6,8} / 2).
685 PRINT (12 / {1,2;3,4}).
686 PRINT ({2,8;18,32} / {1,2;3,4}).
688 PRINT ({1,2;3,4} &* {5,6;7,8}).
689 PRINT ({1,2;3,4} &* 5).
690 PRINT (5 &* {5,6;7,8}).
691 PRINT ({1,2;3,4} &* {5,6}).
693 PRINT ({2,4;6,8} &/ 2).
694 PRINT (12 &/ {1,2;3,4}).
695 PRINT ({2,8;18,32} &/ {1,2;3,4}).
697 PRINT ({1,2;3,4} &** 2).
698 PRINT (2 &** {1,2;3,4}).
699 PRINT ({1,2;3,4} &** {2,3;4,5}).
700 PRINT ({1,2;3,4} &** {5,6}).
703 AT_CHECK([pspp matrix.sps], [1], [dnl
711 ({1,2;3,4} + {5,6;7,8})
723 matrix.sps:8: error: MATRIX: Operands to + must have the same dimensions or one
724 must be a scalar, not 2×2 and 1×2 matrices.
726 ({1,2;3,4} - {5,6;7,8})
738 matrix.sps:13: error: MATRIX: Operands to - must have the same dimensions or
739 one must be a scalar, not 2×2 and 1×2 matrices.
757 ({2,8;18,32} / {1,2;3,4})
761 ({1,2;3,4} &* {5,6;7,8})
773 matrix.sps:25: error: MATRIX: Operands to &* must have the same dimensions or
774 one must be a scalar, not 2×2 and 1×2 matrices.
784 ({2,8;18,32} &/ {1,2;3,4})
796 ({1,2;3,4} &** {2,3;4,5})
800 matrix.sps:34: error: MATRIX: Operands to &** must have the same dimensions or
801 one must be a scalar, not 2×2 and 1×2 matrices.
805 AT_SETUP([MATRIX - relational operators])
806 AT_DATA([matrix.sps], [dnl
808 PRINT ({1, 1; 2, 2} > {1, 2; 1, 2}).
809 PRINT ({1, 1; 2, 2} > 1).
810 PRINT (2 > {1, 2; 1, 2}).
811 PRINT ({1, 2} > {1; 2}).
813 PRINT ({1, 1; 2, 2} < {1, 2; 1, 2}).
814 PRINT ({1, 1; 2, 2} < 2).
815 PRINT (1 < {1, 2; 1, 2}).
816 PRINT ({1, 2} < {1; 2}).
818 PRINT ({1, 1; 2, 2} <> {1, 2; 1, 2}).
819 PRINT ({1, 1; 2, 2} <> 2).
820 PRINT (1 <> {1, 2; 1, 2}).
821 PRINT ({1, 2} <> {1; 2}).
823 PRINT ({1, 1; 2, 2} >= {1, 2; 1, 2}).
824 PRINT ({1, 1; 2, 2} >= 2).
825 PRINT (1 >= {1, 2; 1, 2}).
826 PRINT ({1, 2} >= {1; 2}).
828 PRINT ({1, 1; 2, 2} <= {1, 2; 1, 2}).
829 PRINT ({1, 1; 2, 2} <= 2).
830 PRINT (1 <= {1, 2; 1, 2}).
831 PRINT ({1, 2} <= {1; 2}).
833 PRINT ({1, 1; 2, 2} = {1, 2; 1, 2}).
834 PRINT ({1, 1; 2, 2} = 2).
835 PRINT (1 = {1, 2; 1, 2}).
836 PRINT ({1, 2} = {1; 2}).
839 AT_CHECK([pspp matrix.sps], [1], [dnl
840 ({1, 1; 2, 2} > {1, 2; 1, 2})
852 matrix.sps:5: error: MATRIX: Operands to > must have the same dimensions or one
853 must be a scalar, not 1×2 and 2×1 matrices.
855 ({1, 1; 2, 2} < {1, 2; 1, 2})
867 matrix.sps:10: error: MATRIX: Operands to < must have the same dimensions or
868 one must be a scalar, not 1×2 and 2×1 matrices.
870 ({1, 1; 2, 2} <> {1, 2; 1, 2})
882 matrix.sps:15: error: MATRIX: Operands to <> must have the same dimensions or
883 one must be a scalar, not 1×2 and 2×1 matrices.
885 ({1, 1; 2, 2} >= {1, 2; 1, 2})
897 matrix.sps:20: error: MATRIX: Operands to >= must have the same dimensions or
898 one must be a scalar, not 1×2 and 2×1 matrices.
900 ({1, 1; 2, 2} <= {1, 2; 1, 2})
912 matrix.sps:25: error: MATRIX: Operands to <= must have the same dimensions or
913 one must be a scalar, not 1×2 and 2×1 matrices.
915 ({1, 1; 2, 2} = {1, 2; 1, 2})
927 matrix.sps:30: error: MATRIX: Operands to = must have the same dimensions or
928 one must be a scalar, not 1×2 and 2×1 matrices.
932 AT_SETUP([MATRIX - logical operators])
933 AT_DATA([matrix.sps], [dnl
935 PRINT (NOT {-1, 0, 1}).
937 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
938 PRINT ({-1, 0, 1} AND -1).
939 PRINT ({-1, 0, 1} AND 0).
940 PRINT ({-1, 0, 1} AND 1).
941 PRINT ({-1, 0} AND {2; 3}).
943 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
944 PRINT ({-1, 0, 1} OR -1).
945 PRINT ({-1, 0, 1} OR 0).
946 PRINT ({-1, 0, 1} OR 1).
947 PRINT ({-1, 0} OR {2; 3}).
949 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
950 PRINT ({-1, 0, 1} XOR -1).
951 PRINT ({-1, 0, 1} XOR 0).
952 PRINT ({-1, 0, 1} XOR 1).
953 PRINT ({-1, 0} XOR {2; 3}).
956 AT_CHECK([pspp matrix.sps], [1], [dnl
960 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1})
974 matrix.sps:8: error: MATRIX: Operands to AND must have the same dimensions or
975 one must be a scalar, not 1×2 and 2×1 matrices.
977 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
991 matrix.sps:14: error: MATRIX: Operands to OR must have the same dimensions or
992 one must be a scalar, not 1×2 and 2×1 matrices.
994 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1008 matrix.sps:20: error: MATRIX: Operands to XOR must have the same dimensions or
1009 one must be a scalar, not 1×2 and 2×1 matrices.
1013 AT_SETUP([MATRIX - matrix operators])
1014 AT_DATA([matrix.sps], [dnl
1016 PRINT ({0, 1; 0, 0} * {0, 0; 1, 0}).
1017 PRINT ({0, 0; 1, 0} * {0, 1; 0, 0}).
1018 PRINT ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12}).
1019 PRINT ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3}).
1020 COMPUTE m = {0, 1, 0, 0; 1, 0, 1, 0; 0, 1, 0, 1; 0, 0, 1, 0}.
1028 PRINT {3, 3.5; 3.2, 3.6}**-1/FORMAT F6.2.
1030 PRINT ({1, 2, 3} * {1, 2}).
1036 AT_CHECK([pspp matrix.sps], [1], [dnl
1037 ({0, 1; 0, 0} * {0, 0; 1, 0})
1041 ({0, 0; 1, 0} * {0, 1; 0, 0})
1045 ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12})
1049 ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3})
1094 {3, 3.5; 3.2, 3.6}**-1
1098 matrix.sps:16: error: MATRIX: Matrices with dimensions 1×3 and 1×2 are not
1099 conformable for multiplication.
1101 matrix.sps:17: error: MATRIX: Matrix exponentation with ** requires a square
1102 matrix on the left-hand size, not one with dimensions 1×3.
1104 matrix.sps:18: error: MATRIX: Matrix exponentiation with ** requires a scalar
1105 on the right-hand side, not a matrix with dimensions 1×2.
1107 matrix.sps:19: error: MATRIX: Exponent 1.5 in matrix multiplication is non-
1108 integer or outside the valid range.
1112 AT_SETUP([MATRIX - sequences and construction])
1113 AT_DATA([matrix.sps], [dnl
1135 AT_CHECK([pspp matrix.sps], [1], [dnl
1164 matrix.sps:15: error: MATRIX: The increment operand to : must be nonzero.
1166 matrix.sps:16: error: MATRIX: The increment operand to : must be nonzero.
1168 matrix.sps:18: error: MATRIX: All rows in a matrix must have the same number of
1169 columns, but this tries to stack matrices with 2 and 1 columns.
1171 matrix.sps:19: error: MATRIX: All columns in a matrix must have the same number
1172 of rows, but this tries to paste matrices with 2 and 1 rows.
1176 AT_SETUP([MATRIX - comments])
1177 AT_DATA([matrix.sps], [dnl
1181 COMMENT Comment two.
1185 AT_CHECK([pspp matrix.sps], [0], [dnl
1194 AT_SETUP([MATRIX - string matrices])
1195 AT_DATA([matrix.sps], [dnl
1197 COMPUTE m={'This is', 'a string', 'matrix', 'including', 'some', 'long strings'}.
1201 AT_CHECK([pspp matrix.sps], [0], [dnl
1203 This is a string matrix includin some long str
1207 AT_SETUP([MATRIX - ABS ALL ANY ARSIN ARTAN])
1208 AT_DATA([matrix.sps], [dnl
1210 PRINT ABS({-1, 0, 1}).
1212 PRINT ALL({0, 0, 0}).
1214 PRINT ALL({-1, 0, 1}).
1216 PRINT ANY({0, 0, 0}).
1218 PRINT ANY({-1, 0, 1}).
1220 PRINT ARSIN({-1, 0, 1})/FORMAT=F5.2.
1222 PRINT ARTAN({-5, -1, 0, 1, 5})/FORMAT=F5.2.
1225 AT_CHECK([pspp matrix.sps], [0], [dnl
1250 ARTAN({-5, -1, 0, 1, 5})
1251 -1.37 -.79 .00 .79 1.37
1255 AT_SETUP([MATRIX - BLOCK CHOL CMAX CMIN COS])
1256 AT_DATA([matrix.sps], [dnl
1258 PRINT BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11}).
1260 COMPUTE b=CHOL({4, 12, -16; 12, 37, -43; -16, -43, 98}).
1264 PRINT CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1266 PRINT CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1268 PRINT COS({0.785, 1.57; 3.14, 1.57 + 3.14}) /FORMAT=F5.2.
1272 AT_CHECK([pspp matrix.sps], [0], [dnl
1273 BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11})
1292 CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11})
1295 CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11})
1298 COS({0.785, 1.57; 3.14, 1.57 + 3.14})
1304 AT_SETUP([MATRIX - CSSQ CSUM DESIGN DET DIAG])
1305 AT_DATA([matrix.sps], [dnl
1307 PRINT CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1308 PRINT CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1309 PRINT DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1}).
1310 PRINT DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1}).
1311 PRINT DET({1, 2, 3; 4, 5, 6; 7, 8, 9}) /FORMAT F4.1.
1312 PRINT DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10}).
1315 AT_CHECK([pspp matrix.sps], [0], [dnl
1316 CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
1319 CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
1322 DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1})
1327 warning: Column 2 in DESIGN argument has constant value.
1329 DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1})
1334 DET({1, 2, 3; 4, 5, 6; 7, 8, 9})
1337 DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10})
1344 AT_SETUP([MATRIX - EVAL EXP GINV GRADE GSCH])
1345 AT_DATA([matrix.sps], [dnl
1347 PRINT EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9}).
1349 PRINT EXP({2, 3; 4, 5})/FORMAT F5.2.
1351 PRINT GINV({1, 2})/FORMAT F5.2.
1352 COMPUTE a={1, 2, 3; 4, 5, 6; 7, 8, 9}.
1354 PRINT (a*g*a)/FORMAT F5.2.
1356 PRINT GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5}).
1357 COMPUTE x={26, 690, 323, 208, 671, 818, 732, 711, 585, 792}.
1359 COMPUTE asort(GRADE(asort))=asort.
1362 COMPUTE dsort(GRADE(-dsort))=dsort.
1365 PRINT (GSCH({3, 2; 1, 2}) * SQRT(10))/FORMAT F5.2.
1366 PRINT (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))/FORMAT F5.2.
1368 PRINT GSCH({0, 0, 0; 0, 0, 0}).
1371 AT_CHECK([pspp matrix.sps], [1], [dnl
1372 EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})
1390 GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5})
1396 26 208 323 585 671 690 711 732 792 818
1399 818 792 732 711 690 671 585 323 208 26
1401 (GSCH({3, 2; 1, 2}) * SQRT(10))
1405 (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))
1409 matrix.sps:22: error: MATRIX: GSCH requires its argument to have at least as
1410 many columns as rows, but it has dimensions 2×1.
1412 matrix.sps:23: error: MATRIX: 2×3 argument to GSCH contains only 0 linearly
1413 independent columns.
1417 AT_SETUP([MATRIX - IDENT INV KRONEKER LG10 LN])
1418 AT_DATA([matrix.sps], [dnl
1425 PRINT INV({3, 3.5; 3.2, 3.6})/FORMAT F8.2.
1426 PRINT INV({4, 7; 2, 6})/FORMAT F8.2.
1427 PRINT (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)/FORMAT F8.2.
1429 PRINT KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7}).
1431 PRINT LG10({1, 10, 100, 1000}).
1433 PRINT LN({1, 2; 3, 4})/FORMAT F5.2.
1437 AT_CHECK([pspp matrix.sps], [0], [dnl
1457 INV({3, 3.5; 3.2, 3.6})
1465 (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)
1470 KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7})
1476 LG10({1, 10, 100, 1000})
1488 AT_SETUP([MATRIX - MAGIC])
1489 AT_DATA([matrix.sps], [dnl
1494 COMPUTE total=n*(n**2 + 1) / 2.
1495 COMPUTE tb={MSUM(DIAG(T(m))), CSUM(m), MSUM(DIAG(m))} - total.
1496 COMPUTE lr=RSUM(m) - total.
1497 PRINT {tb; lr, m, lr; tb}/FORMAT F4.0.
1501 AT_CHECK([pspp matrix.sps], [0], [dnl
1527 0 24 14 22 18 17 16 0
1528 0 13 23 15 19 20 21 0
1534 0 30 39 48 1 10 19 28 0
1535 0 38 47 7 9 18 27 29 0
1536 0 46 6 8 17 26 35 37 0
1537 0 5 14 16 25 34 36 45 0
1538 0 13 15 24 33 42 44 4 0
1539 0 21 23 32 41 43 3 12 0
1540 0 22 31 40 49 2 11 20 0
1544 0 1 9 17 25 40 48 56 64 0
1545 0 63 55 47 39 26 18 10 2 0
1546 0 3 11 19 27 38 46 54 62 0
1547 0 61 53 45 37 28 20 12 4 0
1548 0 60 52 44 32 33 21 13 5 0
1549 0 6 14 22 30 35 43 51 59 0
1550 0 58 50 42 34 31 23 15 7 0
1551 0 8 16 24 36 29 41 49 57 0
1554 0 0 0 0 0 0 0 0 0 0 0
1555 0 47 58 69 80 1 12 23 34 45 0
1556 0 57 68 79 9 11 22 33 44 46 0
1557 0 67 78 8 10 21 32 43 54 56 0
1558 0 77 7 18 20 31 42 53 55 66 0
1559 0 6 17 19 30 41 52 63 65 76 0
1560 0 16 27 29 40 51 62 64 75 5 0
1561 0 26 28 39 50 61 72 74 4 15 0
1562 0 36 38 49 60 71 73 3 14 25 0
1563 0 37 48 59 70 81 2 13 24 35 0
1564 0 0 0 0 0 0 0 0 0 0 0
1566 0 0 0 0 0 0 0 0 0 0 0 0
1567 0 1 9 17 25 33 68 76 84 92 100 0
1568 0 99 91 83 75 67 34 26 18 10 2 0
1569 0 3 11 19 27 35 66 74 82 90 98 0
1570 0 97 89 81 72 65 36 29 20 12 4 0
1571 0 60 42 58 44 56 50 49 53 47 46 0
1572 0 41 59 43 57 45 51 52 48 54 55 0
1573 0 96 88 80 73 64 37 28 21 13 5 0
1574 0 6 14 22 30 38 63 71 79 87 95 0
1575 0 94 86 78 70 62 39 31 23 15 7 0
1576 0 8 16 24 32 40 61 69 77 85 93 0
1577 0 0 0 0 0 0 0 0 0 0 0 0
1581 AT_SETUP([MATRIX - MAKE MDIAG MMAX MMIN MOD])
1582 AT_DATA([matrix.sps], [dnl
1584 PRINT MAKE(1, 2, 3).
1585 PRINT MAKE(2, 1, 4).
1586 PRINT MAKE(2, 3, 5).
1588 PRINT MDIAG({1, 2, 3, 4}).
1589 PRINT MDIAG({1; 2; 3; 4}).
1590 PRINT MDIAG({1, 2; 3, 4}).
1592 PRINT MMAX({55, 44; 66, 11}).
1594 PRINT MMIN({55, 44; 66, 11}).
1596 PRINT MOD({5, 4, 3, 2, 1, 0}, 3).
1597 PRINT MOD({5, 4, 3, 2, 1, 0}, -3).
1598 PRINT MOD({-5, -4, -3, -2, -1, 0}, 3).
1599 PRINT MOD({-5, -4, -3, -2, -1, 0}, -3).
1600 PRINT MOD({5, 4, 3, 2, 1, 0}, 1.5) /FORMAT F5.1.
1601 PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
1604 AT_CHECK([pspp matrix.sps], [1], [dnl
1628 matrix.sps:8: error: MATRIX: Function MDIAG argument 1 must be a vector, not a
1631 MMAX({55, 44; 66, 11})
1634 MMIN({55, 44; 66, 11})
1637 MOD({5, 4, 3, 2, 1, 0}, 3)
1640 MOD({5, 4, 3, 2, 1, 0}, -3)
1643 MOD({-5, -4, -3, -2, -1, 0}, 3)
1646 MOD({-5, -4, -3, -2, -1, 0}, -3)
1649 MOD({5, 4, 3, 2, 1, 0}, 1.5)
1652 matrix.sps:19: error: MATRIX: Divisor argument to MOD function must be nonzero.
1656 AT_SETUP([MATRIX - MSSQ MSUM NCOL NROW RANK])
1657 AT_DATA([matrix.sps], [dnl
1659 PRINT MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1661 PRINT MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1663 PRINT NCOL({1, 0; -2, -3; 3, 3}).
1665 PRINT NROW({1, 0; -2, -3; 3, 3}).
1667 PRINT RANK({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1668 PRINT RANK({1, 1, 0, 2; -1, -1, 0, -2}).
1669 PRINT RANK({1, -1; 1, -1; 0, 0; 2, -2}).
1670 PRINT RANK({1, 2, 1; -2, -3, 1; 3, 5, 0}).
1671 PRINT RANK({1, 0, 2; 2, 1, 0; 3, 2, 1}).
1674 AT_CHECK([pspp matrix.sps], [0], [dnl
1675 MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0})
1678 MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0})
1681 NCOL({1, 0; -2, -3; 3, 3})
1684 NROW({1, 0; -2, -3; 3, 3})
1687 RANK({1, 0, 1; -2, -3, 1; 3, 3, 0})
1690 RANK({1, 1, 0, 2; -1, -1, 0, -2})
1693 RANK({1, -1; 1, -1; 0, 0; 2, -2})
1696 RANK({1, 2, 1; -2, -3, 1; 3, 5, 0})
1699 RANK({1, 0, 2; 2, 1, 0; 3, 2, 1})
1704 AT_SETUP([MATRIX - RESHAPE RMAX RMIN RND RNKORDER])
1705 AT_DATA([matrix.sps], [dnl
1707 PRINT RESHAPE(1:12, 1, 12).
1708 PRINT RESHAPE(1:12, 2, 6).
1709 PRINT RESHAPE(1:12, 3, 4).
1710 PRINT RESHAPE(1:12, 4, 3).
1711 PRINT RESHAPE(1:12, 6, 2).
1712 PRINT RESHAPE(1:12, 12, 1).
1714 PRINT RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1716 PRINT RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1718 PRINT RND({-1.6, -1.5, -1.4;
1721 1.4, 1.5, 1.6})/FORMAT F5.1.
1723 PRINT RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5}) /FORMAT F5.1.
1726 AT_CHECK([pspp matrix.sps], [0], [dnl
1727 RESHAPE(1:12, 1, 12)
1728 1 2 3 4 5 6 7 8 9 10 11 12
1753 RESHAPE(1:12, 12, 1)
1767 RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0})
1772 RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0})
1777 RND({-1.6, -1.5, -1.4;
1786 RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5})
1793 AT_SETUP([MATRIX - RSSQ RSUM SIN SOLVE SQRT])
1794 AT_DATA([matrix.sps], [dnl
1796 PRINT RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1797 PRINT RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1799 PRINT SIN({0, .78, 1.57, 2.35, 3.14}) /FORMAT F5.2.
1801 PRINT SOLVE({2, 3; 4, 9}, {6, 2; 15, 5}) /FORMAT=F6.2.
1802 PRINT SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8}) /FORMAT=F6.2.
1803 PRINT SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3}) /FORMAT=F6.2.
1804 PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
1806 PRINT SQRT({0, 1, 2, 3, 4, 9, 81}) /FORMAT=F5.2.
1810 AT_CHECK([pspp matrix.sps], [1], [dnl
1811 RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
1816 RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
1821 SIN({0, .78, 1.57, 2.35, 3.14})
1822 .00 .70 1.00 .71 .00
1824 SOLVE({2, 3; 4, 9}, {6, 2; 15, 5})
1828 SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8})
1833 SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3})
1838 matrix.sps:10: error: MATRIX: SOLVE requires its arguments to have the same
1839 number of rows, but the first argument has dimensions 2×2 and the second 1×2.
1841 SQRT({0, 1, 2, 3, 4, 9, 81})
1842 .00 1.00 1.41 1.73 2.00 3.00 9.00
1844 matrix.sps:13: error: MATRIX: Argument to SQRT must be nonnegative.
1848 AT_SETUP([MATRIX - SSCP SVAL SWEEP TRACE TRANSPOS TRUNC])
1849 AT_DATA([matrix.sps], [dnl
1851 COMPUTE m={1, 2, 3; 4, 5, 6}
1852 COMPUTE sscp1=SSCP(m).
1853 COMPUTE sscp2=T(m)*m.
1855 PRINT (sscp1 <> sscp2).
1857 PRINT SVAL({1, 1; 0, 0})/FORMAT F5.2.
1858 PRINT SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})/FORMAT F5.2.
1859 PRINT SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
1861 PRINT SVAL({2, 4; 1, 3; 0, 0; 0, 0})/FORMAT F5.2.
1863 COMPUTE s0 = {6, 12, 0, 12; 12, 28, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
1864 PRINT SWEEP(s0, 1)/FORMAT F5.2.
1865 PRINT SWEEP(SWEEP(s0, 1), 2)/FORMAT F5.2.
1866 PRINT SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)/FORMAT F5.2.
1868 COMPUTE s1 = {6, 12, 0, 12; 12, 0, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
1871 COMPUTE s2 = {0, 1, 2; 3, 4, 5; 6, 7, 8}.
1880 PRINT ALL(T(T(s0)) = s0).
1882 PRINT TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
1883 PRINT TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
1886 AT_CHECK([pspp matrix.sps], [0], [dnl
1901 SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})
1906 SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
1912 SVAL({2, 4; 1, 3; 0, 0; 0, 0})
1920 -2.00 1.00 2.00 4.00
1922 SWEEP(SWEEP(s0, 1), 2)
1926 -1.50 -.25 2.00 3.75
1928 SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)
1932 -1.50 -.25 -.33 3.08
1946 -.7500000000 -.2500000000 .7500000000
1947 .7500000000 .2500000000 1.2500000000
1948 .7500000000 -1.7500000000 -.7500000000
1951 -1.5000000000 -.7500000000 -.2500000000
1952 -.7500000000 -.3750000000 -.6250000000
1953 .7500000000 .8750000000 .1250000000
1973 TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
1977 TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
1983 AT_SETUP([MATRIX - UNIFORM])
1984 AT_DATA([matrix.sps], [dnl
1987 PRINT (UNIFORM(4, 5)*10)/FORMAT F5.2.
1990 AT_CHECK([pspp matrix.sps], [0], [dnl
1992 7.71 2.99 .21 4.95 6.34
1993 4.43 7.49 8.32 4.99 5.83
1994 2.25 .25 1.98 7.09 7.61
1995 2.66 1.69 2.64 .88 1.50
1999 AT_SETUP([MATRIX - CALL SETDIAG])
2000 AT_DATA([matrix.sps], [dnl
2002 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
2005 CALL SETDIAG(x1, 10).
2009 CALL SETDIAG(x2, {10, 11}).
2013 CALL SETDIAG(x3, {10, 11, 12}).
2017 CALL SETDIAG(x4, {10, 11, 12, 13}).
2021 CALL SETDIAG(x5, {10, 11; 12, 13}).
2026 AT_CHECK([pspp matrix.sps], [1], [dnl
2047 matrix.sps:21: error: MATRIX: SETDIAG argument 2 must be a scalar or a vector,
2057 dnl I have some doubts about the correctness of the results below.
2058 AT_SETUP([MATRIX - CALL EIGEN])
2059 AT_DATA([matrix.sps], [dnl
2061 CALL EIGEN({1, 0; 0, 1}, evec, eval).
2065 CALL EIGEN({3, 2, 4; 2, 0, 2; 4, 2, 3}, evec2, eval2).
2070 AT_CHECK([pspp matrix.sps], [0], [dnl
2080 -.6666666667 .0000000000 .7453559925
2081 -.3333333333 -.8944271910 -.2981423970
2082 -.6666666667 .4472135955 -.5962847940
2091 AT_SETUP([MATRIX - CALL SVD])
2092 AT_DATA([matrix.sps], [dnl
2094 CALL SVD({3, 2, 2; 2, 3, -2}, u, s, v).
2095 PRINT (u * s * T(v))/FORMAT F5.1.
2097 CALL SVD({2, 4; 1, 3; 0, 0; 0, 0}, u, s, v).
2098 PRINT (u*s*T(v))/FORMAT F5.1.
2100 CALL SVD({-3, 1; 6, -2; 6, -2}, u, s, v).
2101 PRINT (u*s*T(v))/FORMAT F5.1.
2104 AT_CHECK([pspp matrix.sps], [0], [dnl
2122 AT_SETUP([MATRIX - PRINT])
2123 AT_DATA([matrix.sps], [dnl
2125 PRINT/TITLE="title 1".
2126 PRINT/SPACE=2/TITLE="title 2".
2128 COMPUTE m={1, 2, 3; 3, 4, 5; 6, 7, 8}.
2129 PRINT m/RLABELS=123, a b c, long name.
2130 PRINT m/RNAMES={'123', 'a b c', 'long name'}.
2131 PRINT m/CLABELS=col1, col2, long column name.
2132 PRINT m/CNAMES={'col1', 'col2', 'long column name'}.
2133 PRINT m/RLABELS=123, a b c, long name
2134 /CLABELS=col1, col2, long column name.
2135 PRINT m/RNAMES={'123', 'a b c', 'long name'}
2136 /CNAMES={'col1', 'col2', 'long column name'}.
2137 PRINT {123e10, 456e10, 500}.
2141 AT_DATA([matrix-tables.sps], [dnl
2142 SET MDISPLAY=TABLES.
2143 INCLUDE 'matrix.sps'.
2146 AT_CHECK([pspp matrix.sps], [0], [dnl
2187 {123e10, 456e10, 500}
2189 1.2300000000 4.5600000000 .0000000005
2192 AT_CHECK([pspp matrix-tables.sps], [0], [dnl
2214 +----+----+----------------+
2215 |col1|col2|long column name|
2216 +----+----+----------------+
2220 +----+----+----------------+
2223 +----+----+--------+
2224 |col1|col2|long col|
2225 +----+----+--------+
2229 +----+----+--------+
2232 +---------+----+----+----------------+
2233 | |col1|col2|long column name|
2234 +---------+----+----+----------------+
2237 |long name| 6| 7| 8|
2238 +---------+----+----+----------------+
2241 +--------+----+----+--------+
2242 | |col1|col2|long col|
2243 +--------+----+----+--------+
2247 +--------+----+----+--------+
2249 {123e10, 456e10, 500}
2250 +----------------------------------------------+
2251 |1.2300000000[[a]] 4.5600000000[[a]] .0000000005[[a]]|
2252 +----------------------------------------------+
2257 AT_SETUP([MATRIX - DO IF])
2258 AT_DATA([matrix.sps], [dnl
2286 AT_CHECK([pspp matrix.sps], [1], [dnl
2293 matrix.sps:21: error: MATRIX: Expression for DO IF must evaluate to scalar, not
2296 matrix.sps:25: error: MATRIX: Expression for ELSE IF must evaluate to scalar,
2301 AT_SETUP([MATRIX - unbounded LOOP])
2302 AT_DATA([matrix.sps], [dnl
2304 * Truly unbounded loop.
2314 * Unbounded loop terminates with BREAK.
2329 AT_CHECK([pspp matrix.sps], [0], [dnl
2334 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2335 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2342 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2347 AT_SETUP([MATRIX - indexed or conditional LOOP])
2348 AT_DATA([matrix.sps], [dnl
2350 * Indexed loop terminates based on index.
2358 * Indexed loop terminates based on MXLOOPS.
2366 * Indexed loop terminates with BREAK.
2377 * Indexed loop terminates with top IF.
2379 LOOP x=1 TO 50 IF NCOL(y) < 15.
2385 * Indexed loop terminates with bottom IF.
2389 END LOOP IF NCOL(y) >= 22.
2406 LOOP i=1 TO NROW(indexing).
2408 LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
2411 PRINT {indexing(i, :), y}.
2420 LOOP i=5 TO 8 BY {}.
2429 LOOP i=1e100 to 1e200.
2433 AT_CHECK([pspp matrix.sps], [1], [dnl
2438 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2445 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2446 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2453 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2460 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2466 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2470 1 10 1 1 2 3 4 5 6 7 8 9 10
2480 10 1 -1 10 9 8 7 6 5 4 3 2 1
2490 matrix.sps:67: error: MATRIX: Expression for LOOP must evaluate to scalar, not
2493 matrix.sps:70: error: MATRIX: Expression for TO must evaluate to scalar, not a
2496 matrix.sps:73: error: MATRIX: Expression for BY must evaluate to scalar, not a
2499 matrix.sps:76: error: MATRIX: Expression for LOOP IF must evaluate to scalar,
2502 matrix.sps:79: error: MATRIX: Expression for END LOOP IF must evaluate to
2503 scalar, not a 0×0 matrix.
2505 matrix.sps:82: error: MATRIX: Expression for LOOP is outside the integer range.
2509 AT_SETUP([MATRIX - BREAK outside LOOP])
2510 AT_DATA([matrix.sps], [dnl
2515 AT_CHECK([pspp matrix.sps], [1], [dnl
2516 matrix.sps:2: error: BREAK: BREAK not inside LOOP.
2520 AT_SETUP([MATRIX - READ])
2521 AT_DATA([matrix.txt], [dnl
2547 AT_DATA([matrix2.txt], [dnl
2553 AT_DATA([matrix3.txt], [dnl
2560 AT_DATA([matrix.sps], [dnl
2562 READ x/FILE='matrix.txt'/SIZE=4/FIELD=1 TO 1.
2564 READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
2566 READ x/SIZE={2,4}/FIELD=1 TO 80.
2568 READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
2570 READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
2573 READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
2575 READ x/SIZE={2,3}/FIELD=1 TO 20/FORMAT=DOLLAR.
2577 READ x/SIZE={2,4}/FIELD=1 TO 20/FORMAT=DOLLAR5.1.
2579 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4PCT'.
2581 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4A'.
2585 LOOP IF NOT EOF('matrix2.txt').
2586 READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
2591 COMPUTE m = MAKE(5, 5, 0).
2593 READ count /FILE='matrix3.txt' /FIELD=1 TO 1 /SIZE=1.
2594 READ m(i, 1:count) /FIELD=3 TO 100 /REREAD.
2599 AT_CHECK([pspp matrix.sps], [0], [dnl
2658 AT_SETUP([MATRIX - READ - negative])
2659 AT_DATA([matrix.sps], [dnl
2666 READ x/FIELD=1 TO !.
2667 READ x/FIELD=1 TO 0.
2668 READ x/FIELD=1 TO 10 BY !.
2669 READ x/FIELD=1 TO 10 BY 6.
2673 READ x/FORMAT=F8.2/FORMAT=F8.2.
2674 READ x/FORMAT='5XYZZY'.
2675 READ x/FORMAT=XYZZY.
2678 READ x/FIELD=1 TO 10.
2679 READ x/FIELD=1 TO 10/SIZE={1,2}.
2680 READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
2681 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
2682 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
2683 READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
2684 READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
2685 READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
2687 READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
2688 READ x/FIELD=1 TO 10/SIZE={1,3}/FILE='matrix.txt'/MODE=SYMMETRIC.
2689 READ x/FIELD=1 TO 10/SIZE=2/FILE='matrix.txt'.
2692 AT_DATA([matrix.txt], [dnl
2696 AT_CHECK([pspp matrix.sps], [1], [dnl
2697 matrix.sps:2.6: error: READ: Syntax error at `!': expecting identifier.
2699 matrix.sps:3.13: error: READ: Syntax error at `!': expecting a file name or
2702 matrix.sps:4.17: error: READ: Syntax error at `!': expecting string.
2704 matrix.sps:5.14: error: READ: Syntax error at `!': Expected positive integer
2707 matrix.sps:6.16: error: READ: Syntax error at `!': expecting `TO'.
2709 matrix.sps:7.19: error: READ: Syntax error at `!': Expected positive integer
2712 matrix.sps:8.19: error: READ: Syntax error at `0': Expected positive integer
2715 matrix.sps:9.25: error: READ: Syntax error at `!': Expected integer between 1
2718 matrix.sps:10: error: READ: BY 6 does not evenly divide record width 10.
2720 matrix.sps:11.13: error: READ: Syntax error at `!'.
2722 matrix.sps:12.13: error: READ: Syntax error at `!': expecting RECTANGULAR or
2725 matrix.sps:13.15: error: READ: Syntax error at `!': expecting identifier.
2727 matrix.sps:14: error: READ: Subcommand FORMAT may only be specified once.
2729 matrix.sps:15.15-15.22: error: READ: Syntax error at `'5XYZZY'': Unknown format
2732 matrix.sps:16: error: READ: Unknown format type `XYZZY'.
2734 matrix.sps:17.8: error: READ: Syntax error at `!': expecting FILE, FIELD, MODE,
2737 matrix.sps:18: error: READ: Required subcommand FIELD was not specified.
2739 matrix.sps:19: error: READ: SIZE is required for reading data into a full
2740 matrix (as opposed to a submatrix).
2742 matrix.sps:20: error: READ: Required subcommand FILE was not specified.
2744 matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
2746 matrix.sps:22: error: READ: FORMAT specifies field width 5 but BY specifies 2.
2748 matrix.sps:23: error: READ: FORMAT specifies 2 repetitions with record width
2749 10, which implies field width 5, but BY specifies field width 2.
2751 matrix.sps:24: error: MATRIX: SIZE must evaluate to a scalar or a 2-element
2752 vector, not a 2×2 matrix.
2754 matrix.sps:25: error: MATRIX: SIZE must evaluate to a scalar or a 2-element
2755 vector, not a 1×3 matrix.
2757 matrix.sps:26: error: MATRIX: Matrix dimensions -1×1 specified on SIZE are
2758 outside valid range.
2760 matrix.sps:28: error: MATRIX: Matrix dimensions 2×2 specified on SIZE differ
2761 from submatrix dimensions 1×3.
2763 matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
2766 matrix.txt:1.1-1.4: warning: Error reading "xyzzy" as format F for matrix row
2767 1, column 1: Field contents are not numeric.
2769 matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
2770 1: Matrix data may not contain missing value.
2774 AT_SETUP([MATRIX - WRITE])
2775 AT_DATA([matrix.sps], [dnl
2777 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
2778 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
2779 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
2780 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
2781 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
2782 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
2783 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
2784 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
2785 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
2788 AT_CHECK([pspp matrix.sps])
2789 AT_CHECK([cat matrix.txt], [0], [dnl
2811 AT_SETUP([MATRIX - WRITE - negative])
2812 AT_DATA([matrix.sps], [dnl
2819 WRITE 1/FIELD=1 TO 0.
2820 WRITE 1/FIELD=1 TO 10 BY 20.
2821 WRITE 1/FIELD=1 TO 10 BY 6.
2822 WRITE 1/MODE=TRAPEZOIDAL.
2823 WRITE 1/FORMAT=F5/FORMAT=F5.
2824 WRITE 1/FORMAT='5ASDF'.
2825 WRITE 1/FORMAT=ASDF5.
2828 WRITE 1/FIELD=1 TO 10.
2829 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
2830 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
2831 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
2832 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
2833 WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
2836 AT_CHECK([pspp matrix.sps], [1], [dnl
2837 matrix.sps:2.7: error: WRITE: Syntax error at `!'.
2839 matrix.sps:3.17: error: WRITE: Syntax error at `!': expecting a file name or
2842 matrix.sps:4.18: error: WRITE: Syntax error at `!': expecting string.
2844 matrix.sps:5.15: error: WRITE: Syntax error at `!': Expected positive integer
2847 matrix.sps:6.17: error: WRITE: Syntax error at `!': expecting `TO'.
2849 matrix.sps:7.20: error: WRITE: Syntax error at `0': Expected positive integer
2852 matrix.sps:8.26-8.27: error: WRITE: Syntax error at `20': Expected integer
2853 between 1 and 10 for BY.
2855 matrix.sps:9: error: WRITE: BY 6 does not evenly divide record width 10.
2857 matrix.sps:10.14-10.24: error: WRITE: Syntax error at `TRAPEZOIDAL': expecting
2858 RECTANGULAR or TRIANGULAR.
2860 matrix.sps:11: error: WRITE: Subcommand FORMAT may only be specified once.
2862 matrix.sps:12.16-12.22: error: WRITE: Syntax error at `'5ASDF'': Unknown format
2865 matrix.sps:13: error: WRITE: Unknown format type `ASDF'.
2867 matrix.sps:14.9: error: WRITE: Syntax error at `!': expecting OUTFILE, FIELD,
2868 MODE, HOLD, or FORMAT.
2870 matrix.sps:15: error: WRITE: Required subcommand FIELD was not specified.
2872 matrix.sps:16: error: WRITE: Required subcommand OUTFILE was not specified.
2874 matrix.sps:17: error: WRITE: 15 repetitions cannot fit in record width 10.
2876 matrix.sps:18: error: WRITE: FORMAT specifies 5 repetitions with record width
2877 10, which implies field width 2, but BY specifies field width 5.
2879 matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
2880 requires a width between 6 and 40.
2882 matrix.sps:20: error: WRITE: Format A9 is too wide for 8-byte matrix eleemnts.
2884 matrix.sps:21: error: MATRIX: WRITE with MODE=TRIANGULAR requires a square
2885 matrix but the matrix to be written has dimensions 1×2.
2889 AT_SETUP([MATRIX - GET])
2890 AT_DATA([matrix.sps], [dnl
2891 DATA LIST LIST NOTABLE /a b c.
2892 MISSING VALUES a(1) b(5).
2901 GET x0 /NAMES=names0.
2903 PRINT names0/FORMAT=A8.
2907 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
2909 PRINT names1/FORMAT=A8.
2913 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
2915 PRINT names2/FORMAT=A8.
2919 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
2921 PRINT names3/FORMAT=A8.
2925 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
2927 PRINT names4/FORMAT=A8.
2930 SAVE OUTFILE='matrix.sav'.
2934 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
2936 PRINT names5/FORMAT=A8.
2940 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
2942 PRINT names6/FORMAT=A8.
2946 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
2948 PRINT names7/FORMAT=A8.
2951 AT_CHECK([pspp matrix.sps], [1], [dnl
2952 matrix.sps:11: error: MATRIX: GET: Variable a in case 2 has user-missing value
2955 matrix.sps:12: error: MATRIX: Uninitialized variable x0 used in expression.
2962 matrix.sps:17: error: MATRIX: GET: Variable c in case 4 is system-missing.
2964 matrix.sps:18: error: MATRIX: Uninitialized variable x1 used in expression.
2979 matrix.sps:29: error: MATRIX: GET: Variable c in case 4 is system-missing.
2981 matrix.sps:30: error: MATRIX: Uninitialized variable x3 used in expression.
2998 matrix.sps:44: error: MATRIX: GET: Variable c in case 4 is system-missing.
3000 matrix.sps:45: error: MATRIX: Uninitialized variable x5 used in expression.
3030 AT_SETUP([MATRIX - GET - negative])
3031 AT_DATA([matrix.sps], [dnl
3032 DATA LIST LIST NOTABLE /a b c * d(a1).
3033 MISSING VALUES a(1) b(5).
3040 SAVE OUTFILE='matrix.sav'.
3052 GET x/VARIABLES=x TO !.
3054 GET x/VARIABLES=c TO a.
3064 AT_CHECK([pspp matrix.sps], [1], [dnl
3065 matrix.sps:12.5: error: GET: Syntax error at `!': expecting identifier.
3067 matrix.sps:13.17: error: GET: Syntax error at `!': expecting variable name.
3069 matrix.sps:14.12: error: GET: Syntax error at `!': expecting a file name or
3072 matrix.sps:15.16: error: GET: Syntax error at `!': expecting string.
3074 matrix.sps:16.13: error: GET: Syntax error at `!': expecting identifier.
3076 matrix.sps:17.15: error: GET: Syntax error at `!'.
3078 matrix.sps:18.14: error: GET: Syntax error at `!'.
3080 matrix.sps:19.7: error: GET: Syntax error at `!': expecting FILE, VARIABLES,
3081 NAMES, MISSING, or SYSMIS.
3083 matrix.sps:20.17: error: GET: Syntax error at `!': expecting variable name.
3085 matrix.sps:21.22: error: GET: Syntax error at `!': expecting variable name.
3087 matrix.sps:22: error: MATRIX: x is not a variable name.
3089 matrix.sps:23: error: MATRIX: c TO a is not valid syntax since c precedes a in
3092 matrix.sps:24: warning: MATRIX: d is not a numeric variable.
3094 matrix.sps:25: error: MATRIX: GET: Variable d is not numeric.
3096 error: The GET command cannot read an empty active file.
3100 AT_SETUP([MATRIX - SAVE])
3101 AT_DATA([matrix.sps], [dnl
3103 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3104 SAVE {7,8,9}/VARIABLES=a b c d.
3106 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3107 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3109 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3110 SAVE {4,'xyzw',6}/STRINGS=a, b.
3113 AT_CHECK([pspp matrix.sps])
3114 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3120 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3125 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
3132 AT_SETUP([MATRIX - SAVE - inline])
3133 AT_DATA([matrix.sps], [dnl
3135 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
3136 SAVE {7,8,9}/VARIABLES=a b c d.
3141 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
3142 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3147 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
3148 SAVE {4,'xyzw',6}/STRINGS=a, b.
3152 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3171 AT_SETUP([MATRIX - SAVE - negative])
3172 AT_DATA([matrix.sps], [dnl
3180 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
3181 SAVE 1/OUTFILE='matrix2.sav'.
3182 SAVE {1,2}/OUTFILE='matrix2.sav'.
3183 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
3184 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
3185 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
3188 AT_CHECK([pspp matrix.sps], [1], [dnl
3189 matrix.sps:2.6: error: SAVE: Syntax error at `!'.
3191 matrix.sps:3.16: error: SAVE: Syntax error at `!': expecting a file name or
3194 matrix.sps:4.18: error: SAVE: Syntax error at `!': expecting variable name.
3196 matrix.sps:5.14: error: SAVE: Syntax error at `!'.
3198 matrix.sps:6.8: error: SAVE: Syntax error at `!': expecting OUTFILE, VARIABLES,
3201 matrix.sps:7: error: SAVE: Required subcommand OUTFILE was not specified.
3203 matrix.sps:8: warning: SAVE: VARIABLES and NAMES both specified; ignoring
3206 error: The first SAVE to `matrix2.sav' within this matrix program had 1
3207 columns, so a 1×2 matrix cannot be saved to it.
3209 error: Duplicate variable name a in SAVE statement.
3211 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
3213 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
3218 AT_SETUP([MATRIX - MGET])
3219 AT_DATA([matrix.sps], [dnl
3221 VARIABLES=ROWTYPE_ var01 TO var08.
3223 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
3224 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
3225 N 92 92 92 92 92 92 92 92
3229 CORR .36 .31 -.14 1.00
3230 CORR .27 .16 -.12 .22 1.00
3231 CORR .33 .15 -.17 .24 .21 1.00
3232 CORR .50 .29 -.20 .32 .12 .38 1.00
3233 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
3238 PRINT MN/FORMAT=F5.1.
3239 PRINT SD/FORMAT=F5.1.
3240 PRINT NC/FORMAT=F5.0.
3241 PRINT CR/FORMAT=F5.2.
3244 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3245 Table: Matrix Variables Created by MGET
3254 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
3257 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
3260 92 92 92 92 92 92 92 92
3263 1.00 .18 -.22 .36 .27 .33 .50 .17
3264 .18 1.00 -.17 .31 .16 .15 .29 .29
3265 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
3266 .36 .31 -.14 1.00 .22 .24 .32 .20
3267 .27 .16 -.12 .22 1.00 .21 .12 .27
3268 .33 .15 -.17 .24 .21 1.00 .38 .20
3269 .50 .29 -.20 .32 .12 .38 1.00 .04
3270 .17 .29 -.05 .20 .27 .20 .04 1.00
3274 AT_SETUP([MATRIX - MGET with split variables])
3275 AT_DATA([matrix.sps], [dnl
3277 variables = s1 s2 rowtype_ var01 var02 var03
3281 8 0 mean 21.4 5.0 72.9
3286 8 0 corr -.16 -.22 1
3287 8 1 mean 11.4 1.0 52.9
3297 PRINT MNS1/FORMAT=F5.1.
3298 PRINT SDS1/FORMAT=F5.1.
3299 PRINT NCS1/FORMAT=F5.0.
3300 PRINT CRS1/FORMAT=F5.2.
3301 PRINT MNS2/FORMAT=F5.1.
3302 PRINT SDS2/FORMAT=F5.1.
3303 PRINT NCS2/FORMAT=F5.0.
3304 PRINT CRS2/FORMAT=F5.2.
3307 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
3308 Table: Matrix Variables Created by MGET
3309 ,Split Values,,Dimensions,
3350 AT_SETUP([MATRIX - MGET with factor variables])
3351 AT_DATA([matrix.sps], [dnl
3353 VARIABLES=ROWTYPE_ f1 var01 TO var04
3367 FORMATS var01 TO var04(F5.1).
3368 SAVE OUTFILE='matrix.sav'.
3370 AT_DATA([matrix2.sps], [dnl
3372 MGET FILE='matrix.sav'.
3373 PRINT MNF1/FORMAT=F2.0.
3374 PRINT SDF1/FORMAT=F2.0.
3375 PRINT NCF1/FORMAT=F2.0.
3376 PRINT MNF2/FORMAT=F2.0.
3377 PRINT SDF2/FORMAT=F2.0.
3378 PRINT NCF2/FORMAT=F2.0.
3379 PRINT CR/FORMAT=F3.1.
3382 AT_CHECK([pspp matrix.sps])
3383 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
3384 Table: Matrix Variables Created by MGET
3385 ,Factors,Dimensions,
3421 AT_SETUP([MATRIX - MGET with factor and split variables])
3422 AT_DATA([matrix.sps], [dnl
3424 variables = s f rowtype_ var01 var02 var03
3429 8 0 mean 21.4 5.0 72.9
3434 8 . corr -.16 -.22 1
3435 9 1 mean 11.4 1.0 52.9
3445 PRINT MNF1S1/FORMAT=F5.1.
3446 PRINT SDF1S1/FORMAT=F5.1.
3447 PRINT NCF1S1/FORMAT=F5.0.
3448 PRINT CRS1/FORMAT=F5.2.
3449 PRINT MNF1S2/FORMAT=F5.1.
3450 PRINT SDF1S2/FORMAT=F5.1.
3451 PRINT NCF1S2/FORMAT=F5.0.
3452 PRINT CRS2/FORMAT=F5.2.
3455 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3456 Table: Matrix Variables Created by MGET
3457 ,Split Values,Factors,Dimensions,
3498 AT_SETUP([MATRIX - MGET with TYPE])
3499 AT_DATA([matrix.sps], [dnl
3501 VARIABLES=ROWTYPE_ f1 var01 TO var04
3515 FORMATS var01 TO var04(F5.1).
3516 SAVE OUTFILE='matrix.sav'.
3518 AT_DATA([matrix2.sps], [dnl
3520 MGET/FILE='matrix.sav'/TYPE=CORR.
3521 PRINT CR/FORMAT=F3.1.
3524 AT_CHECK([pspp matrix.sps])
3525 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
3526 Table: Matrix Variables Created by MGET
3527 ,Factors,Dimensions,
3539 AT_SETUP([MATRIX - MGET - negative - parsing])
3540 AT_DATA([matrix.sps], [dnl
3549 AT_CHECK([pspp matrix.sps], [1], [dnl
3550 matrix.sps:2.6: error: MGET: Syntax error at `!': expecting FILE or TYPE.
3552 matrix.sps:3.11: error: MGET: Syntax error at `!': expecting a file name or
3555 matrix.sps:4.15: error: MGET: Syntax error at `!': expecting string.
3557 matrix.sps:5.11: error: MGET: Syntax error at `!': expecting COV, CORR, MEAN,
3558 STDDEV, N, or COUNT.
3560 matrix.sps:6.16: error: MGET: Syntax error at `!': expecting COV, CORR, MEAN,
3561 STDDEV, N, or COUNT.
3565 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
3566 AT_DATA([matrix.sps], [dnl
3567 DATA LIST LIST NOTABLE /x.
3576 AT_CHECK([pspp matrix.sps], [1], [dnl
3577 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
3579 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
3583 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
3584 AT_DATA([matrix.sps], [dnl
3585 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
3594 AT_CHECK([pspp matrix.sps], [1], [dnl
3595 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
3596 byte string, but it has width 7.
3598 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
3599 byte string, but it has width 0.
3603 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
3604 AT_DATA([matrix.sps], [dnl
3605 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
3614 AT_CHECK([pspp matrix.sps], [1], [dnl
3615 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
3620 AT_SETUP([MATRIX - MGET - no continuous variables])
3621 AT_DATA([matrix.sps], [dnl
3622 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
3631 AT_CHECK([pspp matrix.sps], [1], [dnl
3632 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
3636 AT_SETUP([MATRIX - MGET - unexpected string variables])
3637 AT_DATA([matrix.sps], [dnl
3638 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
3647 AT_CHECK([pspp matrix.sps], [1], [dnl
3648 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
3653 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
3654 AT_DATA([matrix.sps], [dnl
3655 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
3664 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
3665 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
3669 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
3670 AT_DATA([matrix.sps], [dnl
3671 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
3681 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3682 Table: Matrix Variables Created by MGET
3687 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
3691 AT_SETUP([MATRIX - MGET - missing values in input])
3692 AT_DATA([matrix.sps], [dnl
3693 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
3701 PRINT ncs1/FORMAT=F5.
3702 PRINT ncs2/FORMAT=F5.
3705 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
3706 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
3708 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
3710 Table: Matrix Variables Created by MGET
3711 ,Split Values,Dimensions,
3724 AT_SETUP([MATRIX - MSAVE])
3725 AT_DATA([matrix.sps], [dnl
3727 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
3728 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
3729 MSAVE {11, 12}/TYPE=MEAN.
3730 MSAVE {13, 14}/TYPE=STDDEV.
3731 MSAVE {15, 16}/TYPE=N.
3732 MSAVE {17, 18}/TYPE=COUNT.
3737 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3739 ROWTYPE_,VARNAME_,X,Y
3752 AT_SETUP([MATRIX - MSAVE with factor variables])
3753 AT_DATA([matrix.sps], [dnl
3755 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
3756 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
3757 MSAVE {11, 12}/TYPE=MEAN.
3758 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
3759 MSAVE {15, 16}/TYPE=N.
3760 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
3766 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
3771 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3773 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
3774 CORR,1.00,1.00,COL1,1.00,2.00
3775 CORR,1.00,1.00,COL2,3.00,4.00
3776 COV,1.00,1.00,COL1,5.00,6.00
3777 COV,1.00,1.00,COL2,7.00,8.00
3778 COV,1.00,1.00,,9.00,10.00
3779 MEAN,1.00,1.00,,11.00,12.00
3780 STDDEV,2.00,1.00,,13.00,14.00
3781 N,2.00,1.00,,15.00,16.00
3782 COUNT,1.00,2.00,,17.00,18.00
3785 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
3786 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
3787 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
3791 AT_SETUP([MATRIX - MSAVE with split variables])
3792 AT_DATA([matrix.sps], [dnl
3794 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
3795 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
3796 MSAVE {11, 12}/TYPE=MEAN.
3797 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
3798 MSAVE {15, 16}/TYPE=N.
3799 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
3805 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
3810 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3812 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
3813 1.00,1.00,CORR,COL1,1.00,2.00
3814 1.00,1.00,CORR,COL2,3.00,4.00
3815 1.00,1.00,COV,COL1,5.00,6.00
3816 1.00,1.00,COV,COL2,7.00,8.00
3817 1.00,1.00,COV,,9.00,10.00
3818 1.00,1.00,MEAN,,11.00,12.00
3819 2.00,1.00,STDDEV,,13.00,14.00
3820 2.00,1.00,N,,15.00,16.00
3821 1.00,2.00,COUNT,,17.00,18.00
3824 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
3825 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
3826 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
3830 AT_SETUP([MATRIX - MSAVE with factor and split variables])
3831 AT_DATA([matrix.sps], [dnl
3833 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
3834 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
3835 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
3836 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
3837 MSAVE {15, 16}/TYPE=N.
3838 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
3843 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3845 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
3846 1.00,CORR,1.00,COL1,1.00,2.00
3847 1.00,CORR,1.00,COL2,3.00,4.00
3848 1.00,COV,1.00,COL1,5.00,6.00
3849 1.00,COV,1.00,COL2,7.00,8.00
3850 1.00,COV,1.00,,9.00,10.00
3851 1.00,MEAN,2.00,,11.00,12.00
3852 2.00,STDDEV,1.00,,13.00,14.00
3853 2.00,N,1.00,,15.00,16.00
3854 2.00,COUNT,2.00,,17.00,18.00
3858 AT_SETUP([MATRIX - MSAVE - negative])
3859 AT_DATA([matrix.sps], [dnl
3864 MSAVE 1/VARIABLES=!.
3871 MSAVE 1/TYPE=COV/FNAMES=x.
3872 MSAVE 1/TYPE=COV/SNAMES=x.
3875 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
3879 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
3880 MSAVE 1/TYPE=COV/VARIABLES=x.
3881 MSAVE 1/TYPE=COV/FNAMES=x.
3882 MSAVE 1/TYPE=COV/SNAMES=x.
3886 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
3887 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
3888 MSAVE {1,2;3}/TYPE=COV.
3889 MSAVE 0/TYPE=COV/FACTOR={1,2}.
3890 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
3894 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
3898 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
3902 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
3906 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
3910 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
3911 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
3912 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
3913 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
3914 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
3915 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
3918 AT_CHECK([pspp matrix.sps], [1], [dnl
3919 matrix.sps:2.7: error: MSAVE: Syntax error at `!'.
3921 matrix.sps:3.14: error: MSAVE: Syntax error at `!': expecting COV, CORR, MEAN,
3922 STDDEV, N, or COUNT.
3924 matrix.sps:4.17: error: MSAVE: Syntax error at `!': expecting a file name or
3927 matrix.sps:5.19: error: MSAVE: Syntax error at `!': expecting variable name.
3929 matrix.sps:6.16: error: MSAVE: Syntax error at `!': expecting variable name.
3931 matrix.sps:7.16: error: MSAVE: Syntax error at `!': expecting variable name.
3933 matrix.sps:8.15: error: MSAVE: Syntax error at `!'.
3935 matrix.sps:9.16: error: MSAVE: Syntax error at `!'.
3937 matrix.sps:10.9: error: MSAVE: Syntax error at `!': expecting TYPE, OUTFILE,
3938 VARIABLES, FNAMES, SNAMES, SPLIT, or FACTOR.
3940 matrix.sps:11: error: MSAVE: Required subcommand TYPE was not specified.
3942 matrix.sps:12: error: MSAVE: FNAMES requires FACTOR.
3944 matrix.sps:13: error: MSAVE: SNAMES requires SPLIT.
3946 matrix.sps:14: error: MSAVE: Required subcommand OUTFILE was not specified.
3948 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
3949 within a single MATRIX command.
3951 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables each
3952 time within a given MATRIX.
3954 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables each time
3955 within a given MATRIX.
3957 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables each time
3958 within a given MATRIX.
3960 matrix.sps:28: error: MATRIX: Matrix on MSAVE has 2 columns but there are 1
3963 matrix.sps:29: error: MATRIX: All rows in a matrix must have the same number of
3964 columns, but this tries to stack matrices with 2 and 1 columns.
3966 matrix.sps:30: error: MATRIX: There are 1 factor variables, but 2 factor values
3969 matrix.sps:31: error: MATRIX: There are 1 split variables, but 2 split values
3972 matrix.sps:35: error: MSAVE: Variable x appears twice in variable list.
3974 matrix.sps:39: error: MATRIX: Duplicate or invalid FACTOR variable name x.
3976 matrix.sps:43: error: MATRIX: Duplicate or invalid variable name x.
3978 matrix.sps:47: error: MATRIX: Duplicate or invalid variable name x.
3980 matrix.sps:51: error: MSAVE: Variable name VARNAME_ is reserved.
3982 matrix.sps:52: error: MSAVE: Variable name ROWTYPE_ is reserved.
3984 matrix.sps:53: error: MSAVE: Variable name VARNAME_ is reserved.
3986 matrix.sps:54: error: MSAVE: Variable name ROWTYPE_ is reserved.
3988 matrix.sps:55: error: MSAVE: Variable name VARNAME_ is reserved.
3990 matrix.sps:56: error: MSAVE: Variable name ROWTYPE_ is reserved.