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], [1], [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})
1483 error: Argument 1 to matrix function LN has invalid value 0. This argument
1484 must be greater than 0.
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 error: Argument 1 to matrix function SQRT has invalid value -1. This argument
1845 must be greater than or equal to 0.
1849 AT_SETUP([MATRIX - SSCP SVAL SWEEP TRACE TRANSPOS TRUNC])
1850 AT_DATA([matrix.sps], [dnl
1852 COMPUTE m={1, 2, 3; 4, 5, 6}
1853 COMPUTE sscp1=SSCP(m).
1854 COMPUTE sscp2=T(m)*m.
1856 PRINT (sscp1 <> sscp2).
1858 PRINT SVAL({1, 1; 0, 0})/FORMAT F5.2.
1859 PRINT SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})/FORMAT F5.2.
1860 PRINT SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
1862 PRINT SVAL({2, 4; 1, 3; 0, 0; 0, 0})/FORMAT F5.2.
1864 COMPUTE s0 = {6, 12, 0, 12; 12, 28, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
1865 PRINT SWEEP(s0, 1)/FORMAT F5.2.
1866 PRINT SWEEP(SWEEP(s0, 1), 2)/FORMAT F5.2.
1867 PRINT SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)/FORMAT F5.2.
1869 COMPUTE s1 = {6, 12, 0, 12; 12, 0, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
1872 COMPUTE s2 = {0, 1, 2; 3, 4, 5; 6, 7, 8}.
1881 PRINT ALL(T(T(s0)) = s0).
1883 PRINT TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
1884 PRINT TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
1887 AT_CHECK([pspp matrix.sps], [0], [dnl
1902 SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})
1907 SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
1913 SVAL({2, 4; 1, 3; 0, 0; 0, 0})
1921 -2.00 1.00 2.00 4.00
1923 SWEEP(SWEEP(s0, 1), 2)
1927 -1.50 -.25 2.00 3.75
1929 SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)
1933 -1.50 -.25 -.33 3.08
1947 -.7500000000 -.2500000000 .7500000000
1948 .7500000000 .2500000000 1.2500000000
1949 .7500000000 -1.7500000000 -.7500000000
1952 -1.5000000000 -.7500000000 -.2500000000
1953 -.7500000000 -.3750000000 -.6250000000
1954 .7500000000 .8750000000 .1250000000
1974 TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
1978 TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
1984 AT_SETUP([MATRIX - UNIFORM])
1985 AT_DATA([matrix.sps], [dnl
1988 PRINT (UNIFORM(4, 5)*10)/FORMAT F5.2.
1991 AT_CHECK([pspp matrix.sps], [0], [dnl
1993 7.71 2.99 .21 4.95 6.34
1994 4.43 7.49 8.32 4.99 5.83
1995 2.25 .25 1.98 7.09 7.61
1996 2.66 1.69 2.64 .88 1.50
2000 AT_SETUP([MATRIX - invalid number function arguments])
2001 AT_DATA([matrix.sps], [dnl
2005 COMPUTE x=KRONEKER(1,2,3).
2007 COMPUTE x=IDENT(1,2,3).
2011 AT_CHECK([pspp matrix.sps], [1], [dnl
2012 matrix.sps:2: error: COMPUTE: Matrix function ABS requires 1 argument.
2014 matrix.sps:3: error: COMPUTE: Matrix function ABS requires 1 argument.
2016 matrix.sps:4: error: COMPUTE: Matrix function KRONEKER requires 2 arguments.
2018 matrix.sps:5: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2019 but 0 were provided.
2021 matrix.sps:6: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2022 but 3 were provided.
2024 matrix.sps:7: error: COMPUTE: Matrix function BLOCK requires at least one
2029 AT_SETUP([MATRIX - CALL SETDIAG])
2030 AT_DATA([matrix.sps], [dnl
2032 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
2035 CALL SETDIAG(x1, 10).
2039 CALL SETDIAG(x2, {10, 11}).
2043 CALL SETDIAG(x3, {10, 11, 12}).
2047 CALL SETDIAG(x4, {10, 11, 12, 13}).
2051 CALL SETDIAG(x5, {10, 11; 12, 13}).
2056 AT_CHECK([pspp matrix.sps], [1], [dnl
2077 matrix.sps:21: error: MATRIX: SETDIAG argument 2 must be a scalar or a vector,
2087 dnl I have some doubts about the correctness of the results below.
2088 AT_SETUP([MATRIX - CALL EIGEN])
2089 AT_DATA([matrix.sps], [dnl
2091 CALL EIGEN({1, 0; 0, 1}, evec, eval).
2095 CALL EIGEN({3, 2, 4; 2, 0, 2; 4, 2, 3}, evec2, eval2).
2100 AT_CHECK([pspp matrix.sps], [0], [dnl
2110 -.6666666667 .0000000000 .7453559925
2111 -.3333333333 -.8944271910 -.2981423970
2112 -.6666666667 .4472135955 -.5962847940
2121 AT_SETUP([MATRIX - CALL SVD])
2122 AT_DATA([matrix.sps], [dnl
2124 CALL SVD({3, 2, 2; 2, 3, -2}, u, s, v).
2125 PRINT (u * s * T(v))/FORMAT F5.1.
2127 CALL SVD({2, 4; 1, 3; 0, 0; 0, 0}, u, s, v).
2128 PRINT (u*s*T(v))/FORMAT F5.1.
2130 CALL SVD({-3, 1; 6, -2; 6, -2}, u, s, v).
2131 PRINT (u*s*T(v))/FORMAT F5.1.
2134 AT_CHECK([pspp matrix.sps], [0], [dnl
2152 AT_SETUP([MATRIX - PRINT])
2153 AT_DATA([matrix.sps], [dnl
2155 PRINT/TITLE="title 1".
2156 PRINT/SPACE=2/TITLE="title 2".
2158 COMPUTE m={1, 2, 3; 3, 4, 5; 6, 7, 8}.
2159 PRINT m/RLABELS=123, a b c, long name.
2160 PRINT m/RNAMES={'123', 'a b c', 'long name'}.
2161 PRINT m/CLABELS=col1, col2, long column name.
2162 PRINT m/CNAMES={'col1', 'col2', 'long column name'}.
2163 PRINT m/RLABELS=123, a b c, long name
2164 /CLABELS=col1, col2, long column name.
2165 PRINT m/RNAMES={'123', 'a b c', 'long name'}
2166 /CNAMES={'col1', 'col2', 'long column name'}.
2167 PRINT {123e10, 456e10, 500}.
2171 AT_DATA([matrix-tables.sps], [dnl
2172 SET MDISPLAY=TABLES.
2173 INCLUDE 'matrix.sps'.
2176 AT_CHECK([pspp matrix.sps], [0], [dnl
2217 {123e10, 456e10, 500}
2219 1.2300000000 4.5600000000 .0000000005
2222 AT_CHECK([pspp matrix-tables.sps], [0], [dnl
2244 +----+----+----------------+
2245 |col1|col2|long column name|
2246 +----+----+----------------+
2250 +----+----+----------------+
2253 +----+----+--------+
2254 |col1|col2|long col|
2255 +----+----+--------+
2259 +----+----+--------+
2262 +---------+----+----+----------------+
2263 | |col1|col2|long column name|
2264 +---------+----+----+----------------+
2267 |long name| 6| 7| 8|
2268 +---------+----+----+----------------+
2271 +--------+----+----+--------+
2272 | |col1|col2|long col|
2273 +--------+----+----+--------+
2277 +--------+----+----+--------+
2279 {123e10, 456e10, 500}
2280 +----------------------------------------------+
2281 |1.2300000000[[a]] 4.5600000000[[a]] .0000000005[[a]]|
2282 +----------------------------------------------+
2287 AT_SETUP([MATRIX - DO IF])
2288 AT_DATA([matrix.sps], [dnl
2316 AT_CHECK([pspp matrix.sps], [1], [dnl
2323 matrix.sps:21: error: MATRIX: Expression for DO IF must evaluate to scalar, not
2326 matrix.sps:25: error: MATRIX: Expression for ELSE IF must evaluate to scalar,
2331 AT_SETUP([MATRIX - unbounded LOOP])
2332 AT_DATA([matrix.sps], [dnl
2334 * Truly unbounded loop.
2344 * Unbounded loop terminates with BREAK.
2359 AT_CHECK([pspp matrix.sps], [0], [dnl
2364 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2365 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2372 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2377 AT_SETUP([MATRIX - indexed or conditional LOOP])
2378 AT_DATA([matrix.sps], [dnl
2380 * Indexed loop terminates based on index.
2388 * Indexed loop terminates based on MXLOOPS.
2396 * Indexed loop terminates with BREAK.
2407 * Indexed loop terminates with top IF.
2409 LOOP x=1 TO 50 IF NCOL(y) < 15.
2415 * Indexed loop terminates with bottom IF.
2419 END LOOP IF NCOL(y) >= 22.
2436 LOOP i=1 TO NROW(indexing).
2438 LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
2441 PRINT {indexing(i, :), y}.
2450 LOOP i=5 TO 8 BY {}.
2459 LOOP i=1e100 to 1e200.
2463 AT_CHECK([pspp matrix.sps], [1], [dnl
2468 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2475 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2476 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2483 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2490 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2496 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2500 1 10 1 1 2 3 4 5 6 7 8 9 10
2510 10 1 -1 10 9 8 7 6 5 4 3 2 1
2520 matrix.sps:67: error: MATRIX: Expression for LOOP must evaluate to scalar, not
2523 matrix.sps:70: error: MATRIX: Expression for TO must evaluate to scalar, not a
2526 matrix.sps:73: error: MATRIX: Expression for BY must evaluate to scalar, not a
2529 matrix.sps:76: error: MATRIX: Expression for LOOP IF must evaluate to scalar,
2532 matrix.sps:79: error: MATRIX: Expression for END LOOP IF must evaluate to
2533 scalar, not a 0×0 matrix.
2535 matrix.sps:82: error: MATRIX: Expression for LOOP is outside the integer range.
2539 AT_SETUP([MATRIX - BREAK outside LOOP])
2540 AT_DATA([matrix.sps], [dnl
2545 AT_CHECK([pspp matrix.sps], [1], [dnl
2546 matrix.sps:2: error: BREAK: BREAK not inside LOOP.
2550 AT_SETUP([MATRIX - READ])
2551 AT_DATA([matrix.txt], [dnl
2577 AT_DATA([matrix2.txt], [dnl
2583 AT_DATA([matrix3.txt], [dnl
2590 AT_DATA([matrix.sps], [dnl
2592 READ x/FILE='matrix.txt'/SIZE=4/FIELD=1 TO 1.
2594 READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
2596 READ x/SIZE={2,4}/FIELD=1 TO 80.
2598 READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
2600 READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
2603 READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
2605 READ x/SIZE={2,3}/FIELD=1 TO 20/FORMAT=DOLLAR.
2607 READ x/SIZE={2,4}/FIELD=1 TO 20/FORMAT=DOLLAR5.1.
2609 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4PCT'.
2611 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4A'.
2615 LOOP IF NOT EOF('matrix2.txt').
2616 READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
2621 COMPUTE m = MAKE(5, 5, 0).
2623 READ count /FILE='matrix3.txt' /FIELD=1 TO 1 /SIZE=1.
2624 READ m(i, 1:count) /FIELD=3 TO 100 /REREAD.
2629 AT_CHECK([pspp matrix.sps], [0], [dnl
2688 AT_SETUP([MATRIX - READ - negative])
2689 AT_DATA([matrix.sps], [dnl
2696 READ x/FIELD=1 TO !.
2697 READ x/FIELD=1 TO 0.
2698 READ x/FIELD=1 TO 10 BY !.
2699 READ x/FIELD=1 TO 10 BY 6.
2703 READ x/FORMAT=F8.2/FORMAT=F8.2.
2704 READ x/FORMAT='5XYZZY'.
2705 READ x/FORMAT=XYZZY.
2708 READ x/FIELD=1 TO 10.
2709 READ x/FIELD=1 TO 10/SIZE={1,2}.
2710 READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
2711 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
2712 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
2713 READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
2714 READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
2715 READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
2717 READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
2718 READ x/FIELD=1 TO 10/SIZE={1,3}/FILE='matrix.txt'/MODE=SYMMETRIC.
2719 READ x/FIELD=1 TO 10/SIZE=2/FILE='matrix.txt'.
2722 AT_DATA([matrix.txt], [dnl
2726 AT_CHECK([pspp matrix.sps], [1], [dnl
2727 matrix.sps:2.6: error: READ: Syntax error at `!': expecting identifier.
2729 matrix.sps:3.13: error: READ: Syntax error at `!': expecting a file name or
2732 matrix.sps:4.17: error: READ: Syntax error at `!': expecting string.
2734 matrix.sps:5.14: error: READ: Syntax error at `!': Expected positive integer
2737 matrix.sps:6.16: error: READ: Syntax error at `!': expecting `TO'.
2739 matrix.sps:7.19: error: READ: Syntax error at `!': Expected positive integer
2742 matrix.sps:8.19: error: READ: Syntax error at `0': Expected positive integer
2745 matrix.sps:9.25: error: READ: Syntax error at `!': Expected integer between 1
2748 matrix.sps:10: error: READ: BY 6 does not evenly divide record width 10.
2750 matrix.sps:11.13: error: READ: Syntax error at `!'.
2752 matrix.sps:12.13: error: READ: Syntax error at `!': expecting RECTANGULAR or
2755 matrix.sps:13.15: error: READ: Syntax error at `!': expecting identifier.
2757 matrix.sps:14: error: READ: Subcommand FORMAT may only be specified once.
2759 matrix.sps:15.15-15.22: error: READ: Syntax error at `'5XYZZY'': Unknown format
2762 matrix.sps:16: error: READ: Unknown format type `XYZZY'.
2764 matrix.sps:17.8: error: READ: Syntax error at `!': expecting FILE, FIELD, MODE,
2767 matrix.sps:18: error: READ: Required subcommand FIELD was not specified.
2769 matrix.sps:19: error: READ: SIZE is required for reading data into a full
2770 matrix (as opposed to a submatrix).
2772 matrix.sps:20: error: READ: Required subcommand FILE was not specified.
2774 matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
2776 matrix.sps:22: error: READ: FORMAT specifies field width 5 but BY specifies 2.
2778 matrix.sps:23: error: READ: FORMAT specifies 2 repetitions with record width
2779 10, which implies field width 5, but BY specifies field width 2.
2781 matrix.sps:24: error: MATRIX: SIZE must evaluate to a scalar or a 2-element
2782 vector, not a 2×2 matrix.
2784 matrix.sps:25: error: MATRIX: SIZE must evaluate to a scalar or a 2-element
2785 vector, not a 1×3 matrix.
2787 matrix.sps:26: error: MATRIX: Matrix dimensions -1×1 specified on SIZE are
2788 outside valid range.
2790 matrix.sps:28: error: MATRIX: Matrix dimensions 2×2 specified on SIZE differ
2791 from submatrix dimensions 1×3.
2793 matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
2796 matrix.txt:1.1-1.4: warning: Error reading "xyzzy" as format F for matrix row
2797 1, column 1: Field contents are not numeric.
2799 matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
2800 1: Matrix data may not contain missing value.
2804 AT_SETUP([MATRIX - WRITE])
2805 AT_DATA([matrix.sps], [dnl
2807 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
2808 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
2809 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
2810 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
2811 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
2812 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
2813 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
2814 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
2815 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
2818 AT_CHECK([pspp matrix.sps])
2819 AT_CHECK([cat matrix.txt], [0], [dnl
2841 AT_SETUP([MATRIX - WRITE - negative])
2842 AT_DATA([matrix.sps], [dnl
2849 WRITE 1/FIELD=1 TO 0.
2850 WRITE 1/FIELD=1 TO 10 BY 20.
2851 WRITE 1/FIELD=1 TO 10 BY 6.
2852 WRITE 1/MODE=TRAPEZOIDAL.
2853 WRITE 1/FORMAT=F5/FORMAT=F5.
2854 WRITE 1/FORMAT='5ASDF'.
2855 WRITE 1/FORMAT=ASDF5.
2858 WRITE 1/FIELD=1 TO 10.
2859 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
2860 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
2861 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
2862 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
2863 WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
2866 AT_CHECK([pspp matrix.sps], [1], [dnl
2867 matrix.sps:2.7: error: WRITE: Syntax error at `!'.
2869 matrix.sps:3.17: error: WRITE: Syntax error at `!': expecting a file name or
2872 matrix.sps:4.18: error: WRITE: Syntax error at `!': expecting string.
2874 matrix.sps:5.15: error: WRITE: Syntax error at `!': Expected positive integer
2877 matrix.sps:6.17: error: WRITE: Syntax error at `!': expecting `TO'.
2879 matrix.sps:7.20: error: WRITE: Syntax error at `0': Expected positive integer
2882 matrix.sps:8.26-8.27: error: WRITE: Syntax error at `20': Expected integer
2883 between 1 and 10 for BY.
2885 matrix.sps:9: error: WRITE: BY 6 does not evenly divide record width 10.
2887 matrix.sps:10.14-10.24: error: WRITE: Syntax error at `TRAPEZOIDAL': expecting
2888 RECTANGULAR or TRIANGULAR.
2890 matrix.sps:11: error: WRITE: Subcommand FORMAT may only be specified once.
2892 matrix.sps:12.16-12.22: error: WRITE: Syntax error at `'5ASDF'': Unknown format
2895 matrix.sps:13: error: WRITE: Unknown format type `ASDF'.
2897 matrix.sps:14.9: error: WRITE: Syntax error at `!': expecting OUTFILE, FIELD,
2898 MODE, HOLD, or FORMAT.
2900 matrix.sps:15: error: WRITE: Required subcommand FIELD was not specified.
2902 matrix.sps:16: error: WRITE: Required subcommand OUTFILE was not specified.
2904 matrix.sps:17: error: WRITE: 15 repetitions cannot fit in record width 10.
2906 matrix.sps:18: error: WRITE: FORMAT specifies 5 repetitions with record width
2907 10, which implies field width 2, but BY specifies field width 5.
2909 matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
2910 requires a width between 6 and 40.
2912 matrix.sps:20: error: WRITE: Format A9 is too wide for 8-byte matrix eleemnts.
2914 matrix.sps:21: error: MATRIX: WRITE with MODE=TRIANGULAR requires a square
2915 matrix but the matrix to be written has dimensions 1×2.
2919 AT_SETUP([MATRIX - GET])
2920 AT_DATA([matrix.sps], [dnl
2921 DATA LIST LIST NOTABLE /a b c.
2922 MISSING VALUES a(1) b(5).
2931 GET x0 /NAMES=names0.
2933 PRINT names0/FORMAT=A8.
2937 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
2939 PRINT names1/FORMAT=A8.
2943 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
2945 PRINT names2/FORMAT=A8.
2949 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
2951 PRINT names3/FORMAT=A8.
2955 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
2957 PRINT names4/FORMAT=A8.
2960 SAVE OUTFILE='matrix.sav'.
2964 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
2966 PRINT names5/FORMAT=A8.
2970 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
2972 PRINT names6/FORMAT=A8.
2976 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
2978 PRINT names7/FORMAT=A8.
2981 AT_CHECK([pspp matrix.sps], [1], [dnl
2982 matrix.sps:11: error: MATRIX: GET: Variable a in case 2 has user-missing value
2985 matrix.sps:12: error: MATRIX: Uninitialized variable x0 used in expression.
2992 matrix.sps:17: error: MATRIX: GET: Variable c in case 4 is system-missing.
2994 matrix.sps:18: error: MATRIX: Uninitialized variable x1 used in expression.
3009 matrix.sps:29: error: MATRIX: GET: Variable c in case 4 is system-missing.
3011 matrix.sps:30: error: MATRIX: Uninitialized variable x3 used in expression.
3028 matrix.sps:44: error: MATRIX: GET: Variable c in case 4 is system-missing.
3030 matrix.sps:45: error: MATRIX: Uninitialized variable x5 used in expression.
3060 AT_SETUP([MATRIX - GET - negative])
3061 AT_DATA([matrix.sps], [dnl
3062 DATA LIST LIST NOTABLE /a b c * d(a1).
3063 MISSING VALUES a(1) b(5).
3070 SAVE OUTFILE='matrix.sav'.
3082 GET x/VARIABLES=x TO !.
3084 GET x/VARIABLES=c TO a.
3094 AT_CHECK([pspp matrix.sps], [1], [dnl
3095 matrix.sps:12.5: error: GET: Syntax error at `!': expecting identifier.
3097 matrix.sps:13.17: error: GET: Syntax error at `!': expecting variable name.
3099 matrix.sps:14.12: error: GET: Syntax error at `!': expecting a file name or
3102 matrix.sps:15.16: error: GET: Syntax error at `!': expecting string.
3104 matrix.sps:16.13: error: GET: Syntax error at `!': expecting identifier.
3106 matrix.sps:17.15: error: GET: Syntax error at `!'.
3108 matrix.sps:18.14: error: GET: Syntax error at `!'.
3110 matrix.sps:19.7: error: GET: Syntax error at `!': expecting FILE, VARIABLES,
3111 NAMES, MISSING, or SYSMIS.
3113 matrix.sps:20.17: error: GET: Syntax error at `!': expecting variable name.
3115 matrix.sps:21.22: error: GET: Syntax error at `!': expecting variable name.
3117 matrix.sps:22: error: MATRIX: x is not a variable name.
3119 matrix.sps:23: error: MATRIX: c TO a is not valid syntax since c precedes a in
3122 matrix.sps:24: warning: MATRIX: d is not a numeric variable.
3124 matrix.sps:25: error: MATRIX: GET: Variable d is not numeric.
3126 error: The GET command cannot read an empty active file.
3130 AT_SETUP([MATRIX - SAVE])
3131 AT_DATA([matrix.sps], [dnl
3133 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3134 SAVE {7,8,9}/VARIABLES=a b c d.
3136 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3137 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3139 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3140 SAVE {4,'xyzw',6}/STRINGS=a, b.
3143 AT_CHECK([pspp matrix.sps])
3144 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3150 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3155 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
3162 AT_SETUP([MATRIX - SAVE - inline])
3163 AT_DATA([matrix.sps], [dnl
3165 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
3166 SAVE {7,8,9}/VARIABLES=a b c d.
3171 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
3172 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3177 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
3178 SAVE {4,'xyzw',6}/STRINGS=a, b.
3182 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3201 AT_SETUP([MATRIX - SAVE - negative])
3202 AT_DATA([matrix.sps], [dnl
3210 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
3211 SAVE 1/OUTFILE='matrix2.sav'.
3212 SAVE {1,2}/OUTFILE='matrix2.sav'.
3213 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
3214 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
3215 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
3218 AT_CHECK([pspp matrix.sps], [1], [dnl
3219 matrix.sps:2.6: error: SAVE: Syntax error at `!'.
3221 matrix.sps:3.16: error: SAVE: Syntax error at `!': expecting a file name or
3224 matrix.sps:4.18: error: SAVE: Syntax error at `!': expecting variable name.
3226 matrix.sps:5.14: error: SAVE: Syntax error at `!'.
3228 matrix.sps:6.8: error: SAVE: Syntax error at `!': expecting OUTFILE, VARIABLES,
3231 matrix.sps:7: error: SAVE: Required subcommand OUTFILE was not specified.
3233 matrix.sps:8: warning: SAVE: VARIABLES and NAMES both specified; ignoring
3236 error: The first SAVE to `matrix2.sav' within this matrix program had 1
3237 columns, so a 1×2 matrix cannot be saved to it.
3239 error: Duplicate variable name a in SAVE statement.
3241 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
3243 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
3248 AT_SETUP([MATRIX - MGET])
3249 AT_DATA([matrix.sps], [dnl
3251 VARIABLES=ROWTYPE_ var01 TO var08.
3253 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
3254 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
3255 N 92 92 92 92 92 92 92 92
3259 CORR .36 .31 -.14 1.00
3260 CORR .27 .16 -.12 .22 1.00
3261 CORR .33 .15 -.17 .24 .21 1.00
3262 CORR .50 .29 -.20 .32 .12 .38 1.00
3263 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
3268 PRINT MN/FORMAT=F5.1.
3269 PRINT SD/FORMAT=F5.1.
3270 PRINT NC/FORMAT=F5.0.
3271 PRINT CR/FORMAT=F5.2.
3274 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3275 Table: Matrix Variables Created by MGET
3284 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
3287 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
3290 92 92 92 92 92 92 92 92
3293 1.00 .18 -.22 .36 .27 .33 .50 .17
3294 .18 1.00 -.17 .31 .16 .15 .29 .29
3295 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
3296 .36 .31 -.14 1.00 .22 .24 .32 .20
3297 .27 .16 -.12 .22 1.00 .21 .12 .27
3298 .33 .15 -.17 .24 .21 1.00 .38 .20
3299 .50 .29 -.20 .32 .12 .38 1.00 .04
3300 .17 .29 -.05 .20 .27 .20 .04 1.00
3304 AT_SETUP([MATRIX - MGET with split variables])
3305 AT_DATA([matrix.sps], [dnl
3307 variables = s1 s2 rowtype_ var01 var02 var03
3311 8 0 mean 21.4 5.0 72.9
3316 8 0 corr -.16 -.22 1
3317 8 1 mean 11.4 1.0 52.9
3327 PRINT MNS1/FORMAT=F5.1.
3328 PRINT SDS1/FORMAT=F5.1.
3329 PRINT NCS1/FORMAT=F5.0.
3330 PRINT CRS1/FORMAT=F5.2.
3331 PRINT MNS2/FORMAT=F5.1.
3332 PRINT SDS2/FORMAT=F5.1.
3333 PRINT NCS2/FORMAT=F5.0.
3334 PRINT CRS2/FORMAT=F5.2.
3337 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
3338 Table: Matrix Variables Created by MGET
3339 ,Split Values,,Dimensions,
3380 AT_SETUP([MATRIX - MGET with factor variables])
3381 AT_DATA([matrix.sps], [dnl
3383 VARIABLES=ROWTYPE_ f1 var01 TO var04
3397 FORMATS var01 TO var04(F5.1).
3398 SAVE OUTFILE='matrix.sav'.
3400 AT_DATA([matrix2.sps], [dnl
3402 MGET FILE='matrix.sav'.
3403 PRINT MNF1/FORMAT=F2.0.
3404 PRINT SDF1/FORMAT=F2.0.
3405 PRINT NCF1/FORMAT=F2.0.
3406 PRINT MNF2/FORMAT=F2.0.
3407 PRINT SDF2/FORMAT=F2.0.
3408 PRINT NCF2/FORMAT=F2.0.
3409 PRINT CR/FORMAT=F3.1.
3412 AT_CHECK([pspp matrix.sps])
3413 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
3414 Table: Matrix Variables Created by MGET
3415 ,Factors,Dimensions,
3451 AT_SETUP([MATRIX - MGET with factor and split variables])
3452 AT_DATA([matrix.sps], [dnl
3454 variables = s f rowtype_ var01 var02 var03
3459 8 0 mean 21.4 5.0 72.9
3464 8 . corr -.16 -.22 1
3465 9 1 mean 11.4 1.0 52.9
3475 PRINT MNF1S1/FORMAT=F5.1.
3476 PRINT SDF1S1/FORMAT=F5.1.
3477 PRINT NCF1S1/FORMAT=F5.0.
3478 PRINT CRS1/FORMAT=F5.2.
3479 PRINT MNF1S2/FORMAT=F5.1.
3480 PRINT SDF1S2/FORMAT=F5.1.
3481 PRINT NCF1S2/FORMAT=F5.0.
3482 PRINT CRS2/FORMAT=F5.2.
3485 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3486 Table: Matrix Variables Created by MGET
3487 ,Split Values,Factors,Dimensions,
3528 AT_SETUP([MATRIX - MGET with TYPE])
3529 AT_DATA([matrix.sps], [dnl
3531 VARIABLES=ROWTYPE_ f1 var01 TO var04
3545 FORMATS var01 TO var04(F5.1).
3546 SAVE OUTFILE='matrix.sav'.
3548 AT_DATA([matrix2.sps], [dnl
3550 MGET/FILE='matrix.sav'/TYPE=CORR.
3551 PRINT CR/FORMAT=F3.1.
3554 AT_CHECK([pspp matrix.sps])
3555 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
3556 Table: Matrix Variables Created by MGET
3557 ,Factors,Dimensions,
3569 AT_SETUP([MATRIX - MGET - negative - parsing])
3570 AT_DATA([matrix.sps], [dnl
3579 AT_CHECK([pspp matrix.sps], [1], [dnl
3580 matrix.sps:2.6: error: MGET: Syntax error at `!': expecting FILE or TYPE.
3582 matrix.sps:3.11: error: MGET: Syntax error at `!': expecting a file name or
3585 matrix.sps:4.15: error: MGET: Syntax error at `!': expecting string.
3587 matrix.sps:5.11: error: MGET: Syntax error at `!': expecting COV, CORR, MEAN,
3588 STDDEV, N, or COUNT.
3590 matrix.sps:6.16: error: MGET: Syntax error at `!': expecting COV, CORR, MEAN,
3591 STDDEV, N, or COUNT.
3595 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
3596 AT_DATA([matrix.sps], [dnl
3597 DATA LIST LIST NOTABLE /x.
3606 AT_CHECK([pspp matrix.sps], [1], [dnl
3607 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
3609 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
3613 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
3614 AT_DATA([matrix.sps], [dnl
3615 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
3624 AT_CHECK([pspp matrix.sps], [1], [dnl
3625 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
3626 byte string, but it has width 7.
3628 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
3629 byte string, but it has width 0.
3633 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
3634 AT_DATA([matrix.sps], [dnl
3635 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
3644 AT_CHECK([pspp matrix.sps], [1], [dnl
3645 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
3650 AT_SETUP([MATRIX - MGET - no continuous variables])
3651 AT_DATA([matrix.sps], [dnl
3652 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
3661 AT_CHECK([pspp matrix.sps], [1], [dnl
3662 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
3666 AT_SETUP([MATRIX - MGET - unexpected string variables])
3667 AT_DATA([matrix.sps], [dnl
3668 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
3677 AT_CHECK([pspp matrix.sps], [1], [dnl
3678 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
3683 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
3684 AT_DATA([matrix.sps], [dnl
3685 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
3694 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
3695 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
3699 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
3700 AT_DATA([matrix.sps], [dnl
3701 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
3711 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3712 Table: Matrix Variables Created by MGET
3717 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
3721 AT_SETUP([MATRIX - MGET - missing values in input])
3722 AT_DATA([matrix.sps], [dnl
3723 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
3731 PRINT ncs1/FORMAT=F5.
3732 PRINT ncs2/FORMAT=F5.
3735 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
3736 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
3738 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
3740 Table: Matrix Variables Created by MGET
3741 ,Split Values,Dimensions,
3754 AT_SETUP([MATRIX - MSAVE])
3755 AT_DATA([matrix.sps], [dnl
3757 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
3758 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
3759 MSAVE {11, 12}/TYPE=MEAN.
3760 MSAVE {13, 14}/TYPE=STDDEV.
3761 MSAVE {15, 16}/TYPE=N.
3762 MSAVE {17, 18}/TYPE=COUNT.
3767 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3769 ROWTYPE_,VARNAME_,X,Y
3782 AT_SETUP([MATRIX - MSAVE with factor variables])
3783 AT_DATA([matrix.sps], [dnl
3785 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
3786 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
3787 MSAVE {11, 12}/TYPE=MEAN.
3788 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
3789 MSAVE {15, 16}/TYPE=N.
3790 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
3796 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
3801 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3803 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
3804 CORR,1.00,1.00,COL1,1.00,2.00
3805 CORR,1.00,1.00,COL2,3.00,4.00
3806 COV,1.00,1.00,COL1,5.00,6.00
3807 COV,1.00,1.00,COL2,7.00,8.00
3808 COV,1.00,1.00,,9.00,10.00
3809 MEAN,1.00,1.00,,11.00,12.00
3810 STDDEV,2.00,1.00,,13.00,14.00
3811 N,2.00,1.00,,15.00,16.00
3812 COUNT,1.00,2.00,,17.00,18.00
3815 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
3816 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
3817 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
3821 AT_SETUP([MATRIX - MSAVE with split variables])
3822 AT_DATA([matrix.sps], [dnl
3824 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
3825 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
3826 MSAVE {11, 12}/TYPE=MEAN.
3827 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
3828 MSAVE {15, 16}/TYPE=N.
3829 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
3835 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
3840 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3842 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
3843 1.00,1.00,CORR,COL1,1.00,2.00
3844 1.00,1.00,CORR,COL2,3.00,4.00
3845 1.00,1.00,COV,COL1,5.00,6.00
3846 1.00,1.00,COV,COL2,7.00,8.00
3847 1.00,1.00,COV,,9.00,10.00
3848 1.00,1.00,MEAN,,11.00,12.00
3849 2.00,1.00,STDDEV,,13.00,14.00
3850 2.00,1.00,N,,15.00,16.00
3851 1.00,2.00,COUNT,,17.00,18.00
3854 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
3855 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
3856 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
3860 AT_SETUP([MATRIX - MSAVE with factor and split variables])
3861 AT_DATA([matrix.sps], [dnl
3863 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
3864 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
3865 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
3866 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
3867 MSAVE {15, 16}/TYPE=N.
3868 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
3873 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3875 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
3876 1.00,CORR,1.00,COL1,1.00,2.00
3877 1.00,CORR,1.00,COL2,3.00,4.00
3878 1.00,COV,1.00,COL1,5.00,6.00
3879 1.00,COV,1.00,COL2,7.00,8.00
3880 1.00,COV,1.00,,9.00,10.00
3881 1.00,MEAN,2.00,,11.00,12.00
3882 2.00,STDDEV,1.00,,13.00,14.00
3883 2.00,N,1.00,,15.00,16.00
3884 2.00,COUNT,2.00,,17.00,18.00
3888 AT_SETUP([MATRIX - MSAVE - negative])
3889 AT_DATA([matrix.sps], [dnl
3894 MSAVE 1/VARIABLES=!.
3901 MSAVE 1/TYPE=COV/FNAMES=x.
3902 MSAVE 1/TYPE=COV/SNAMES=x.
3905 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
3909 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
3910 MSAVE 1/TYPE=COV/VARIABLES=x.
3911 MSAVE 1/TYPE=COV/FNAMES=x.
3912 MSAVE 1/TYPE=COV/SNAMES=x.
3916 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
3917 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
3918 MSAVE {1,2;3}/TYPE=COV.
3919 MSAVE 0/TYPE=COV/FACTOR={1,2}.
3920 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
3924 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
3928 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
3932 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
3936 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
3940 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
3941 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
3942 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
3943 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
3944 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
3945 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
3948 AT_CHECK([pspp matrix.sps], [1], [dnl
3949 matrix.sps:2.7: error: MSAVE: Syntax error at `!'.
3951 matrix.sps:3.14: error: MSAVE: Syntax error at `!': expecting COV, CORR, MEAN,
3952 STDDEV, N, or COUNT.
3954 matrix.sps:4.17: error: MSAVE: Syntax error at `!': expecting a file name or
3957 matrix.sps:5.19: error: MSAVE: Syntax error at `!': expecting variable name.
3959 matrix.sps:6.16: error: MSAVE: Syntax error at `!': expecting variable name.
3961 matrix.sps:7.16: error: MSAVE: Syntax error at `!': expecting variable name.
3963 matrix.sps:8.15: error: MSAVE: Syntax error at `!'.
3965 matrix.sps:9.16: error: MSAVE: Syntax error at `!'.
3967 matrix.sps:10.9: error: MSAVE: Syntax error at `!': expecting TYPE, OUTFILE,
3968 VARIABLES, FNAMES, SNAMES, SPLIT, or FACTOR.
3970 matrix.sps:11: error: MSAVE: Required subcommand TYPE was not specified.
3972 matrix.sps:12: error: MSAVE: FNAMES requires FACTOR.
3974 matrix.sps:13: error: MSAVE: SNAMES requires SPLIT.
3976 matrix.sps:14: error: MSAVE: Required subcommand OUTFILE was not specified.
3978 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
3979 within a single MATRIX command.
3981 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables each
3982 time within a given MATRIX.
3984 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables each time
3985 within a given MATRIX.
3987 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables each time
3988 within a given MATRIX.
3990 matrix.sps:28: error: MATRIX: Matrix on MSAVE has 2 columns but there are 1
3993 matrix.sps:29: error: MATRIX: All rows in a matrix must have the same number of
3994 columns, but this tries to stack matrices with 2 and 1 columns.
3996 matrix.sps:30: error: MATRIX: There are 1 factor variables, but 2 factor values
3999 matrix.sps:31: error: MATRIX: There are 1 split variables, but 2 split values
4002 matrix.sps:35: error: MSAVE: Variable x appears twice in variable list.
4004 matrix.sps:39: error: MATRIX: Duplicate or invalid FACTOR variable name x.
4006 matrix.sps:43: error: MATRIX: Duplicate or invalid variable name x.
4008 matrix.sps:47: error: MATRIX: Duplicate or invalid variable name x.
4010 matrix.sps:51: error: MSAVE: Variable name VARNAME_ is reserved.
4012 matrix.sps:52: error: MSAVE: Variable name ROWTYPE_ is reserved.
4014 matrix.sps:53: error: MSAVE: Variable name VARNAME_ is reserved.
4016 matrix.sps:54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4018 matrix.sps:55: error: MSAVE: Variable name VARNAME_ is reserved.
4020 matrix.sps:56: error: MSAVE: Variable name ROWTYPE_ is reserved.
4024 AT_SETUP([MATRIX - DISPLAY])
4025 AT_DATA([matrix-template.sps], [dnl
4034 for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
4035 sed "s/command/$command/" < matrix-template.sps > matrix.sps
4036 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4037 Table: Matrix Variables
4038 ,Dimension,,Size (kB)
4048 AT_SETUP([MATRIX - DISPLAY - negative])
4049 AT_DATA([matrix.sps], [dnl
4054 AT_CHECK([pspp matrix.sps], [1], [dnl
4055 matrix.sps:2.9: error: DISPLAY: Syntax error at `!': expecting DICTIONARY or
4060 AT_SETUP([MATRIX - RELEASE])
4061 AT_DATA([matrix.sps], [dnl
4069 AT_CHECK([pspp matrix.sps], [1], [dnl
4073 matrix.sps:5: error: MATRIX: Uninitialized variable x used in expression.
4077 AT_SETUP([MATRIX - RELEASE - negative])
4078 AT_DATA([matrix.sps], [dnl
4091 AT_CHECK([pspp matrix.sps], [1], [dnl
4092 matrix.sps:2.9: error: RELEASE: Syntax error at `!': expecting end of command.
4094 matrix.sps:3.9: error: RELEASE: Syntax error at `x': Variable name expected.
4096 matrix.sps:5.12: error: RELEASE: Syntax error at `!': expecting end of command.
4098 matrix.sps:7.11: error: RELEASE: Syntax error at `y': expecting end of command.