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 matrix with
154 matrix.sps:25: error: MATRIX: 0 is not a valid column index for a matrix with
157 matrix.sps:26: error: MATRIX: 4 is not a valid row index for a matrix with
160 matrix.sps:27: error: MATRIX: 4 is not a valid column index for a matrix with
169 matrix.sps:33: error: MATRIX: Matrix row index must be scalar or vector, not a
170 matrix with dimensions (2,2).
172 matrix.sps:34: error: MATRIX: Matrix column index must be scalar or vector, not
173 a matrix with dimensions (2,2).
177 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues])
178 AT_DATA([matrix.sps], [dnl
180 COMPUTE y={1, 2, 3; 4, 5, 6; 7, 8, 9}.
183 COMPUTE x1(1, :) = {11, 12, 13}.
187 COMPUTE x2(2, :) = {14, 15, 16}.
191 COMPUTE x3(3, :) = {17, 18, 19}.
195 COMPUTE x4(:, 1) = {11; 14; 17}.
199 COMPUTE x5(:, 2) = {12; 15; 18}.
203 COMPUTE x6(:, 3) = {13; 16; 19}.
207 COMPUTE x7(1, 1) = 11.
211 COMPUTE x8(1:2, 2:3) = {12, 13; 15, 16}.
215 COMPUTE x9({3, 1}, {2; 3}) = {18, 19; 12, 13}.
219 AT_CHECK([pspp matrix.sps], [0], [dnl
267 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues - negative])
268 AT_DATA([matrix.sps], [dnl
270 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
271 COMPUTE x(1, :) = {}.
272 COMPUTE x(1, :) = 15.
273 COMPUTE x(1, :) = {11, 12}.
274 COMPUTE x(1, :) = {11, 12, 13, 14}.
275 COMPUTE x(:, 1) = {}.
276 COMPUTE x(:, 1) = 15.
277 COMPUTE x(:, 1) = {11, 12}.
278 COMPUTE x(:, 1) = {11, 12, 13, 14}.
282 COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
285 COMPUTE x({1, 2; 3, 4}, 5) = 1.
286 COMPUTE x(3, {1, 2; 3, 4}) = 1.
290 AT_CHECK([pspp matrix.sps], [1], [dnl
291 matrix.sps:3: error: MATRIX: Row index vector for assignment to x has 1
292 elements but source matrix has 0 rows.
294 matrix.sps:4: error: MATRIX: Column index vector for assignment to x has 3
295 elements but source matrix has 1 columns.
297 matrix.sps:5: error: MATRIX: Column index vector for assignment to x has 3
298 elements but source matrix has 2 columns.
300 matrix.sps:6: error: MATRIX: Column index vector for assignment to x has 3
301 elements but source matrix has 4 columns.
303 matrix.sps:7: error: MATRIX: Row index vector for assignment to x has 3
304 elements but source matrix has 0 rows.
306 matrix.sps:8: error: MATRIX: Row index vector for assignment to x has 3
307 elements but source matrix has 1 rows.
309 matrix.sps:9: error: MATRIX: Row index vector for assignment to x has 3
310 elements but source matrix has 1 rows.
312 matrix.sps:10: error: MATRIX: Row index vector for assignment to x has 3
313 elements but source matrix has 1 rows.
315 matrix.sps:11: error: MATRIX: Can't use vector indexing on matrix x with
318 matrix.sps:12: error: MATRIX: 0 is not a valid row index for a matrix with
321 matrix.sps:13: error: MATRIX: 0 is not a valid column index for a matrix with
324 matrix.sps:14: error: MATRIX: 0 is not a valid row index for a matrix with
327 matrix.sps:15: error: MATRIX: 4 is not a valid row index for a matrix with
330 matrix.sps:16: error: MATRIX: 4 is not a valid column index for a matrix with
333 matrix.sps:17: error: MATRIX: Matrix row index must be scalar or vector, not a
334 matrix with dimensions (2,2).
336 matrix.sps:18: error: MATRIX: Matrix column index must be scalar or vector, not
337 a matrix with dimensions (2,2).
346 AT_SETUP([MATRIX - subvectors as rvalues])
347 AT_DATA([matrix.sps], [dnl
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}(:).
359 PRINT {10; 20; 30}({}).
360 PRINT {10; 20; 30}(2).
361 PRINT {10; 20; 30}({2}).
362 PRINT {10; 20; 30}({1,3}).
363 PRINT {10; 20; 30}({2,3}).
364 PRINT {10; 20; 30}({1;3}).
365 PRINT {10; 20; 30}({2;3}).
366 PRINT {10; 20; 30}(2:3).
367 PRINT {10; 20; 30}(:).
371 PRINT {1, 2; 3, 4}(:).
372 PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
373 PRINT {1, 2, 3, 4}(0).
374 PRINT {1, 2, 3, 4}(5).
377 AT_CHECK([pspp matrix.sps], [1], [dnl
439 matrix.sps:24: error: MATRIX: Vector index operator must be applied to vector,
440 not a matrix with dimensions (2,2).
442 matrix.sps:25: error: MATRIX: Vector index must be scalar or vector, not a
443 matrix with dimensions (2,2).
445 matrix.sps:26: error: MATRIX: Index 0 is out of range for vector with 4
448 matrix.sps:27: error: MATRIX: Index 5 is out of range for vector with 4
453 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues])
454 AT_DATA([matrix.sps], [dnl
456 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
459 COMPUTE r1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
463 COMPUTE r2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
471 COMPUTE r4(1:2) = {11:12}.
475 COMPUTE r5({8;9}) = {18:19}.
478 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
481 COMPUTE c1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
485 COMPUTE c2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
493 COMPUTE c4(1:2) = {11:12}.
497 COMPUTE c5(8:9) = {18:19}.
501 AT_CHECK([pspp matrix.sps], [0], [dnl
503 11 12 13 14 15 16 17 18 19
506 11 12 13 14 15 16 17 18 19
518 11 12 13 14 15 16 17 18 19
521 11 12 13 14 15 16 17 18 19
534 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues - negative])
535 AT_DATA([matrix.sps], [dnl
537 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
538 COMPUTE r(1:3) = {1, 2; 3, 4}.
540 COMPUTE r(1:3) = {1}.
541 COMPUTE r(1:3) = {1, 2}.
542 COMPUTE r(1:3) = {1, 2, 3, 4}.
544 COMPUTE r(1:3) = {1}.
545 COMPUTE r(1:3) = {1; 2}.
546 COMPUTE r(1:3) = {1; 2; 3; 4}.
547 COMPUTE r(:) = {1; 2; 3; 4}.
550 COMPUTE r({1, 2; 3, 4}) = 1.
552 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
553 COMPUTE c(1:3) = {1, 2; 3, 4}.
555 COMPUTE c(1:3) = {1}.
556 COMPUTE c(1:3) = {1, 2}.
557 COMPUTE c(1:3) = {1, 2, 3, 4}.
559 COMPUTE c(1:3) = {1}.
560 COMPUTE c(1:3) = {1; 2}.
561 COMPUTE c(1:3) = {1; 2; 3; 4}.
562 COMPUTE c(:) = {1; 2; 3; 4}.
565 COMPUTE c({1, 2; 3, 4}) = 1.
567 COMPUTE m = {1, 2; 3, 4}.
572 AT_CHECK([pspp matrix.sps], [1], [dnl
573 matrix.sps:3: error: MATRIX: Can't assign matrix with dimensions (2,2) to
576 matrix.sps:4: error: MATRIX: Can't assign vector with 0 elements to subvector
579 matrix.sps:5: error: MATRIX: Can't assign vector with 1 elements to subvector
582 matrix.sps:6: error: MATRIX: Can't assign vector with 2 elements to subvector
585 matrix.sps:7: error: MATRIX: Can't assign vector with 4 elements to subvector
588 matrix.sps:8: error: MATRIX: Can't assign vector with 0 elements to subvector
591 matrix.sps:9: error: MATRIX: Can't assign vector with 1 elements to subvector
594 matrix.sps:10: error: MATRIX: Can't assign vector with 2 elements to subvector
597 matrix.sps:11: error: MATRIX: Can't assign vector with 4 elements to subvector
600 matrix.sps:12: error: MATRIX: Can't assign vector with 4 elements to subvector
603 matrix.sps:13: error: MATRIX: Index 0 is out of range for vector with 9
606 matrix.sps:14: error: MATRIX: Index 10 is out of range for vector with 9
609 matrix.sps:15: error: MATRIX: Vector index must be scalar or vector, not a
610 matrix with dimensions (2,2).
612 matrix.sps:18: error: MATRIX: Can't assign matrix with dimensions (2,2) to
615 matrix.sps:19: error: MATRIX: Can't assign vector with 0 elements to subvector
618 matrix.sps:20: error: MATRIX: Can't assign vector with 1 elements to subvector
621 matrix.sps:21: error: MATRIX: Can't assign vector with 2 elements to subvector
624 matrix.sps:22: error: MATRIX: Can't assign vector with 4 elements to subvector
627 matrix.sps:23: error: MATRIX: Can't assign vector with 0 elements to subvector
630 matrix.sps:24: error: MATRIX: Can't assign vector with 1 elements to subvector
633 matrix.sps:25: error: MATRIX: Can't assign vector with 2 elements to subvector
636 matrix.sps:26: error: MATRIX: Can't assign vector with 4 elements to subvector
639 matrix.sps:27: error: MATRIX: Can't assign vector with 4 elements to subvector
642 matrix.sps:28: error: MATRIX: Index 0 is out of range for vector with 9
645 matrix.sps:29: error: MATRIX: Index 10 is out of range for vector with 9
648 matrix.sps:30: error: MATRIX: Vector index must be scalar or vector, not a
649 matrix with dimensions (2,2).
651 matrix.sps:33: error: MATRIX: Can't use vector indexing on matrix m with
654 matrix.sps:34: error: MATRIX: Can't use vector indexing on matrix m with
659 AT_SETUP([MATRIX - COMPUTE - negative])
660 AT_DATA([matrix.sps], [dnl
668 AT_CHECK([pspp matrix.sps], [1], [dnl
669 matrix.sps:2.10: error: COMPUTE: Syntax error at end of command: expecting `='.
671 matrix.sps:3.11: error: COMPUTE: Syntax error at end of command.
673 matrix.sps:4: error: MATRIX: Undefined variable x.
675 matrix.sps:5: error: COMPUTE: Undefined variable y.
679 AT_SETUP([MATRIX - elementwise arithmetic operators])
680 AT_DATA([matrix.sps], [dnl
685 PRINT ({1,2;3,4} + {5,6;7,8}).
686 PRINT ({1,2;3,4} + 5).
687 PRINT (5 + {5,6;7,8}).
688 PRINT ({1,2;3,4} + {5,6}).
690 PRINT ({1,2;3,4} - {5,6;7,8}).
691 PRINT ({1,2;3,4} - 5).
692 PRINT (5 - {5,6;7,8}).
693 PRINT ({1,2;3,4} - {5,6}).
695 PRINT ({1,2;3,4} * 5).
696 PRINT (5 * {5,6;7,8}).
698 PRINT ({2,4;6,8} / 2).
699 PRINT (12 / {1,2;3,4}).
700 PRINT ({2,8;18,32} / {1,2;3,4}).
702 PRINT ({1,2;3,4} &* {5,6;7,8}).
703 PRINT ({1,2;3,4} &* 5).
704 PRINT (5 &* {5,6;7,8}).
705 PRINT ({1,2;3,4} &* {5,6}).
707 PRINT ({2,4;6,8} &/ 2).
708 PRINT (12 &/ {1,2;3,4}).
709 PRINT ({2,8;18,32} &/ {1,2;3,4}).
711 PRINT ({1,2;3,4} &** 2).
712 PRINT (2 &** {1,2;3,4}).
713 PRINT ({1,2;3,4} &** {2,3;4,5}).
714 PRINT ({1,2;3,4} &** {5,6}).
717 AT_CHECK([pspp matrix.sps], [1], [dnl
725 ({1,2;3,4} + {5,6;7,8})
737 matrix.sps:8: error: MATRIX: Operands to + must have the same dimensions or one
738 must be a scalar, not matrices with dimensions (2,2) and (1,2).
740 ({1,2;3,4} - {5,6;7,8})
752 matrix.sps:13: error: MATRIX: Operands to - must have the same dimensions or
753 one must be a scalar, not matrices with dimensions (2,2) and (1,2).
771 ({2,8;18,32} / {1,2;3,4})
775 ({1,2;3,4} &* {5,6;7,8})
787 matrix.sps:25: error: MATRIX: Operands to &* must have the same dimensions or
788 one must be a scalar, not matrices with dimensions (2,2) and (1,2).
798 ({2,8;18,32} &/ {1,2;3,4})
810 ({1,2;3,4} &** {2,3;4,5})
814 matrix.sps:34: error: MATRIX: Operands to &** must have the same dimensions or
815 one must be a scalar, not matrices with dimensions (2,2) and (1,2).
819 AT_SETUP([MATRIX - relational operators])
820 AT_DATA([matrix.sps], [dnl
822 PRINT ({1, 1; 2, 2} > {1, 2; 1, 2}).
823 PRINT ({1, 1; 2, 2} > 1).
824 PRINT (2 > {1, 2; 1, 2}).
825 PRINT ({1, 2} > {1; 2}).
827 PRINT ({1, 1; 2, 2} < {1, 2; 1, 2}).
828 PRINT ({1, 1; 2, 2} < 2).
829 PRINT (1 < {1, 2; 1, 2}).
830 PRINT ({1, 2} < {1; 2}).
832 PRINT ({1, 1; 2, 2} <> {1, 2; 1, 2}).
833 PRINT ({1, 1; 2, 2} <> 2).
834 PRINT (1 <> {1, 2; 1, 2}).
835 PRINT ({1, 2} <> {1; 2}).
837 PRINT ({1, 1; 2, 2} >= {1, 2; 1, 2}).
838 PRINT ({1, 1; 2, 2} >= 2).
839 PRINT (1 >= {1, 2; 1, 2}).
840 PRINT ({1, 2} >= {1; 2}).
842 PRINT ({1, 1; 2, 2} <= {1, 2; 1, 2}).
843 PRINT ({1, 1; 2, 2} <= 2).
844 PRINT (1 <= {1, 2; 1, 2}).
845 PRINT ({1, 2} <= {1; 2}).
847 PRINT ({1, 1; 2, 2} = {1, 2; 1, 2}).
848 PRINT ({1, 1; 2, 2} = 2).
849 PRINT (1 = {1, 2; 1, 2}).
850 PRINT ({1, 2} = {1; 2}).
853 AT_CHECK([pspp matrix.sps], [1], [dnl
854 ({1, 1; 2, 2} > {1, 2; 1, 2})
866 matrix.sps:5: error: MATRIX: Operands to > must have the same dimensions or one
867 must be a scalar, not matrices with dimensions (1,2) and (2,1).
869 ({1, 1; 2, 2} < {1, 2; 1, 2})
881 matrix.sps:10: error: MATRIX: Operands to < must have the same dimensions or
882 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
884 ({1, 1; 2, 2} <> {1, 2; 1, 2})
896 matrix.sps:15: error: MATRIX: Operands to <> must have the same dimensions or
897 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
899 ({1, 1; 2, 2} >= {1, 2; 1, 2})
911 matrix.sps:20: error: MATRIX: Operands to >= must have the same dimensions or
912 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
914 ({1, 1; 2, 2} <= {1, 2; 1, 2})
926 matrix.sps:25: error: MATRIX: Operands to <= must have the same dimensions or
927 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
929 ({1, 1; 2, 2} = {1, 2; 1, 2})
941 matrix.sps:30: error: MATRIX: Operands to = must have the same dimensions or
942 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
946 AT_SETUP([MATRIX - logical operators])
947 AT_DATA([matrix.sps], [dnl
949 PRINT (NOT {-1, 0, 1}).
951 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
952 PRINT ({-1, 0, 1} AND -1).
953 PRINT ({-1, 0, 1} AND 0).
954 PRINT ({-1, 0, 1} AND 1).
955 PRINT ({-1, 0} AND {2; 3}).
957 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
958 PRINT ({-1, 0, 1} OR -1).
959 PRINT ({-1, 0, 1} OR 0).
960 PRINT ({-1, 0, 1} OR 1).
961 PRINT ({-1, 0} OR {2; 3}).
963 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
964 PRINT ({-1, 0, 1} XOR -1).
965 PRINT ({-1, 0, 1} XOR 0).
966 PRINT ({-1, 0, 1} XOR 1).
967 PRINT ({-1, 0} XOR {2; 3}).
970 AT_CHECK([pspp matrix.sps], [1], [dnl
974 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1})
988 matrix.sps:8: error: MATRIX: Operands to AND must have the same dimensions or
989 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
991 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1005 matrix.sps:14: error: MATRIX: Operands to OR must have the same dimensions or
1006 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
1008 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1022 matrix.sps:20: error: MATRIX: Operands to XOR must have the same dimensions or
1023 one must be a scalar, not matrices with dimensions (1,2) and (2,1).
1027 AT_SETUP([MATRIX - matrix operators])
1028 AT_DATA([matrix.sps], [dnl
1030 PRINT ({0, 1; 0, 0} * {0, 0; 1, 0}).
1031 PRINT ({0, 0; 1, 0} * {0, 1; 0, 0}).
1032 PRINT ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12}).
1033 PRINT ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3}).
1034 COMPUTE m = {0, 1, 0, 0; 1, 0, 1, 0; 0, 1, 0, 1; 0, 0, 1, 0}.
1042 PRINT {3, 3.5; 3.2, 3.6}**-1/FORMAT F6.2.
1044 PRINT ({1, 2, 3} * {1, 2}).
1050 AT_CHECK([pspp matrix.sps], [1], [dnl
1051 ({0, 1; 0, 0} * {0, 0; 1, 0})
1055 ({0, 0; 1, 0} * {0, 1; 0, 0})
1059 ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12})
1063 ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3})
1108 {3, 3.5; 3.2, 3.6}**-1
1112 matrix.sps:16: error: MATRIX: Matrices with dimensions (1,3) and (1,2) are not
1113 conformable for multiplication.
1115 matrix.sps:17: error: MATRIX: Matrix exponentation with ** requires a square
1116 matrix on the left-hand size, not one with dimensions (1,3).
1118 matrix.sps:18: error: MATRIX: Matrix exponentiation with ** requires a scalar
1119 on the right-hand side, not a matrix with dimensions (1,2).
1121 matrix.sps:19: error: MATRIX: Exponent 1.5 in matrix multiplication is non-
1122 integer or outside the valid range.
1126 AT_SETUP([MATRIX - sequences and construction])
1127 AT_DATA([matrix.sps], [dnl
1146 AT_CHECK([pspp matrix.sps], [1], [dnl
1169 matrix.sps:12: error: MATRIX: The increment operand to : must be nonzero.
1171 matrix.sps:13: error: MATRIX: The increment operand to : must be nonzero.
1173 matrix.sps:15: error: MATRIX: All rows in a matrix must have the same number of
1174 columns, but this tries to stack matrices with 2 and 1 columns.
1176 matrix.sps:16: error: MATRIX: All columns in a matrix must have the same number
1177 of rows, but this tries to paste matrices with 2 and 1 rows.
1181 AT_SETUP([MATRIX - comments])
1182 AT_DATA([matrix.sps], [dnl
1186 COMMENT Comment two.
1190 AT_CHECK([pspp matrix.sps], [0], [dnl
1199 AT_SETUP([MATRIX - string matrices])
1200 AT_DATA([matrix.sps], [dnl
1202 COMPUTE m={'This is', 'a string', 'matrix', 'including', 'some', 'long strings'}.
1206 AT_CHECK([pspp matrix.sps], [0], [dnl
1208 This is a string matrix includin some long str
1212 AT_SETUP([MATRIX - ABS ALL ANY ARSIN ARTAN])
1213 AT_DATA([matrix.sps], [dnl
1215 PRINT ABS({-1, 0, 1}).
1217 PRINT ALL({0, 0, 0}).
1219 PRINT ALL({-1, 0, 1}).
1221 PRINT ANY({0, 0, 0}).
1223 PRINT ANY({-1, 0, 1}).
1225 PRINT ARSIN({-1, 0, 1})/FORMAT=F5.2.
1227 PRINT ARTAN({-5, -1, 0, 1, 5})/FORMAT=F5.2.
1230 AT_CHECK([pspp matrix.sps], [0], [dnl
1255 ARTAN({-5, -1, 0, 1, 5})
1256 -1.37 -.79 .00 .79 1.37
1260 AT_SETUP([MATRIX - BLOCK CHOL CMAX CMIN COS])
1261 AT_DATA([matrix.sps], [dnl
1263 PRINT BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11}).
1265 COMPUTE b=CHOL({4, 12, -16; 12, 37, -43; -16, -43, 98}).
1269 PRINT CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1271 PRINT CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1273 PRINT COS({0.785, 1.57; 3.14, 1.57 + 3.14}) /FORMAT=F5.2.
1277 AT_CHECK([pspp matrix.sps], [0], [dnl
1278 BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11})
1297 CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11})
1300 CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11})
1303 COS({0.785, 1.57; 3.14, 1.57 + 3.14})
1309 AT_SETUP([MATRIX - CSSQ CSUM DESIGN DET DIAG])
1310 AT_DATA([matrix.sps], [dnl
1312 PRINT CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1313 PRINT CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1314 PRINT DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1}).
1315 PRINT DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1}).
1316 PRINT DET({1, 2, 3; 4, 5, 6; 7, 8, 9}) /FORMAT F4.1.
1317 PRINT DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10}).
1320 AT_CHECK([pspp matrix.sps], [0], [dnl
1321 CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
1324 CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
1327 DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1})
1332 warning: Column 2 in DESIGN argument has constant value.
1334 DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1})
1339 DET({1, 2, 3; 4, 5, 6; 7, 8, 9})
1342 DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10})
1349 AT_SETUP([MATRIX - EVAL EXP GINV GRADE GSCH])
1350 AT_DATA([matrix.sps], [dnl
1352 PRINT EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9}).
1354 PRINT EXP({2, 3; 4, 5})/FORMAT F5.2.
1356 PRINT GINV({1, 2})/FORMAT F5.2.
1357 COMPUTE a={1, 2, 3; 4, 5, 6; 7, 8, 9}.
1359 PRINT (a*g*a)/FORMAT F5.2.
1361 PRINT GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5}).
1362 COMPUTE x={26, 690, 323, 208, 671, 818, 732, 711, 585, 792}.
1364 COMPUTE asort(GRADE(asort))=asort.
1367 COMPUTE dsort(GRADE(-dsort))=dsort.
1370 PRINT (GSCH({3, 2; 1, 2}) * SQRT(10))/FORMAT F5.2.
1371 PRINT (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))/FORMAT F5.2.
1373 PRINT GSCH({0, 0, 0; 0, 0, 0}).
1376 AT_CHECK([pspp matrix.sps], [1], [dnl
1377 EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})
1395 GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5})
1401 26 208 323 585 671 690 711 732 792 818
1404 818 792 732 711 690 671 585 323 208 26
1406 (GSCH({3, 2; 1, 2}) * SQRT(10))
1410 (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))
1414 matrix.sps:22: error: MATRIX: GSCH requires its argument to have at least as
1415 many columns as rows, but it has dimensions (2,1).
1417 matrix.sps:23: error: MATRIX: Argument to GSCH with dimensions (2,3) contains
1418 only 0 linearly independent columns.
1422 AT_SETUP([MATRIX - IDENT INV KRONEKER LG10 LN])
1423 AT_DATA([matrix.sps], [dnl
1430 PRINT INV({3, 3.5; 3.2, 3.6})/FORMAT F8.2.
1431 PRINT INV({4, 7; 2, 6})/FORMAT F8.2.
1432 PRINT (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)/FORMAT F8.2.
1434 PRINT KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7}).
1436 PRINT LG10({1, 10, 100, 1000}).
1438 PRINT LN({1, 2; 3, 4})/FORMAT F5.2.
1441 AT_CHECK([pspp matrix.sps], [0], [dnl
1461 INV({3, 3.5; 3.2, 3.6})
1469 (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)
1474 KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7})
1480 LG10({1, 10, 100, 1000})
1489 AT_SETUP([MATRIX - MAGIC])
1490 AT_DATA([matrix.sps], [dnl
1495 COMPUTE total=n*(n**2 + 1) / 2.
1496 COMPUTE tb={MSUM(DIAG(T(m))), CSUM(m), MSUM(DIAG(m))} - total.
1497 COMPUTE lr=RSUM(m) - total.
1498 PRINT {tb; lr, m, lr; tb}/FORMAT F4.0.
1502 AT_CHECK([pspp matrix.sps], [0], [dnl
1528 0 24 14 22 18 17 16 0
1529 0 13 23 15 19 20 21 0
1535 0 30 39 48 1 10 19 28 0
1536 0 38 47 7 9 18 27 29 0
1537 0 46 6 8 17 26 35 37 0
1538 0 5 14 16 25 34 36 45 0
1539 0 13 15 24 33 42 44 4 0
1540 0 21 23 32 41 43 3 12 0
1541 0 22 31 40 49 2 11 20 0
1545 0 1 9 17 25 40 48 56 64 0
1546 0 63 55 47 39 26 18 10 2 0
1547 0 3 11 19 27 38 46 54 62 0
1548 0 61 53 45 37 28 20 12 4 0
1549 0 60 52 44 32 33 21 13 5 0
1550 0 6 14 22 30 35 43 51 59 0
1551 0 58 50 42 34 31 23 15 7 0
1552 0 8 16 24 36 29 41 49 57 0
1555 0 0 0 0 0 0 0 0 0 0 0
1556 0 47 58 69 80 1 12 23 34 45 0
1557 0 57 68 79 9 11 22 33 44 46 0
1558 0 67 78 8 10 21 32 43 54 56 0
1559 0 77 7 18 20 31 42 53 55 66 0
1560 0 6 17 19 30 41 52 63 65 76 0
1561 0 16 27 29 40 51 62 64 75 5 0
1562 0 26 28 39 50 61 72 74 4 15 0
1563 0 36 38 49 60 71 73 3 14 25 0
1564 0 37 48 59 70 81 2 13 24 35 0
1565 0 0 0 0 0 0 0 0 0 0 0
1567 0 0 0 0 0 0 0 0 0 0 0 0
1568 0 1 9 17 25 33 68 76 84 92 100 0
1569 0 99 91 83 75 67 34 26 18 10 2 0
1570 0 3 11 19 27 35 66 74 82 90 98 0
1571 0 97 89 81 72 65 36 29 20 12 4 0
1572 0 60 42 58 44 56 50 49 53 47 46 0
1573 0 41 59 43 57 45 51 52 48 54 55 0
1574 0 96 88 80 73 64 37 28 21 13 5 0
1575 0 6 14 22 30 38 63 71 79 87 95 0
1576 0 94 86 78 70 62 39 31 23 15 7 0
1577 0 8 16 24 32 40 61 69 77 85 93 0
1578 0 0 0 0 0 0 0 0 0 0 0 0
1582 AT_SETUP([MATRIX - MAKE MDIAG MMAX MMIN MOD])
1583 AT_DATA([matrix.sps], [dnl
1585 PRINT MAKE(1, 2, 3).
1586 PRINT MAKE(2, 1, 4).
1587 PRINT MAKE(2, 3, 5).
1589 PRINT MDIAG({1, 2, 3, 4}).
1590 PRINT MDIAG({1; 2; 3; 4}).
1591 PRINT MDIAG({1, 2; 3, 4}).
1593 PRINT MMAX({55, 44; 66, 11}).
1595 PRINT MMIN({55, 44; 66, 11}).
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}, -3).
1601 PRINT MOD({5, 4, 3, 2, 1, 0}, 1.5) /FORMAT F5.1.
1602 PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
1605 AT_CHECK([pspp matrix.sps], [1], [dnl
1629 matrix.sps:8: error: MATRIX: Function MDIAG argument 1 must be a vector, but it
1630 has dimensions (2,2).
1632 MMAX({55, 44; 66, 11})
1635 MMIN({55, 44; 66, 11})
1638 MOD({5, 4, 3, 2, 1, 0}, 3)
1641 MOD({5, 4, 3, 2, 1, 0}, -3)
1644 MOD({-5, -4, -3, -2, -1, 0}, 3)
1647 MOD({-5, -4, -3, -2, -1, 0}, -3)
1650 MOD({5, 4, 3, 2, 1, 0}, 1.5)
1653 matrix.sps:19: error: MATRIX: Divisor argument to MOD function must be nonzero.
1657 AT_SETUP([MATRIX - MSSQ MSUM NCOL NROW RANK])
1658 AT_DATA([matrix.sps], [dnl
1660 PRINT MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1662 PRINT MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1664 PRINT NCOL({1, 0; -2, -3; 3, 3}).
1666 PRINT NROW({1, 0; -2, -3; 3, 3}).
1668 PRINT RANK({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1669 PRINT RANK({1, 1, 0, 2; -1, -1, 0, -2}).
1670 PRINT RANK({1, -1; 1, -1; 0, 0; 2, -2}).
1671 PRINT RANK({1, 2, 1; -2, -3, 1; 3, 5, 0}).
1672 PRINT RANK({1, 0, 2; 2, 1, 0; 3, 2, 1}).
1675 AT_CHECK([pspp matrix.sps], [0], [dnl
1676 MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0})
1679 MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0})
1682 NCOL({1, 0; -2, -3; 3, 3})
1685 NROW({1, 0; -2, -3; 3, 3})
1688 RANK({1, 0, 1; -2, -3, 1; 3, 3, 0})
1691 RANK({1, 1, 0, 2; -1, -1, 0, -2})
1694 RANK({1, -1; 1, -1; 0, 0; 2, -2})
1697 RANK({1, 2, 1; -2, -3, 1; 3, 5, 0})
1700 RANK({1, 0, 2; 2, 1, 0; 3, 2, 1})
1705 AT_SETUP([MATRIX - RESHAPE RMAX RMIN RND RNKORDER])
1706 AT_DATA([matrix.sps], [dnl
1708 PRINT RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 1, 12).
1709 PRINT RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 2, 6).
1710 PRINT RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 3, 4).
1711 PRINT RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 4, 3).
1712 PRINT RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 6, 2).
1713 PRINT RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 12, 1).
1715 PRINT RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1717 PRINT RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0}).
1719 PRINT RND({-1.6, -1.5, -1.4;
1722 1.4, 1.5, 1.6})/FORMAT F5.1.
1724 PRINT RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5}) /FORMAT F5.1.
1727 AT_CHECK([pspp matrix.sps], [0], [dnl
1728 RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 1, 12)
1729 1 2 3 4 5 6 7 8 9 10 11 12
1731 RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 2, 6)
1735 RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 3, 4)
1740 RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 4, 3)
1746 RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 6, 2)
1754 RESHAPE({1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12}, 12, 1)
1768 RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0})
1773 RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0})
1778 RND({-1.6, -1.5, -1.4;
1787 RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5})
1794 AT_SETUP([MATRIX - RSSQ RSUM SIN SOLVE SQRT])
1795 AT_DATA([matrix.sps], [dnl
1797 PRINT RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1798 PRINT RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1800 PRINT SIN({0, .78, 1.57, 2.35, 3.14}) /FORMAT F5.2.
1802 PRINT SOLVE({2, 3; 4, 9}, {6, 2; 15, 5}) /FORMAT=F6.2.
1803 PRINT SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8}) /FORMAT=F6.2.
1804 PRINT SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3}) /FORMAT=F6.2.
1805 PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
1807 PRINT SQRT({0, 1, 2, 3, 4, 9, 81}) /FORMAT=F5.2.
1811 AT_CHECK([pspp matrix.sps], [1], [dnl
1812 RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
1817 RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
1822 SIN({0, .78, 1.57, 2.35, 3.14})
1823 .00 .70 1.00 .71 .00
1825 SOLVE({2, 3; 4, 9}, {6, 2; 15, 5})
1829 SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8})
1834 SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3})
1839 matrix.sps:10: error: MATRIX: SOLVE requires its arguments to have the same
1840 number of rows, but the first argument has dimensions (2,2) and the second
1843 SQRT({0, 1, 2, 3, 4, 9, 81})
1844 .00 1.00 1.41 1.73 2.00 3.00 9.00
1846 matrix.sps:13: error: MATRIX: Argument to SQRT must be nonnegative.
1850 AT_SETUP([MATRIX - SSCP SVAL SWEEP TRACE TRANSPOS TRUNC])
1851 AT_DATA([matrix.sps], [dnl
1853 COMPUTE m={1, 2, 3; 4, 5, 6}
1854 COMPUTE sscp1=SSCP(m).
1855 COMPUTE sscp2=T(m)*m.
1857 PRINT (sscp1 <> sscp2).
1859 PRINT SVAL({1, 1; 0, 0})/FORMAT F5.2.
1860 PRINT SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})/FORMAT F5.2.
1861 PRINT SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
1863 PRINT SVAL({2, 4; 1, 3; 0, 0; 0, 0})/FORMAT F5.2.
1865 COMPUTE s0 = {6, 12, 0, 12; 12, 28, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
1866 PRINT SWEEP(s0, 1)/FORMAT F5.2.
1867 PRINT SWEEP(SWEEP(s0, 1), 2)/FORMAT F5.2.
1868 PRINT SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)/FORMAT F5.2.
1870 COMPUTE s1 = {6, 12, 0, 12; 12, 0, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
1877 PRINT ALL(T(T(s0)) = s0).
1879 PRINT TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
1880 PRINT TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
1883 AT_CHECK([pspp matrix.sps], [0], [dnl
1898 SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})
1903 SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
1909 SVAL({2, 4; 1, 3; 0, 0; 0, 0})
1917 -2.00 1.00 2.00 4.00
1919 SWEEP(SWEEP(s0, 1), 2)
1923 -1.50 -.25 2.00 3.75
1925 SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)
1929 -1.50 -.25 -.33 3.08
1955 TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
1959 TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
1965 AT_SETUP([MATRIX - UNIFORM])
1966 AT_DATA([matrix.sps], [dnl
1969 PRINT (UNIFORM(4, 5)*10)/FORMAT F5.2.
1972 AT_CHECK([pspp matrix.sps], [0], [dnl
1974 7.71 2.99 .21 4.95 6.34
1975 4.43 7.49 8.32 4.99 5.83
1976 2.25 .25 1.98 7.09 7.61
1977 2.66 1.69 2.64 .88 1.50
1981 AT_SETUP([MATRIX - CALL SETDIAG])
1982 AT_DATA([matrix.sps], [dnl
1984 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
1987 CALL SETDIAG(x1, 10).
1991 CALL SETDIAG(x2, {10, 11}).
1995 CALL SETDIAG(x3, {10, 11, 12}).
1999 CALL SETDIAG(x4, {10, 11, 12, 13}).
2003 CALL SETDIAG(x5, {10, 11; 12, 13}).
2008 AT_CHECK([pspp matrix.sps], [1], [dnl
2029 matrix.sps:21: error: MATRIX: SETDIAG argument 2 must be a scalar or a vector
2030 but it has dimensions (2,2).
2039 dnl I have some doubts about the correctness of the results below.
2040 AT_SETUP([MATRIX - CALL EIGEN])
2041 AT_DATA([matrix.sps], [dnl
2043 CALL EIGEN({1, 0; 0, 1}, evec, eval).
2047 CALL EIGEN({3, 2, 4; 2, 0, 2; 4, 2, 3}, evec, eval).
2052 AT_CHECK([pspp matrix.sps], [0], [dnl
2062 -.6666666667 .0000000000 .7453559925
2063 -.3333333333 -.8944271910 -.2981423970
2064 -.6666666667 .4472135955 -.5962847940
2073 AT_SETUP([MATRIX - CALL SVD])
2074 AT_DATA([matrix.sps], [dnl
2076 CALL SVD({3, 2, 2; 2, 3, -2}, u, s, v).
2077 PRINT (u * s * T(v))/FORMAT F5.1.
2079 CALL SVD({2, 4; 1, 3; 0, 0; 0, 0}, u, s, v).
2080 PRINT (u*s*T(v))/FORMAT F5.1.
2082 CALL SVD({-3, 1; 6, -2; 6, -2}, u, s, v).
2083 PRINT (u*s*T(v))/FORMAT F5.1.
2086 AT_CHECK([pspp matrix.sps], [0], [dnl
2104 AT_SETUP([MATRIX - PRINT])
2105 AT_DATA([matrix.sps], [dnl
2107 PRINT/TITLE="title 1".
2108 PRINT/SPACE=2/TITLE="title 2".
2110 COMPUTE m={1, 2, 3; 3, 4, 5; 6, 7, 8}.
2111 PRINT m/RLABELS=123, a b c, long name.
2112 PRINT m/RNAMES={'123', 'a b c', 'long name'}.
2113 PRINT m/CLABELS=col1, col2, long column name.
2114 PRINT m/CNAMES={'col1', 'col2', 'long column name'}.
2115 PRINT m/RLABELS=123, a b c, long name
2116 /CLABELS=col1, col2, long column name.
2117 PRINT m/RNAMES={'123', 'a b c', 'long name'}
2118 /CNAMES={'col1', 'col2', 'long column name'}.
2119 PRINT {123e10, 456e10, 500}.
2123 AT_DATA([matrix-tables.sps], [dnl
2124 SET MDISPLAY=TABLES.
2125 INCLUDE 'matrix.sps'.
2128 AT_CHECK([pspp matrix.sps], [0], [dnl
2169 {123e10, 456e10, 500}
2171 1.2300000000 4.5600000000 .0000000005
2174 AT_CHECK([pspp matrix-tables.sps], [0], [dnl
2196 +----+----+----------------+
2197 |col1|col2|long column name|
2198 +----+----+----------------+
2202 +----+----+----------------+
2205 +----+----+--------+
2206 |col1|col2|long col|
2207 +----+----+--------+
2211 +----+----+--------+
2214 +---------+----+----+----------------+
2215 | |col1|col2|long column name|
2216 +---------+----+----+----------------+
2219 |long name| 6| 7| 8|
2220 +---------+----+----+----------------+
2223 +--------+----+----+--------+
2224 | |col1|col2|long col|
2225 +--------+----+----+--------+
2229 +--------+----+----+--------+
2231 {123e10, 456e10, 500}
2232 +----------------------------------------------+
2233 |1.2300000000[[a]] 4.5600000000[[a]] .0000000005[[a]]|
2234 +----------------------------------------------+
2239 AT_SETUP([MATRIX - DO IF])
2240 AT_DATA([matrix.sps], [dnl
2268 AT_CHECK([pspp matrix.sps], [1], [dnl
2275 matrix.sps:21: error: MATRIX: Expression for DO IF must evaluate to scalar, not
2276 a matrix with dimensions (1,2).
2278 matrix.sps:25: error: MATRIX: Expression for ELSE IF must evaluate to scalar,
2279 not a matrix with dimensions (0,0).
2283 AT_SETUP([MATRIX - unbounded LOOP])
2284 AT_DATA([matrix.sps], [dnl
2286 * Truly unbounded loop.
2296 * Unbounded loop terminates with BREAK.
2311 AT_CHECK([pspp matrix.sps], [0], [dnl
2316 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2317 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2324 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2329 AT_SETUP([MATRIX - indexed or conditional LOOP])
2330 AT_DATA([matrix.sps], [dnl
2332 * Indexed loop terminates based on index.
2340 * Indexed loop terminates based on MXLOOPS.
2348 * Indexed loop terminates with BREAK.
2359 * Indexed loop terminates with top IF.
2361 LOOP x=1 TO 50 IF NCOL(y) < 15.
2367 * Indexed loop terminates with bottom IF.
2371 END LOOP IF NCOL(y) >= 22.
2388 LOOP i=1 TO NROW(indexing).
2390 LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
2393 PRINT {indexing(i, :), y}.
2402 LOOP i=5 TO 8 BY {}.
2411 LOOP i=1e100 to 1e200.
2415 AT_CHECK([pspp matrix.sps], [1], [dnl
2420 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2427 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2428 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2435 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2442 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2448 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2452 1 10 1 1 2 3 4 5 6 7 8 9 10
2462 10 1 -1 10 9 8 7 6 5 4 3 2 1
2472 matrix.sps:67: error: MATRIX: Expression for LOOP must evaluate to scalar, not
2473 a matrix with dimensions (0,0).
2475 matrix.sps:70: error: MATRIX: Expression for TO must evaluate to scalar, not a
2476 matrix with dimensions (0,0).
2478 matrix.sps:73: error: MATRIX: Expression for BY must evaluate to scalar, not a
2479 matrix with dimensions (0,0).
2481 matrix.sps:76: error: MATRIX: Expression for LOOP IF must evaluate to scalar,
2482 not a matrix with dimensions (0,0).
2484 matrix.sps:79: error: MATRIX: Expression for END LOOP IF must evaluate to
2485 scalar, not a matrix with dimensions (0,0).
2487 matrix.sps:82: error: MATRIX: Expression for LOOP is outside the integer range.
2491 AT_SETUP([MATRIX - BREAK outside LOOP])
2492 AT_DATA([matrix.sps], [dnl
2497 AT_CHECK([pspp matrix.sps], [1], [dnl
2498 matrix.sps:2: error: BREAK: BREAK not inside LOOP.
2502 AT_SETUP([MATRIX - READ])
2503 AT_DATA([matrix.txt], [dnl
2517 AT_DATA([matrix2.txt], [dnl
2523 AT_DATA([matrix.sps], [dnl
2525 READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
2527 READ x/SIZE={2,4}/FIELD=1 TO 80.
2529 READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
2531 READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
2534 READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
2538 LOOP IF NOT EOF('matrix2.txt').
2539 READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
2545 AT_CHECK([pspp matrix.sps], [0], [dnl