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.35: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
152 24 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(0, :).
155 matrix.sps:25.38: error: MATRIX: 0 is not a valid column index for a 3×3
157 25 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 0).
160 matrix.sps:26.35: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
161 26 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(4, :).
164 matrix.sps:27.38: error: MATRIX: 4 is not a valid column index for a 3×3
166 27 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 4).
175 matrix.sps:33.20-33.31: error: MATRIX: Matrix row index must be scalar or
176 vector, not a 2×2 matrix.
177 33 | PRINT {1, 2, 3, 4}({1, 2; 3, 4}, :).
180 matrix.sps:34.23-34.34: error: MATRIX: Matrix column index must be scalar or
181 vector, not a 2×2 matrix.
182 34 | PRINT {1, 2, 3, 4}(:, {1, 2; 3, 4}).
187 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues])
188 AT_DATA([matrix.sps], [dnl
190 COMPUTE y={1, 2, 3; 4, 5, 6; 7, 8, 9}.
193 COMPUTE x1(1, :) = {11, 12, 13}.
197 COMPUTE x2(2, :) = {14, 15, 16}.
201 COMPUTE x3(3, :) = {17, 18, 19}.
205 COMPUTE x4(:, 1) = {11; 14; 17}.
209 COMPUTE x5(:, 2) = {12; 15; 18}.
213 COMPUTE x6(:, 3) = {13; 16; 19}.
217 COMPUTE x7(1, 1) = 11.
221 COMPUTE x8(1:2, 2:3) = {12, 13; 15, 16}.
225 COMPUTE x9({3, 1}, {2; 3}) = {18, 19; 12, 13}.
229 AT_CHECK([pspp matrix.sps], [0], [dnl
277 AT_SETUP([MATRIX - COMPUTE submatrices as lvalues - negative])
278 AT_DATA([matrix.sps], [dnl
280 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
281 COMPUTE x(1, :) = {}.
282 COMPUTE x(1, :) = 15.
283 COMPUTE x(1, :) = {11, 12}.
284 COMPUTE x(1, :) = {11, 12, 13, 14}.
285 COMPUTE x(:, 1) = {}.
286 COMPUTE x(:, 1) = 15.
287 COMPUTE x(:, 1) = {11, 12}.
288 COMPUTE x(:, 1) = {11, 12, 13, 14}.
292 COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
295 COMPUTE x({1, 2; 3, 4}, 5) = 1.
296 COMPUTE x(3, {1, 2; 3, 4}) = 1.
300 AT_CHECK([pspp matrix.sps], [1], [dnl
301 matrix.sps:3.9-3.15: error: MATRIX: Numbers of indexes for assigning to x
302 differ from the size of the source matrix.
303 3 | COMPUTE x(1, :) = {}.
306 matrix.sps:3.11: note: MATRIX: There is 1 row index.
307 3 | COMPUTE x(1, :) = {}.
310 matrix.sps:3.14: note: MATRIX: Destination matrix x has 3 columns.
311 3 | COMPUTE x(1, :) = {}.
314 matrix.sps:3.19-3.20: note: MATRIX: The source matrix is 0×0.
315 3 | COMPUTE x(1, :) = {}.
318 matrix.sps:4.9-4.15: error: MATRIX: Number of column indexes for assigning to x
319 differs from number of columns in source matrix.
320 4 | COMPUTE x(1, :) = 15.
323 matrix.sps:4.14: note: MATRIX: Destination matrix x has 3 columns.
324 4 | COMPUTE x(1, :) = 15.
327 matrix.sps:4.19-4.20: note: MATRIX: The source matrix is 1×1.
328 4 | COMPUTE x(1, :) = 15.
331 matrix.sps:5.9-5.15: error: MATRIX: Number of column indexes for assigning to x
332 differs from number of columns in source matrix.
333 5 | COMPUTE x(1, :) = {11, 12}.
336 matrix.sps:5.14: note: MATRIX: Destination matrix x has 3 columns.
337 5 | COMPUTE x(1, :) = {11, 12}.
340 matrix.sps:5.19-5.26: note: MATRIX: The source matrix is 1×2.
341 5 | COMPUTE x(1, :) = {11, 12}.
344 matrix.sps:6.9-6.15: error: MATRIX: Number of column indexes for assigning to x
345 differs from number of columns in source matrix.
346 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
349 matrix.sps:6.14: note: MATRIX: Destination matrix x has 3 columns.
350 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
353 matrix.sps:6.19-6.34: note: MATRIX: The source matrix is 1×4.
354 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
357 matrix.sps:7.9-7.15: error: MATRIX: Numbers of indexes for assigning to x
358 differ from the size of the source matrix.
359 7 | COMPUTE x(:, 1) = {}.
362 matrix.sps:7.11: note: MATRIX: Destination matrix x has 3 rows.
363 7 | COMPUTE x(:, 1) = {}.
366 matrix.sps:7.14: note: MATRIX: There is 1 column index.
367 7 | COMPUTE x(:, 1) = {}.
370 matrix.sps:7.19-7.20: note: MATRIX: The source matrix is 0×0.
371 7 | COMPUTE x(:, 1) = {}.
374 matrix.sps:8.9-8.15: error: MATRIX: Number of row indexes for assigning to x
375 differs from number of rows in source matrix.
376 8 | COMPUTE x(:, 1) = 15.
379 matrix.sps:8.11: note: MATRIX: Destination matrix x has 3 rows.
380 8 | COMPUTE x(:, 1) = 15.
383 matrix.sps:8.19-8.20: note: MATRIX: The source matrix is 1×1.
384 8 | COMPUTE x(:, 1) = 15.
387 matrix.sps:9.9-9.15: error: MATRIX: Numbers of indexes for assigning to x
388 differ from the size of the source matrix.
389 9 | COMPUTE x(:, 1) = {11, 12}.
392 matrix.sps:9.11: note: MATRIX: Destination matrix x has 3 rows.
393 9 | COMPUTE x(:, 1) = {11, 12}.
396 matrix.sps:9.14: note: MATRIX: There is 1 column index.
397 9 | COMPUTE x(:, 1) = {11, 12}.
400 matrix.sps:9.19-9.26: note: MATRIX: The source matrix is 1×2.
401 9 | COMPUTE x(:, 1) = {11, 12}.
404 matrix.sps:10.9-10.15: error: MATRIX: Numbers of indexes for assigning to x
405 differ from the size of the source matrix.
406 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
409 matrix.sps:10.11: note: MATRIX: Destination matrix x has 3 rows.
410 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
413 matrix.sps:10.14: note: MATRIX: There is 1 column index.
414 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
417 matrix.sps:10.19-10.34: note: MATRIX: The source matrix is 1×4.
418 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
421 matrix.sps:11.9-11.12: error: MATRIX: Can't use vector indexing on 3×3 matrix
423 11 | COMPUTE x(:) = 1.
426 matrix.sps:12.11: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
427 12 | COMPUTE x(0, 1) = 1.
430 matrix.sps:13.14: error: MATRIX: 0 is not a valid column index for a 3×3
432 13 | COMPUTE x(1, 0) = 1.
435 matrix.sps:14.11-14.19: error: MATRIX: 0 is not a valid row index for a 3×3
437 14 | COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
440 matrix.sps:15.11: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
441 15 | COMPUTE x(4, 3) = 1.
444 matrix.sps:16.14: error: MATRIX: 4 is not a valid column index for a 3×3
446 16 | COMPUTE x(3, 4) = 1.
449 matrix.sps:17.11-17.22: error: MATRIX: Matrix row index must be scalar or
450 vector, not a 2×2 matrix.
451 17 | COMPUTE x({1, 2; 3, 4}, 5) = 1.
454 matrix.sps:18.14-18.25: error: MATRIX: Matrix column index must be scalar or
455 vector, not a 2×2 matrix.
456 18 | COMPUTE x(3, {1, 2; 3, 4}) = 1.
466 AT_SETUP([MATRIX - subvectors as rvalues])
467 AT_DATA([matrix.sps], [dnl
469 PRINT {10, 20, 30}({}).
470 PRINT {10, 20, 30}(2).
471 PRINT {10, 20, 30}({2}).
472 PRINT {10, 20, 30}({1,3}).
473 PRINT {10, 20, 30}({2,3}).
474 PRINT {10, 20, 30}({1;3}).
475 PRINT {10, 20, 30}({2;3}).
476 PRINT {10, 20, 30}(2:3).
477 PRINT {10, 20, 30}(:).
479 PRINT {10; 20; 30}({}).
480 PRINT {10; 20; 30}(2).
481 PRINT {10; 20; 30}({2}).
482 PRINT {10; 20; 30}({1,3}).
483 PRINT {10; 20; 30}({2,3}).
484 PRINT {10; 20; 30}({1;3}).
485 PRINT {10; 20; 30}({2;3}).
486 PRINT {10; 20; 30}(2:3).
487 PRINT {10; 20; 30}(:).
491 PRINT {1, 2; 3, 4}(:).
492 PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
493 PRINT {1, 2, 3, 4}(0).
494 PRINT {1, 2, 3, 4}(5).
497 AT_CHECK([pspp matrix.sps], [1], [dnl
559 matrix.sps:24.7-24.18: error: MATRIX: Vector index operator may not be applied
561 24 | PRINT {1, 2; 3, 4}(:).
564 matrix.sps:25.20-25.31: error: MATRIX: Vector index must be scalar or vector,
566 25 | PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
569 matrix.sps:26.20: error: MATRIX: Index 0 is out of range for vector with 4
571 26 | PRINT {1, 2, 3, 4}(0).
574 matrix.sps:27.20: error: MATRIX: Index 5 is out of range for vector with 4
576 27 | PRINT {1, 2, 3, 4}(5).
581 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues])
582 AT_DATA([matrix.sps], [dnl
584 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
587 COMPUTE r1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
591 COMPUTE r2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
599 COMPUTE r4(1:2) = {11:12}.
603 COMPUTE r5({8;9}) = {18:19}.
606 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
609 COMPUTE c1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
613 COMPUTE c2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
621 COMPUTE c4(1:2) = {11:12}.
625 COMPUTE c5(8:9) = {18:19}.
629 AT_CHECK([pspp matrix.sps], [0], [dnl
631 11 12 13 14 15 16 17 18 19
634 11 12 13 14 15 16 17 18 19
646 11 12 13 14 15 16 17 18 19
649 11 12 13 14 15 16 17 18 19
662 AT_SETUP([MATRIX - COMPUTE subvectors as lvalues - negative])
663 AT_DATA([matrix.sps], [dnl
665 COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
666 COMPUTE r(1:3) = {1, 2; 3, 4}.
668 COMPUTE r(1:3) = {1}.
669 COMPUTE r(1:3) = {1, 2}.
670 COMPUTE r(1:3) = {1, 2, 3, 4}.
672 COMPUTE r(1:3) = {1}.
673 COMPUTE r(1:3) = {1; 2}.
674 COMPUTE r(1:3) = {1; 2; 3; 4}.
675 COMPUTE r(:) = {1; 2; 3; 4}.
678 COMPUTE r({1, 2; 3, 4}) = 1.
680 COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
681 COMPUTE c(1:3) = {1, 2; 3, 4}.
683 COMPUTE c(1:3) = {1}.
684 COMPUTE c(1:3) = {1, 2}.
685 COMPUTE c(1:3) = {1, 2, 3, 4}.
687 COMPUTE c(1:3) = {1}.
688 COMPUTE c(1:3) = {1; 2}.
689 COMPUTE c(1:3) = {1; 2; 3; 4}.
690 COMPUTE c(:) = {1; 2; 3; 4}.
693 COMPUTE c({1, 2; 3, 4}) = 1.
695 COMPUTE m = {1, 2; 3, 4}.
700 AT_CHECK([pspp matrix.sps], [1], [dnl
701 matrix.sps:3.9-3.14: error: MATRIX: Only an 3-element vector may be assigned to
702 this 3-element subvector of r.
703 3 | COMPUTE r(1:3) = {1, 2; 3, 4}.
706 matrix.sps:3.18-3.29: error: MATRIX: The source is an 2×2 matrix.
707 3 | COMPUTE r(1:3) = {1, 2; 3, 4}.
710 matrix.sps:4.9-4.14: error: MATRIX: Only an 3-element vector may be assigned to
711 this 3-element subvector of r.
712 4 | COMPUTE r(1:3) = {}.
715 matrix.sps:4.18-4.19: error: MATRIX: The source vector has 0 elements.
716 4 | COMPUTE r(1:3) = {}.
719 matrix.sps:5.9-5.14: error: MATRIX: Only an 3-element vector may be assigned to
720 this 3-element subvector of r.
721 5 | COMPUTE r(1:3) = {1}.
724 matrix.sps:5.19: error: MATRIX: The source vector has 1 element.
725 5 | COMPUTE r(1:3) = {1}.
728 matrix.sps:6.9-6.14: error: MATRIX: Only an 3-element vector may be assigned to
729 this 3-element subvector of r.
730 6 | COMPUTE r(1:3) = {1, 2}.
733 matrix.sps:6.18-6.23: error: MATRIX: The source vector has 2 elements.
734 6 | COMPUTE r(1:3) = {1, 2}.
737 matrix.sps:7.9-7.14: error: MATRIX: Only an 3-element vector may be assigned to
738 this 3-element subvector of r.
739 7 | COMPUTE r(1:3) = {1, 2, 3, 4}.
742 matrix.sps:7.18-7.29: error: MATRIX: The source vector has 4 elements.
743 7 | COMPUTE r(1:3) = {1, 2, 3, 4}.
746 matrix.sps:8.9-8.14: error: MATRIX: Only an 3-element vector may be assigned to
747 this 3-element subvector of r.
748 8 | COMPUTE r(1:3) = {}.
751 matrix.sps:8.18-8.19: error: MATRIX: The source vector has 0 elements.
752 8 | COMPUTE r(1:3) = {}.
755 matrix.sps:9.9-9.14: error: MATRIX: Only an 3-element vector may be assigned to
756 this 3-element subvector of r.
757 9 | COMPUTE r(1:3) = {1}.
760 matrix.sps:9.19: error: MATRIX: The source vector has 1 element.
761 9 | COMPUTE r(1:3) = {1}.
764 matrix.sps:10.9-10.14: error: MATRIX: Only an 3-element vector may be assigned
765 to this 3-element subvector of r.
766 10 | COMPUTE r(1:3) = {1; 2}.
769 matrix.sps:10.18-10.23: error: MATRIX: The source vector has 2 elements.
770 10 | COMPUTE r(1:3) = {1; 2}.
773 matrix.sps:11.9-11.14: error: MATRIX: Only an 3-element vector may be assigned
774 to this 3-element subvector of r.
775 11 | COMPUTE r(1:3) = {1; 2; 3; 4}.
778 matrix.sps:11.18-11.29: error: MATRIX: The source vector has 4 elements.
779 11 | COMPUTE r(1:3) = {1; 2; 3; 4}.
782 matrix.sps:12.9-12.12: error: MATRIX: Only an 9-element vector may be assigned
783 to this 9-element subvector of r.
784 12 | COMPUTE r(:) = {1; 2; 3; 4}.
787 matrix.sps:12.16-12.27: error: MATRIX: The source vector has 4 elements.
788 12 | COMPUTE r(:) = {1; 2; 3; 4}.
791 matrix.sps:13.11: error: MATRIX: Index 0 is out of range for vector with 9
793 13 | COMPUTE r(0) = 5.
796 matrix.sps:14.11-14.12: error: MATRIX: Index 10 is out of range for vector with
798 14 | COMPUTE r(10) = 5.
801 matrix.sps:15.11-15.22: error: MATRIX: Vector index must be scalar or vector,
803 15 | COMPUTE r({1, 2; 3, 4}) = 1.
806 matrix.sps:18.9-18.14: error: MATRIX: Only an 3-element vector may be assigned
807 to this 3-element subvector of c.
808 18 | COMPUTE c(1:3) = {1, 2; 3, 4}.
811 matrix.sps:18.18-18.29: error: MATRIX: The source is an 2×2 matrix.
812 18 | COMPUTE c(1:3) = {1, 2; 3, 4}.
815 matrix.sps:19.9-19.14: error: MATRIX: Only an 3-element vector may be assigned
816 to this 3-element subvector of c.
817 19 | COMPUTE c(1:3) = {}.
820 matrix.sps:19.18-19.19: error: MATRIX: The source vector has 0 elements.
821 19 | COMPUTE c(1:3) = {}.
824 matrix.sps:20.9-20.14: error: MATRIX: Only an 3-element vector may be assigned
825 to this 3-element subvector of c.
826 20 | COMPUTE c(1:3) = {1}.
829 matrix.sps:20.19: error: MATRIX: The source vector has 1 element.
830 20 | COMPUTE c(1:3) = {1}.
833 matrix.sps:21.9-21.14: error: MATRIX: Only an 3-element vector may be assigned
834 to this 3-element subvector of c.
835 21 | COMPUTE c(1:3) = {1, 2}.
838 matrix.sps:21.18-21.23: error: MATRIX: The source vector has 2 elements.
839 21 | COMPUTE c(1:3) = {1, 2}.
842 matrix.sps:22.9-22.14: error: MATRIX: Only an 3-element vector may be assigned
843 to this 3-element subvector of c.
844 22 | COMPUTE c(1:3) = {1, 2, 3, 4}.
847 matrix.sps:22.18-22.29: error: MATRIX: The source vector has 4 elements.
848 22 | COMPUTE c(1:3) = {1, 2, 3, 4}.
851 matrix.sps:23.9-23.14: error: MATRIX: Only an 3-element vector may be assigned
852 to this 3-element subvector of c.
853 23 | COMPUTE c(1:3) = {}.
856 matrix.sps:23.18-23.19: error: MATRIX: The source vector has 0 elements.
857 23 | COMPUTE c(1:3) = {}.
860 matrix.sps:24.9-24.14: error: MATRIX: Only an 3-element vector may be assigned
861 to this 3-element subvector of c.
862 24 | COMPUTE c(1:3) = {1}.
865 matrix.sps:24.19: error: MATRIX: The source vector has 1 element.
866 24 | COMPUTE c(1:3) = {1}.
869 matrix.sps:25.9-25.14: error: MATRIX: Only an 3-element vector may be assigned
870 to this 3-element subvector of c.
871 25 | COMPUTE c(1:3) = {1; 2}.
874 matrix.sps:25.18-25.23: error: MATRIX: The source vector has 2 elements.
875 25 | COMPUTE c(1:3) = {1; 2}.
878 matrix.sps:26.9-26.14: error: MATRIX: Only an 3-element vector may be assigned
879 to this 3-element subvector of c.
880 26 | COMPUTE c(1:3) = {1; 2; 3; 4}.
883 matrix.sps:26.18-26.29: error: MATRIX: The source vector has 4 elements.
884 26 | COMPUTE c(1:3) = {1; 2; 3; 4}.
887 matrix.sps:27.9-27.12: error: MATRIX: Only an 9-element vector may be assigned
888 to this 9-element subvector of c.
889 27 | COMPUTE c(:) = {1; 2; 3; 4}.
892 matrix.sps:27.16-27.27: error: MATRIX: The source vector has 4 elements.
893 27 | COMPUTE c(:) = {1; 2; 3; 4}.
896 matrix.sps:28.11: error: MATRIX: Index 0 is out of range for vector with 9
898 28 | COMPUTE c(0) = 5.
901 matrix.sps:29.11-29.12: error: MATRIX: Index 10 is out of range for vector with
903 29 | COMPUTE c(10) = 5.
906 matrix.sps:30.11-30.22: error: MATRIX: Vector index must be scalar or vector,
908 30 | COMPUTE c({1, 2; 3, 4}) = 1.
911 matrix.sps:33.9-33.12: error: MATRIX: Can't use vector indexing on 2×2 matrix
913 33 | COMPUTE m(5) = 1.
916 matrix.sps:34.9-34.12: error: MATRIX: Can't use vector indexing on 2×2 matrix
918 34 | COMPUTE m(:) = 1.
923 AT_SETUP([MATRIX - COMPUTE - negative])
924 AT_DATA([matrix.sps], [dnl
932 AT_CHECK([pspp matrix.sps], [1], [dnl
933 matrix.sps:2.10: error: COMPUTE: Syntax error at end of command: expecting `='.
935 matrix.sps:3.11: error: COMPUTE: Syntax error at end of command.
937 matrix.sps:4.9: error: MATRIX: Undefined variable x.
941 matrix.sps:5: error: COMPUTE: Undefined variable y.
945 AT_SETUP([MATRIX - elementwise arithmetic operators])
946 AT_DATA([matrix.sps], [dnl
951 PRINT ({1,2;3,4} + {5,6;7,8}).
952 PRINT ({1,2;3,4} + 5).
953 PRINT (5 + {5,6;7,8}).
954 PRINT ({1,2;3,4} + {5,6}).
956 PRINT ({1,2;3,4} - {5,6;7,8}).
957 PRINT ({1,2;3,4} - 5).
958 PRINT (5 - {5,6;7,8}).
959 PRINT ({1,2;3,4} - {5,6}).
961 PRINT ({1,2;3,4} * 5).
962 PRINT (5 * {5,6;7,8}).
964 PRINT ({2,4;6,8} / 2).
965 PRINT (12 / {1,2;3,4}).
966 PRINT ({2,8;18,32} / {1,2;3,4}).
968 PRINT ({1,2;3,4} &* {5,6;7,8}).
969 PRINT ({1,2;3,4} &* 5).
970 PRINT (5 &* {5,6;7,8}).
971 PRINT ({1,2;3,4} &* {5,6}).
973 PRINT ({2,4;6,8} &/ 2).
974 PRINT (12 &/ {1,2;3,4}).
975 PRINT ({2,8;18,32} &/ {1,2;3,4}).
977 PRINT ({1,2;3,4} &** 2).
978 PRINT (2 &** {1,2;3,4}).
979 PRINT ({1,2;3,4} &** {2,3;4,5}).
980 PRINT ({1,2;3,4} &** {5,6}).
983 AT_CHECK([pspp matrix.sps], [1], [dnl
991 ({1,2;3,4} + {5,6;7,8})
1003 matrix.sps:8.8-8.24: error: MATRIX: The operands of + must have the same
1004 dimensions or one must be a scalar.
1005 8 | PRINT ({1,2;3,4} + {5,6}).
1008 matrix.sps:8.8-8.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1009 8 | PRINT ({1,2;3,4} + {5,6}).
1012 matrix.sps:8.20-8.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
1013 8 | PRINT ({1,2;3,4} + {5,6}).
1016 ({1,2;3,4} - {5,6;7,8})
1028 matrix.sps:13.8-13.24: error: MATRIX: The operands of - must have the same
1029 dimensions or one must be a scalar.
1030 13 | PRINT ({1,2;3,4} - {5,6}).
1033 matrix.sps:13.8-13.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1034 13 | PRINT ({1,2;3,4} - {5,6}).
1037 matrix.sps:13.20-13.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
1038 13 | PRINT ({1,2;3,4} - {5,6}).
1057 ({2,8;18,32} / {1,2;3,4})
1061 ({1,2;3,4} &* {5,6;7,8})
1073 matrix.sps:25.8-25.25: error: MATRIX: The operands of &* must have the same
1074 dimensions or one must be a scalar.
1075 25 | PRINT ({1,2;3,4} &* {5,6}).
1076 | ^~~~~~~~~~~~~~~~~~
1078 matrix.sps:25.8-25.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1079 25 | PRINT ({1,2;3,4} &* {5,6}).
1082 matrix.sps:25.21-25.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
1083 25 | PRINT ({1,2;3,4} &* {5,6}).
1094 ({2,8;18,32} &/ {1,2;3,4})
1106 ({1,2;3,4} &** {2,3;4,5})
1110 matrix.sps:34.8-34.26: error: MATRIX: The operands of &** must have the same
1111 dimensions or one must be a scalar.
1112 34 | PRINT ({1,2;3,4} &** {5,6}).
1113 | ^~~~~~~~~~~~~~~~~~~
1115 matrix.sps:34.8-34.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1116 34 | PRINT ({1,2;3,4} &** {5,6}).
1119 matrix.sps:34.22-34.26: note: MATRIX: The right-hand operand is a 1×2 matrix.
1120 34 | PRINT ({1,2;3,4} &** {5,6}).
1125 AT_SETUP([MATRIX - relational operators])
1126 AT_DATA([matrix.sps], [dnl
1128 PRINT ({1, 1; 2, 2} > {1, 2; 1, 2}).
1129 PRINT ({1, 1; 2, 2} > 1).
1130 PRINT (2 > {1, 2; 1, 2}).
1131 PRINT ({1, 2} > {1; 2}).
1133 PRINT ({1, 1; 2, 2} < {1, 2; 1, 2}).
1134 PRINT ({1, 1; 2, 2} < 2).
1135 PRINT (1 < {1, 2; 1, 2}).
1136 PRINT ({1, 2} < {1; 2}).
1138 PRINT ({1, 1; 2, 2} <> {1, 2; 1, 2}).
1139 PRINT ({1, 1; 2, 2} <> 2).
1140 PRINT (1 <> {1, 2; 1, 2}).
1141 PRINT ({1, 2} <> {1; 2}).
1143 PRINT ({1, 1; 2, 2} >= {1, 2; 1, 2}).
1144 PRINT ({1, 1; 2, 2} >= 2).
1145 PRINT (1 >= {1, 2; 1, 2}).
1146 PRINT ({1, 2} >= {1; 2}).
1148 PRINT ({1, 1; 2, 2} <= {1, 2; 1, 2}).
1149 PRINT ({1, 1; 2, 2} <= 2).
1150 PRINT (1 <= {1, 2; 1, 2}).
1151 PRINT ({1, 2} <= {1; 2}).
1153 PRINT ({1, 1; 2, 2} = {1, 2; 1, 2}).
1154 PRINT ({1, 1; 2, 2} = 2).
1155 PRINT (1 = {1, 2; 1, 2}).
1156 PRINT ({1, 2} = {1; 2}).
1159 AT_CHECK([pspp matrix.sps], [1], [dnl
1160 ({1, 1; 2, 2} > {1, 2; 1, 2})
1172 matrix.sps:5.8-5.22: error: MATRIX: The operands of > must have the same
1173 dimensions or one must be a scalar.
1174 5 | PRINT ({1, 2} > {1; 2}).
1177 matrix.sps:5.8-5.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1178 5 | PRINT ({1, 2} > {1; 2}).
1181 matrix.sps:5.17-5.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1182 5 | PRINT ({1, 2} > {1; 2}).
1185 ({1, 1; 2, 2} < {1, 2; 1, 2})
1197 matrix.sps:10.8-10.22: error: MATRIX: The operands of < must have the same
1198 dimensions or one must be a scalar.
1199 10 | PRINT ({1, 2} < {1; 2}).
1202 matrix.sps:10.8-10.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1203 10 | PRINT ({1, 2} < {1; 2}).
1206 matrix.sps:10.17-10.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1207 10 | PRINT ({1, 2} < {1; 2}).
1210 ({1, 1; 2, 2} <> {1, 2; 1, 2})
1222 matrix.sps:15.8-15.23: error: MATRIX: The operands of <> must have the same
1223 dimensions or one must be a scalar.
1224 15 | PRINT ({1, 2} <> {1; 2}).
1227 matrix.sps:15.8-15.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1228 15 | PRINT ({1, 2} <> {1; 2}).
1231 matrix.sps:15.18-15.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1232 15 | PRINT ({1, 2} <> {1; 2}).
1235 ({1, 1; 2, 2} >= {1, 2; 1, 2})
1247 matrix.sps:20.8-20.23: error: MATRIX: The operands of >= must have the same
1248 dimensions or one must be a scalar.
1249 20 | PRINT ({1, 2} >= {1; 2}).
1252 matrix.sps:20.8-20.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1253 20 | PRINT ({1, 2} >= {1; 2}).
1256 matrix.sps:20.18-20.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1257 20 | PRINT ({1, 2} >= {1; 2}).
1260 ({1, 1; 2, 2} <= {1, 2; 1, 2})
1272 matrix.sps:25.8-25.23: error: MATRIX: The operands of <= must have the same
1273 dimensions or one must be a scalar.
1274 25 | PRINT ({1, 2} <= {1; 2}).
1277 matrix.sps:25.8-25.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1278 25 | PRINT ({1, 2} <= {1; 2}).
1281 matrix.sps:25.18-25.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1282 25 | PRINT ({1, 2} <= {1; 2}).
1285 ({1, 1; 2, 2} = {1, 2; 1, 2})
1297 matrix.sps:30.8-30.22: error: MATRIX: The operands of = must have the same
1298 dimensions or one must be a scalar.
1299 30 | PRINT ({1, 2} = {1; 2}).
1302 matrix.sps:30.8-30.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1303 30 | PRINT ({1, 2} = {1; 2}).
1306 matrix.sps:30.17-30.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1307 30 | PRINT ({1, 2} = {1; 2}).
1312 AT_SETUP([MATRIX - logical operators])
1313 AT_DATA([matrix.sps], [dnl
1315 PRINT (NOT {-1, 0, 1}).
1317 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1318 PRINT ({-1, 0, 1} AND -1).
1319 PRINT ({-1, 0, 1} AND 0).
1320 PRINT ({-1, 0, 1} AND 1).
1321 PRINT ({-1, 0} AND {2; 3}).
1323 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1324 PRINT ({-1, 0, 1} OR -1).
1325 PRINT ({-1, 0, 1} OR 0).
1326 PRINT ({-1, 0, 1} OR 1).
1327 PRINT ({-1, 0} OR {2; 3}).
1329 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1330 PRINT ({-1, 0, 1} XOR -1).
1331 PRINT ({-1, 0, 1} XOR 0).
1332 PRINT ({-1, 0, 1} XOR 1).
1333 PRINT ({-1, 0} XOR {2; 3}).
1336 AT_CHECK([pspp matrix.sps], [1], [dnl
1340 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1354 matrix.sps:8.8-8.25: error: MATRIX: The operands of AND must have the same
1355 dimensions or one must be a scalar.
1356 8 | PRINT ({-1, 0} AND {2; 3}).
1357 | ^~~~~~~~~~~~~~~~~~
1359 matrix.sps:8.8-8.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1360 8 | PRINT ({-1, 0} AND {2; 3}).
1363 matrix.sps:8.20-8.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
1364 8 | PRINT ({-1, 0} AND {2; 3}).
1367 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1381 matrix.sps:14.8-14.24: error: MATRIX: The operands of OR must have the same
1382 dimensions or one must be a scalar.
1383 14 | PRINT ({-1, 0} OR {2; 3}).
1386 matrix.sps:14.8-14.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1387 14 | PRINT ({-1, 0} OR {2; 3}).
1390 matrix.sps:14.19-14.24: note: MATRIX: The right-hand operand is a 2×1 matrix.
1391 14 | PRINT ({-1, 0} OR {2; 3}).
1394 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1408 matrix.sps:20.8-20.25: error: MATRIX: The operands of XOR must have the same
1409 dimensions or one must be a scalar.
1410 20 | PRINT ({-1, 0} XOR {2; 3}).
1411 | ^~~~~~~~~~~~~~~~~~
1413 matrix.sps:20.8-20.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1414 20 | PRINT ({-1, 0} XOR {2; 3}).
1417 matrix.sps:20.20-20.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
1418 20 | PRINT ({-1, 0} XOR {2; 3}).
1423 AT_SETUP([MATRIX - matrix operators])
1424 AT_DATA([matrix.sps], [dnl
1426 PRINT ({0, 1; 0, 0} * {0, 0; 1, 0}).
1427 PRINT ({0, 0; 1, 0} * {0, 1; 0, 0}).
1428 PRINT ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12}).
1429 PRINT ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3}).
1430 COMPUTE m = {0, 1, 0, 0; 1, 0, 1, 0; 0, 1, 0, 1; 0, 0, 1, 0}.
1438 PRINT {3, 3.5; 3.2, 3.6}**-1/FORMAT F6.2.
1440 PRINT ({1, 2, 3} * {1, 2}).
1446 AT_CHECK([pspp matrix.sps], [1], [dnl
1447 ({0, 1; 0, 0} * {0, 0; 1, 0})
1451 ({0, 0; 1, 0} * {0, 1; 0, 0})
1455 ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12})
1459 ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3})
1504 {3, 3.5; 3.2, 3.6}**-1
1508 matrix.sps:16.8-16.25: error: MATRIX: Matrices not conformable for
1510 16 | PRINT ({1, 2, 3} * {1, 2}).
1511 | ^~~~~~~~~~~~~~~~~~
1513 matrix.sps:16.8-16.16: note: MATRIX: The left-hand operand is a 1×3 matrix.
1514 16 | PRINT ({1, 2, 3} * {1, 2}).
1517 matrix.sps:16.20-16.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
1518 16 | PRINT ({1, 2, 3} * {1, 2}).
1521 matrix.sps:17.7-17.15: error: MATRIX: Matrix exponentation with ** requires a
1522 square matrix on the left-hand size, not one with dimensions 1×3.
1523 17 | PRINT {1, 2, 3}**2.
1526 matrix.sps:18.10-18.15: error: MATRIX: Matrix exponentiation with ** requires a
1527 scalar on the right-hand side, not a matrix with dimensions 1×2.
1528 18 | PRINT m**{1, 2}.
1531 matrix.sps:19.10-19.12: error: MATRIX: Exponent 1.5 in matrix multiplication is
1532 non-integer or outside the valid range.
1538 AT_SETUP([MATRIX - sequences and construction])
1539 AT_DATA([matrix.sps], [dnl
1561 AT_CHECK([pspp matrix.sps], [1], [dnl
1590 matrix.sps:15.12: error: MATRIX: The increment operand to : must be nonzero.
1594 matrix.sps:16.14: error: MATRIX: The increment operand to : must be nonzero.
1595 16 | PRINT {-1:-3:0}.
1598 matrix.sps:18.7-18.15: error: MATRIX: This expression tries to vertically join
1599 matrices with differing numbers of columns.
1600 18 | PRINT {1, 2; 3}.
1603 matrix.sps:18.8-18.11: note: MATRIX: This operand is a 1×2 matrix.
1604 18 | PRINT {1, 2; 3}.
1607 matrix.sps:18.14: note: MATRIX: This operand is a 1×1 matrix.
1608 18 | PRINT {1, 2; 3}.
1611 matrix.sps:19.7-19.17: error: MATRIX: This expression tries to horizontally
1612 join matrices with differing numbers of rows.
1613 19 | PRINT {{2; 5}, 3}.
1616 matrix.sps:19.8-19.13: note: MATRIX: This operand is a 2×1 matrix.
1617 19 | PRINT {{2; 5}, 3}.
1620 matrix.sps:19.16: note: MATRIX: This operand is a 1×1 matrix.
1621 19 | PRINT {{2; 5}, 3}.
1626 AT_SETUP([MATRIX - comments])
1627 AT_DATA([matrix.sps], [dnl
1631 COMMENT Comment two.
1635 AT_CHECK([pspp matrix.sps], [0], [dnl
1644 AT_SETUP([MATRIX - string matrices])
1645 AT_DATA([matrix.sps], [dnl
1647 COMPUTE m={'This is', 'a string', 'matrix', 'including', 'some', 'long strings'}.
1651 AT_CHECK([pspp matrix.sps], [0], [dnl
1653 This is a string matrix includin some long str
1657 AT_SETUP([MATRIX - ABS ALL ANY ARSIN ARTAN])
1658 AT_DATA([matrix.sps], [dnl
1660 PRINT ABS({-1, 0, 1}).
1662 PRINT ALL({0, 0, 0}).
1664 PRINT ALL({-1, 0, 1}).
1666 PRINT ANY({0, 0, 0}).
1668 PRINT ANY({-1, 0, 1}).
1670 PRINT ARSIN({-1, 0, 1})/FORMAT=F5.2.
1672 PRINT ARTAN({-5, -1, 0, 1, 5})/FORMAT=F5.2.
1675 AT_CHECK([pspp matrix.sps], [0], [dnl
1700 ARTAN({-5, -1, 0, 1, 5})
1701 -1.37 -.79 .00 .79 1.37
1705 AT_SETUP([MATRIX - BLOCK CHOL CMAX CMIN COS])
1706 AT_DATA([matrix.sps], [dnl
1708 PRINT BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11}).
1710 COMPUTE b=CHOL({4, 12, -16; 12, 37, -43; -16, -43, 98}).
1714 PRINT CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1716 PRINT CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1718 PRINT COS({0.785, 1.57; 3.14, 1.57 + 3.14}) /FORMAT=F5.2.
1722 AT_CHECK([pspp matrix.sps], [0], [dnl
1723 BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11})
1742 CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11})
1745 CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11})
1748 COS({0.785, 1.57; 3.14, 1.57 + 3.14})
1754 AT_SETUP([MATRIX - CSSQ CSUM DESIGN DET DIAG])
1755 AT_DATA([matrix.sps], [dnl
1757 PRINT CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1758 PRINT CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1759 PRINT DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1}).
1760 PRINT DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1}).
1761 PRINT DET({1, 2, 3; 4, 5, 6; 7, 8, 9}) /FORMAT F4.1.
1762 PRINT DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10}).
1765 AT_CHECK([pspp matrix.sps], [0], [dnl
1766 CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
1769 CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
1772 DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1})
1777 warning: Column 2 in DESIGN argument has constant value.
1779 DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1})
1784 DET({1, 2, 3; 4, 5, 6; 7, 8, 9})
1787 DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10})
1794 AT_SETUP([MATRIX - EVAL EXP GINV GRADE GSCH])
1795 AT_DATA([matrix.sps], [dnl
1797 PRINT EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})/FORMAT=F5.2.
1799 PRINT EXP({2, 3; 4, 5})/FORMAT F5.2.
1801 PRINT GINV({1, 2})/FORMAT F5.2.
1802 COMPUTE a={1, 2, 3; 4, 5, 6; 7, 8, 9}.
1804 PRINT (a*g*a)/FORMAT F5.2.
1806 PRINT GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5}).
1807 COMPUTE x={26, 690, 323, 208, 671, 818, 732, 711, 585, 792}.
1809 COMPUTE asort(GRADE(asort))=asort.
1812 COMPUTE dsort(GRADE(-dsort))=dsort.
1815 PRINT (GSCH({3, 2; 1, 2}) * SQRT(10))/FORMAT F5.2.
1816 PRINT (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))/FORMAT F5.2.
1818 PRINT GSCH({0, 0, 0; 0, 0, 0}).
1821 AT_CHECK([pspp matrix.sps], [1], [dnl
1822 EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})
1840 GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5})
1846 26 208 323 585 671 690 711 732 792 818
1849 818 792 732 711 690 671 585 323 208 26
1851 (GSCH({3, 2; 1, 2}) * SQRT(10))
1855 (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))
1859 matrix.sps:22.12-22.17: error: MATRIX: GSCH requires its argument to have at
1860 least as many columns as rows, but it has dimensions 2×1.
1861 22 | PRINT GSCH({0; 0}).
1864 matrix.sps:23.12-23.29: error: MATRIX: 2×3 argument to GSCH contains only 0
1865 linearly independent columns.
1866 23 | PRINT GSCH({0, 0, 0; 0, 0, 0}).
1867 | ^~~~~~~~~~~~~~~~~~
1871 AT_SETUP([MATRIX - IDENT INV KRONEKER LG10 LN])
1872 AT_DATA([matrix.sps], [dnl
1879 PRINT INV({3, 3.5; 3.2, 3.6})/FORMAT F8.2.
1880 PRINT INV({4, 7; 2, 6})/FORMAT F8.2.
1881 PRINT (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)/FORMAT F8.2.
1883 PRINT KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7}).
1885 PRINT LG10({1, 10, 100, 1000}).
1887 PRINT LN({1, 2; 3, 4})/FORMAT F5.2.
1891 AT_CHECK([pspp matrix.sps], [1], [dnl
1911 INV({3, 3.5; 3.2, 3.6})
1919 (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)
1924 KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7})
1930 LG10({1, 10, 100, 1000})
1937 matrix.sps:16.7-16.11: error: MATRIX: Argument 1 to matrix function LN must be
1942 matrix.sps:16.10: note: MATRIX: Argument 1 is 0.
1948 AT_SETUP([MATRIX - MAGIC])
1949 AT_DATA([matrix.sps], [dnl
1954 COMPUTE total=n*(n**2 + 1) / 2.
1955 COMPUTE tb={MSUM(DIAG(T(m))), CSUM(m), MSUM(DIAG(m))} - total.
1956 COMPUTE lr=RSUM(m) - total.
1957 PRINT {tb; lr, m, lr; tb}/FORMAT F4.0.
1961 AT_CHECK([pspp matrix.sps], [0], [dnl
1987 0 24 14 22 18 17 16 0
1988 0 13 23 15 19 20 21 0
1994 0 30 39 48 1 10 19 28 0
1995 0 38 47 7 9 18 27 29 0
1996 0 46 6 8 17 26 35 37 0
1997 0 5 14 16 25 34 36 45 0
1998 0 13 15 24 33 42 44 4 0
1999 0 21 23 32 41 43 3 12 0
2000 0 22 31 40 49 2 11 20 0
2004 0 1 9 17 25 40 48 56 64 0
2005 0 63 55 47 39 26 18 10 2 0
2006 0 3 11 19 27 38 46 54 62 0
2007 0 61 53 45 37 28 20 12 4 0
2008 0 60 52 44 32 33 21 13 5 0
2009 0 6 14 22 30 35 43 51 59 0
2010 0 58 50 42 34 31 23 15 7 0
2011 0 8 16 24 36 29 41 49 57 0
2014 0 0 0 0 0 0 0 0 0 0 0
2015 0 47 58 69 80 1 12 23 34 45 0
2016 0 57 68 79 9 11 22 33 44 46 0
2017 0 67 78 8 10 21 32 43 54 56 0
2018 0 77 7 18 20 31 42 53 55 66 0
2019 0 6 17 19 30 41 52 63 65 76 0
2020 0 16 27 29 40 51 62 64 75 5 0
2021 0 26 28 39 50 61 72 74 4 15 0
2022 0 36 38 49 60 71 73 3 14 25 0
2023 0 37 48 59 70 81 2 13 24 35 0
2024 0 0 0 0 0 0 0 0 0 0 0
2026 0 0 0 0 0 0 0 0 0 0 0 0
2027 0 1 9 17 25 33 68 76 84 92 100 0
2028 0 99 91 83 75 67 34 26 18 10 2 0
2029 0 3 11 19 27 35 66 74 82 90 98 0
2030 0 97 89 81 72 65 36 29 20 12 4 0
2031 0 60 42 58 44 56 50 49 53 47 46 0
2032 0 41 59 43 57 45 51 52 48 54 55 0
2033 0 96 88 80 73 64 37 28 21 13 5 0
2034 0 6 14 22 30 38 63 71 79 87 95 0
2035 0 94 86 78 70 62 39 31 23 15 7 0
2036 0 8 16 24 32 40 61 69 77 85 93 0
2037 0 0 0 0 0 0 0 0 0 0 0 0
2041 AT_SETUP([MATRIX - MAKE MDIAG MMAX MMIN MOD])
2042 AT_DATA([matrix.sps], [dnl
2044 PRINT MAKE(1, 2, 3).
2045 PRINT MAKE(2, 1, 4).
2046 PRINT MAKE(2, 3, 5).
2048 PRINT MDIAG({1, 2, 3, 4}).
2049 PRINT MDIAG({1; 2; 3; 4}).
2050 PRINT MDIAG({1, 2; 3, 4}).
2052 PRINT MMAX({55, 44; 66, 11}).
2054 PRINT MMIN({55, 44; 66, 11}).
2056 PRINT MOD({5, 4, 3, 2, 1, 0}, 3).
2057 PRINT MOD({5, 4, 3, 2, 1, 0}, -3).
2058 PRINT MOD({-5, -4, -3, -2, -1, 0}, 3).
2059 PRINT MOD({-5, -4, -3, -2, -1, 0}, -3).
2060 PRINT MOD({5, 4, 3, 2, 1, 0}, 1.5) /FORMAT F5.1.
2061 PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
2064 AT_CHECK([pspp matrix.sps], [1], [dnl
2088 matrix.sps:8.13-8.24: error: MATRIX: Function MDIAG argument 1 must be a
2089 vector, not a 2×2 matrix.
2090 8 | PRINT MDIAG({1, 2; 3, 4}).
2093 MMAX({55, 44; 66, 11})
2096 MMIN({55, 44; 66, 11})
2099 MOD({5, 4, 3, 2, 1, 0}, 3)
2102 MOD({5, 4, 3, 2, 1, 0}, -3)
2105 MOD({-5, -4, -3, -2, -1, 0}, 3)
2108 MOD({-5, -4, -3, -2, -1, 0}, -3)
2111 MOD({5, 4, 3, 2, 1, 0}, 1.5)
2114 matrix.sps:19.7-19.32: error: MATRIX: Argument 2 to matrix function MOD must
2116 19 | PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
2117 | ^~~~~~~~~~~~~~~~~~~~~~~~~~
2121 AT_SETUP([MATRIX - MSSQ MSUM NCOL NROW RANK])
2122 AT_DATA([matrix.sps], [dnl
2124 PRINT MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2126 PRINT MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2128 PRINT NCOL({1, 0; -2, -3; 3, 3}).
2130 PRINT NROW({1, 0; -2, -3; 3, 3}).
2132 PRINT RANK({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2133 PRINT RANK({1, 1, 0, 2; -1, -1, 0, -2}).
2134 PRINT RANK({1, -1; 1, -1; 0, 0; 2, -2}).
2135 PRINT RANK({1, 2, 1; -2, -3, 1; 3, 5, 0}).
2136 PRINT RANK({1, 0, 2; 2, 1, 0; 3, 2, 1}).
2139 AT_CHECK([pspp matrix.sps], [0], [dnl
2140 MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0})
2143 MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0})
2146 NCOL({1, 0; -2, -3; 3, 3})
2149 NROW({1, 0; -2, -3; 3, 3})
2152 RANK({1, 0, 1; -2, -3, 1; 3, 3, 0})
2155 RANK({1, 1, 0, 2; -1, -1, 0, -2})
2158 RANK({1, -1; 1, -1; 0, 0; 2, -2})
2161 RANK({1, 2, 1; -2, -3, 1; 3, 5, 0})
2164 RANK({1, 0, 2; 2, 1, 0; 3, 2, 1})
2169 AT_SETUP([MATRIX - RESHAPE RMAX RMIN RND RNKORDER])
2170 AT_DATA([matrix.sps], [dnl
2172 PRINT RESHAPE(1:12, 1, 12).
2173 PRINT RESHAPE(1:12, 2, 6).
2174 PRINT RESHAPE(1:12, 3, 4).
2175 PRINT RESHAPE(1:12, 4, 3).
2176 PRINT RESHAPE(1:12, 6, 2).
2177 PRINT RESHAPE(1:12, 12, 1).
2179 PRINT RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2181 PRINT RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2183 PRINT RND({-1.6, -1.5, -1.4;
2186 1.4, 1.5, 1.6})/FORMAT F5.1.
2188 PRINT RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5}) /FORMAT F5.1.
2191 AT_CHECK([pspp matrix.sps], [0], [dnl
2192 RESHAPE(1:12, 1, 12)
2193 1 2 3 4 5 6 7 8 9 10 11 12
2218 RESHAPE(1:12, 12, 1)
2232 RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0})
2237 RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0})
2242 RND({-1.6, -1.5, -1.4;
2251 RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5})
2258 AT_SETUP([MATRIX - RSSQ RSUM SIN SOLVE SQRT])
2259 AT_DATA([matrix.sps], [dnl
2261 PRINT RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
2262 PRINT RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
2264 PRINT SIN({0, .78, 1.57, 2.35, 3.14}) /FORMAT F5.2.
2266 PRINT SOLVE({2, 3; 4, 9}, {6, 2; 15, 5}) /FORMAT=F6.2.
2267 PRINT SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8}) /FORMAT=F6.2.
2268 PRINT SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3}) /FORMAT=F6.2.
2269 PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2271 PRINT SQRT({0, 1, 2, 3, 4, 9, 81}) /FORMAT=F5.2.
2275 AT_CHECK([pspp matrix.sps], [1], [dnl
2276 RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
2281 RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
2286 SIN({0, .78, 1.57, 2.35, 3.14})
2287 .00 .70 1.00 .71 .00
2289 SOLVE({2, 3; 4, 9}, {6, 2; 15, 5})
2293 SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8})
2298 SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3})
2303 matrix.sps:10.7-10.33: error: MATRIX: SOLVE arguments must have the same number
2305 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2306 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
2308 matrix.sps:10.13-10.24: note: MATRIX: Argument 1 has dimensions 2×2.
2309 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2312 matrix.sps:10.27-10.32: note: MATRIX: Argument 2 has dimensions 1×2.
2313 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2316 SQRT({0, 1, 2, 3, 4, 9, 81})
2317 .00 1.00 1.41 1.73 2.00 3.00 9.00
2319 matrix.sps:13.7-13.14: error: MATRIX: Argument 1 to matrix function SQRT must
2320 be greater than or equal to 0.
2321 13 | PRINT SQRT(-1).
2324 matrix.sps:13.12-13.13: note: MATRIX: Argument 1 is -1.
2325 13 | PRINT SQRT(-1).
2330 AT_SETUP([MATRIX - SSCP SVAL SWEEP TRACE TRANSPOS TRUNC])
2331 AT_DATA([matrix.sps], [dnl
2333 COMPUTE m={1, 2, 3; 4, 5, 6}
2334 COMPUTE sscp1=SSCP(m).
2335 COMPUTE sscp2=T(m)*m.
2337 PRINT (sscp1 <> sscp2).
2339 PRINT SVAL({1, 1; 0, 0})/FORMAT F5.2.
2340 PRINT SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})/FORMAT F5.2.
2341 PRINT SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
2343 PRINT SVAL({2, 4; 1, 3; 0, 0; 0, 0})/FORMAT F5.2.
2345 COMPUTE s0 = {6, 12, 0, 12; 12, 28, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
2346 PRINT SWEEP(s0, 1)/FORMAT F5.2.
2347 PRINT SWEEP(SWEEP(s0, 1), 2)/FORMAT F5.2.
2348 PRINT SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)/FORMAT F5.2.
2350 COMPUTE s1 = {6, 12, 0, 12; 12, 0, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
2353 COMPUTE s2 = {0, 1, 2; 3, 4, 5; 6, 7, 8}.
2362 PRINT ALL(T(T(s0)) = s0).
2364 PRINT TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
2365 PRINT TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
2368 AT_CHECK([pspp matrix.sps], [0], [dnl
2383 SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})
2388 SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
2394 SVAL({2, 4; 1, 3; 0, 0; 0, 0})
2402 -2.00 1.00 2.00 4.00
2404 SWEEP(SWEEP(s0, 1), 2)
2408 -1.50 -.25 2.00 3.75
2410 SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)
2414 -1.50 -.25 -.33 3.08
2428 -.7500000000 -.2500000000 .7500000000
2429 .7500000000 .2500000000 1.2500000000
2430 .7500000000 -1.7500000000 -.7500000000
2433 -1.5000000000 -.7500000000 -.2500000000
2434 -.7500000000 -.3750000000 -.6250000000
2435 .7500000000 .8750000000 .1250000000
2455 TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
2459 TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
2465 AT_SETUP([MATRIX - UNIFORM])
2466 AT_DATA([matrix.sps], [dnl
2469 PRINT (UNIFORM(4, 5)*10)/FORMAT F5.2.
2472 AT_CHECK([pspp matrix.sps], [0], [dnl
2474 7.71 2.99 .21 4.95 6.34
2475 4.43 7.49 8.32 4.99 5.83
2476 2.25 .25 1.98 7.09 7.61
2477 2.66 1.69 2.64 .88 1.50
2481 AT_SETUP([MATRIX - invalid function arguments])
2482 AT_DATA([matrix.sps], [dnl
2484 COMPUTE x=MOD({1,2,3},{4,5,6}).
2485 COMPUTE x=MDIAG({1, 2; 3, 4}).
2487 COMPUTE x=ARSIN({1, 1; -1, 2}).
2488 COMPUTE x=CDF.UNIFORM(2,1,1).
2489 COMPUTE x=CDF.UNIFORM(1,2,1).
2490 COMPUTE x=CDF.UNIFORM({1,2},1,1).
2494 AT_CHECK([pspp matrix.sps], [1], [dnl
2495 matrix.sps:2.23-2.29: error: MATRIX: Function MOD argument 2 must be a scalar,
2497 2 | COMPUTE x=MOD({1,2,3},{4,5,6}).
2500 matrix.sps:3.17-3.28: error: MATRIX: Function MDIAG argument 1 must be a
2501 vector, not a 2×2 matrix.
2502 3 | COMPUTE x=MDIAG({1, 2; 3, 4}).
2505 matrix.sps:4.17: error: MATRIX: Argument 1 to matrix function ARSIN is 2, which
2506 is outside the valid range [[-1,1]].
2507 4 | COMPUTE x=ARSIN(2).
2510 matrix.sps:5.17-5.29: error: MATRIX: Row 2, column 2 of argument 1 to matrix
2511 function ARSIN is 2, which is outside the valid range [[-1,1]].
2512 5 | COMPUTE x=ARSIN({1, 1; -1, 2}).
2515 error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
2518 matrix.sps:6.23: note: MATRIX: Argument 1 is 2.
2519 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
2522 matrix.sps:6.27: note: MATRIX: Argument 3 is 1.
2523 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
2526 error: Argument 2 to matrix function CDF.UNIFORM must be less than or equal to
2529 matrix.sps:7.25: note: MATRIX: Argument 2 is 2.
2530 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
2533 matrix.sps:7.27: note: MATRIX: Argument 3 is 1.
2534 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
2537 error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
2540 matrix.sps:8.23-8.27: note: MATRIX: Row 1, column 2 of argument 1 is 2.
2541 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
2544 matrix.sps:8.31: note: MATRIX: Argument 3 is 1.
2545 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
2548 matrix.sps:9.11-9.18: error: MATRIX: Argument 1 to matrix function MAGIC must
2549 be greater than or equal to 3.
2550 9 | COMPUTE x=MAGIC(2).
2553 matrix.sps:9.17: note: MATRIX: Argument 1 is 2.
2554 9 | COMPUTE x=MAGIC(2).
2559 AT_SETUP([MATRIX - invalid number function arguments])
2560 AT_DATA([matrix.sps], [dnl
2564 COMPUTE x=KRONEKER(1,2,3).
2566 COMPUTE x=IDENT(1,2,3).
2570 AT_CHECK([pspp matrix.sps], [1], [dnl
2571 matrix.sps:2: error: COMPUTE: Matrix function ABS requires 1 argument.
2573 matrix.sps:3: error: COMPUTE: Matrix function ABS requires 1 argument.
2575 matrix.sps:4: error: COMPUTE: Matrix function KRONEKER requires 2 arguments.
2577 matrix.sps:5: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2578 but 0 were provided.
2580 matrix.sps:6: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2581 but 3 were provided.
2583 matrix.sps:7: error: COMPUTE: Matrix function BLOCK requires at least one
2588 AT_SETUP([MATRIX - CALL SETDIAG])
2589 AT_DATA([matrix.sps], [dnl
2591 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
2594 CALL SETDIAG(x1, 10).
2598 CALL SETDIAG(x2, {10, 11}).
2602 CALL SETDIAG(x3, {10, 11, 12}).
2606 CALL SETDIAG(x4, {10, 11, 12, 13}).
2610 CALL SETDIAG(x5, {10, 11; 12, 13}).
2615 AT_CHECK([pspp matrix.sps], [1], [dnl
2636 matrix.sps:21.18-21.33: error: MATRIX: SETDIAG argument 2 must be a scalar or a
2637 vector, not a 2×2 matrix.
2638 21 | CALL SETDIAG(x5, {10, 11; 12, 13}).
2648 dnl I have some doubts about the correctness of the results below.
2649 AT_SETUP([MATRIX - CALL EIGEN])
2650 AT_DATA([matrix.sps], [dnl
2652 CALL EIGEN({1, 0; 0, 1}, evec, eval).
2656 CALL EIGEN({3, 2, 4; 2, 0, 2; 4, 2, 3}, evec2, eval2).
2661 AT_CHECK([pspp matrix.sps], [0], [dnl
2671 -.6666666667 .0000000000 .7453559925
2672 -.3333333333 -.8944271910 -.2981423970
2673 -.6666666667 .4472135955 -.5962847940
2682 AT_SETUP([MATRIX - CALL SVD])
2683 AT_DATA([matrix.sps], [dnl
2685 CALL SVD({3, 2, 2; 2, 3, -2}, u, s, v).
2686 PRINT (u * s * T(v))/FORMAT F5.1.
2688 CALL SVD({2, 4; 1, 3; 0, 0; 0, 0}, u, s, v).
2689 PRINT (u*s*T(v))/FORMAT F5.1.
2691 CALL SVD({-3, 1; 6, -2; 6, -2}, u, s, v).
2692 PRINT (u*s*T(v))/FORMAT F5.1.
2695 AT_CHECK([pspp matrix.sps], [0], [dnl
2713 AT_SETUP([MATRIX - PRINT])
2714 AT_DATA([matrix.sps], [dnl
2716 PRINT/TITLE="title 1".
2717 PRINT/SPACE=2/TITLE="title 2".
2719 COMPUTE m={1, 2, 3; 3, 4, 5; 6, 7, 8}.
2720 PRINT m/RLABELS=123, a b c, long name.
2721 PRINT m/RNAMES={'123', 'a b c', 'long name'}.
2722 PRINT m/CLABELS=col1, col2, long column name.
2723 PRINT m/CNAMES={'col1', 'col2', 'long column name'}.
2724 PRINT m/RLABELS=123, a b c, long name
2725 /CLABELS=col1, col2, long column name.
2726 PRINT m/RNAMES={'123', 'a b c', 'long name'}
2727 /CNAMES={'col1', 'col2', 'long column name'}.
2728 PRINT {123e10, 456e10, 500}.
2732 AT_DATA([matrix-tables.sps], [dnl
2733 SET MDISPLAY=TABLES.
2734 INCLUDE 'matrix.sps'.
2737 AT_CHECK([pspp matrix.sps], [0], [dnl
2778 {123e10, 456e10, 500}
2780 1.2300000000 4.5600000000 .0000000005
2783 AT_CHECK([pspp matrix-tables.sps], [0], [dnl
2805 +----+----+----------------+
2806 |col1|col2|long column name|
2807 +----+----+----------------+
2811 +----+----+----------------+
2814 +----+----+--------+
2815 |col1|col2|long col|
2816 +----+----+--------+
2820 +----+----+--------+
2823 +---------+----+----+----------------+
2824 | |col1|col2|long column name|
2825 +---------+----+----+----------------+
2828 |long name| 6| 7| 8|
2829 +---------+----+----+----------------+
2832 +--------+----+----+--------+
2833 | |col1|col2|long col|
2834 +--------+----+----+--------+
2838 +--------+----+----+--------+
2840 {123e10, 456e10, 500}
2841 +----------------------------------------------+
2842 |1.2300000000[[a]] 4.5600000000[[a]] .0000000005[[a]]|
2843 +----------------------------------------------+
2848 AT_SETUP([MATRIX - DO IF])
2849 AT_DATA([matrix.sps], [dnl
2877 AT_CHECK([pspp matrix.sps], [1], [dnl
2884 matrix.sps:20.7-20.12: error: MATRIX: Expression for DO IF must evaluate to
2885 scalar, not a 1×2 matrix.
2889 matrix.sps:24.9-24.10: error: MATRIX: Expression for ELSE IF must evaluate to
2890 scalar, not a 0×0 matrix.
2896 AT_SETUP([MATRIX - unbounded LOOP])
2897 AT_DATA([matrix.sps], [dnl
2899 * Truly unbounded loop.
2909 * Unbounded loop terminates with BREAK.
2924 AT_CHECK([pspp matrix.sps], [0], [dnl
2929 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2930 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2937 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2942 AT_SETUP([MATRIX - indexed or conditional LOOP])
2943 AT_DATA([matrix.sps], [dnl
2945 * Indexed loop terminates based on index.
2953 * Indexed loop terminates based on MXLOOPS.
2961 * Indexed loop terminates with BREAK.
2972 * Indexed loop terminates with top IF.
2974 LOOP x=1 TO 50 IF NCOL(y) < 15.
2980 * Indexed loop terminates with bottom IF.
2984 END LOOP IF NCOL(y) >= 22.
3001 LOOP i=1 TO NROW(indexing).
3003 LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
3006 PRINT {indexing(i, :), y}.
3015 LOOP i=5 TO 8 BY {}.
3024 LOOP i=1e100 to 1e200.
3028 AT_CHECK([pspp matrix.sps], [1], [dnl
3033 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3040 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3041 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
3048 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3055 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3061 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3065 1 10 1 1 2 3 4 5 6 7 8 9 10
3075 10 1 -1 10 9 8 7 6 5 4 3 2 1
3085 matrix.sps:66.8-66.9: error: MATRIX: Expression for LOOP must evaluate to
3086 scalar, not a 0×0 matrix.
3087 66 | LOOP i={} TO 5.
3090 matrix.sps:69.13-69.14: error: MATRIX: Expression for TO must evaluate to
3091 scalar, not a 0×0 matrix.
3092 69 | LOOP i=5 TO {}.
3095 matrix.sps:72.18-72.19: error: MATRIX: Expression for BY must evaluate to
3096 scalar, not a 0×0 matrix.
3097 72 | LOOP i=5 TO 8 BY {}.
3100 matrix.sps:75.9-75.10: error: MATRIX: Expression for LOOP IF must evaluate to
3101 scalar, not a 0×0 matrix.
3105 matrix.sps:79.13-79.14: error: MATRIX: Expression for END LOOP IF must evaluate
3106 to scalar, not a 0×0 matrix.
3107 79 | END LOOP IF {}.
3110 matrix.sps:81.8-81.12: error: MATRIX: Expression for LOOP is outside the
3112 81 | LOOP i=1e100 to 1e200.
3117 AT_SETUP([MATRIX - BREAK outside LOOP])
3118 AT_DATA([matrix.sps], [dnl
3123 AT_CHECK([pspp matrix.sps], [1], [dnl
3124 matrix.sps:2: error: BREAK: BREAK not inside LOOP.
3128 AT_SETUP([MATRIX - READ])
3129 AT_DATA([matrix.txt], [dnl
3155 AT_DATA([matrix2.txt], [dnl
3161 AT_DATA([matrix3.txt], [dnl
3168 AT_DATA([matrix.sps], [dnl
3170 READ x/FILE='matrix.txt'/SIZE=4/FIELD=1 TO 1.
3172 READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
3174 READ x/SIZE={2,4}/FIELD=1 TO 80.
3176 READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
3178 READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
3181 READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
3183 READ x/SIZE={2,3}/FIELD=1 TO 20/FORMAT=DOLLAR.
3185 READ x/SIZE={2,4}/FIELD=1 TO 20/FORMAT=DOLLAR5.1.
3187 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4PCT'.
3189 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4A'.
3193 LOOP IF NOT EOF('matrix2.txt').
3194 READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
3199 COMPUTE m = MAKE(5, 5, 0).
3201 READ count /FILE='matrix3.txt' /FIELD=1 TO 1 /SIZE=1.
3202 READ m(i, 1:count) /FIELD=3 TO 100 /REREAD.
3207 AT_CHECK([pspp matrix.sps], [0], [dnl
3266 AT_SETUP([MATRIX - READ - negative])
3267 AT_DATA([matrix.sps], [dnl
3274 READ x/FIELD=1 TO !.
3275 READ x/FIELD=1 TO 0.
3276 READ x/FIELD=1 TO 10 BY !.
3277 READ x/FIELD=1 TO 10 BY 6.
3281 READ x/FORMAT=F8.2/FORMAT=F8.2.
3282 READ x/FORMAT='5XYZZY'.
3283 READ x/FORMAT=XYZZY.
3286 READ x/FIELD=1 TO 10.
3287 READ x/FIELD=1 TO 10/SIZE={1,2}.
3288 READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3289 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3290 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3291 READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3292 READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3293 READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3295 READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3296 READ x/FIELD=1 TO 10/SIZE={1,3}/FILE='matrix.txt'/MODE=SYMMETRIC.
3297 READ x/FIELD=1 TO 10/SIZE=2/FILE='matrix.txt'.
3300 AT_DATA([matrix.txt], [dnl
3304 AT_CHECK([pspp matrix.sps], [1], [dnl
3305 matrix.sps:2.6: error: READ: Syntax error at `!': expecting identifier.
3307 matrix.sps:3.13: error: READ: Syntax error at `!': expecting a file name or
3310 matrix.sps:4.17: error: READ: Syntax error at `!': expecting string.
3312 matrix.sps:5.14: error: READ: Syntax error at `!': Expected positive integer
3315 matrix.sps:6.16: error: READ: Syntax error at `!': expecting `TO'.
3317 matrix.sps:7.19: error: READ: Syntax error at `!': Expected positive integer
3320 matrix.sps:8.19: error: READ: Syntax error at `0': Expected positive integer
3323 matrix.sps:9.25: error: READ: Syntax error at `!': Expected integer between 1
3326 matrix.sps:10: error: READ: BY 6 does not evenly divide record width 10.
3328 matrix.sps:11.13: error: READ: Syntax error at `!'.
3330 matrix.sps:12.13: error: READ: Syntax error at `!': expecting RECTANGULAR or
3333 matrix.sps:13.15: error: READ: Syntax error at `!': expecting identifier.
3335 matrix.sps:14: error: READ: Subcommand FORMAT may only be specified once.
3337 matrix.sps:15.15-15.22: error: READ: Syntax error at `'5XYZZY'': Unknown format
3340 matrix.sps:16: error: READ: Unknown format type `XYZZY'.
3342 matrix.sps:17.8: error: READ: Syntax error at `!': expecting FILE, FIELD, MODE,
3345 matrix.sps:18: error: READ: Required subcommand FIELD was not specified.
3347 matrix.sps:19: error: READ: SIZE is required for reading data into a full
3348 matrix (as opposed to a submatrix).
3350 matrix.sps:20: error: READ: Required subcommand FILE was not specified.
3352 matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
3354 matrix.sps:22: error: READ: FORMAT specifies field width 5 but BY specifies 2.
3356 matrix.sps:23: error: READ: FORMAT specifies 2 repetitions with record width
3357 10, which implies field width 5, but BY specifies field width 2.
3359 matrix.sps:24.27-24.35: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3360 element vector, not a 2×2 matrix.
3361 24 | READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3364 matrix.sps:25.27-25.33: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3365 element vector, not a 1×3 matrix.
3366 25 | READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3369 matrix.sps:26.28-26.29: error: MATRIX: Matrix dimensions -1×1 specified on SIZE
3370 are outside valid range.
3371 26 | READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3374 matrix.sps:28: error: MATRIX: Dimensions specified on SIZE differ from
3375 dimensions of destination submatrix.
3377 matrix.sps:28.32-28.36: note: MATRIX: SIZE specifies dimensions 2×2.
3378 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3381 matrix.sps:28.6-28.11: note: MATRIX: Destination submatrix has dimensions 1×3.
3382 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3385 matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
3388 matrix.txt:1.1-1.5: warning: Error reading "xyzzy" as format F for matrix row
3389 1, column 1: Field contents are not numeric.
3391 matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
3392 1: Matrix data may not contain missing value.
3396 AT_SETUP([MATRIX - WRITE])
3397 AT_DATA([matrix.sps], [dnl
3399 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
3400 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
3401 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
3402 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
3403 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
3404 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
3405 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
3406 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
3407 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
3410 AT_CHECK([pspp matrix.sps])
3411 AT_CHECK([cat matrix.txt], [0], [dnl
3433 AT_SETUP([MATRIX - WRITE - negative])
3434 AT_DATA([matrix.sps], [dnl
3441 WRITE 1/FIELD=1 TO 0.
3442 WRITE 1/FIELD=1 TO 10 BY 20.
3443 WRITE 1/FIELD=1 TO 10 BY 6.
3444 WRITE 1/MODE=TRAPEZOIDAL.
3445 WRITE 1/FORMAT=F5/FORMAT=F5.
3446 WRITE 1/FORMAT='5ASDF'.
3447 WRITE 1/FORMAT=ASDF5.
3450 WRITE 1/FIELD=1 TO 10.
3451 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3452 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3453 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3454 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3455 WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3458 AT_CHECK([pspp matrix.sps], [1], [dnl
3459 matrix.sps:2.7: error: WRITE: Syntax error at `!'.
3461 matrix.sps:3.17: error: WRITE: Syntax error at `!': expecting a file name or
3464 matrix.sps:4.18: error: WRITE: Syntax error at `!': expecting string.
3466 matrix.sps:5.15: error: WRITE: Syntax error at `!': Expected positive integer
3469 matrix.sps:6.17: error: WRITE: Syntax error at `!': expecting `TO'.
3471 matrix.sps:7.20: error: WRITE: Syntax error at `0': Expected positive integer
3474 matrix.sps:8.26-8.27: error: WRITE: Syntax error at `20': Expected integer
3475 between 1 and 10 for BY.
3477 matrix.sps:9: error: WRITE: BY 6 does not evenly divide record width 10.
3479 matrix.sps:10.14-10.24: error: WRITE: Syntax error at `TRAPEZOIDAL': expecting
3480 RECTANGULAR or TRIANGULAR.
3482 matrix.sps:11: error: WRITE: Subcommand FORMAT may only be specified once.
3484 matrix.sps:12.16-12.22: error: WRITE: Syntax error at `'5ASDF'': Unknown format
3487 matrix.sps:13: error: WRITE: Unknown format type `ASDF'.
3489 matrix.sps:14.9: error: WRITE: Syntax error at `!': expecting OUTFILE, FIELD,
3490 MODE, HOLD, or FORMAT.
3492 matrix.sps:15: error: WRITE: Required subcommand FIELD was not specified.
3494 matrix.sps:16: error: WRITE: Required subcommand OUTFILE was not specified.
3496 matrix.sps:17: error: WRITE: 15 repetitions cannot fit in record width 10.
3498 matrix.sps:18: error: WRITE: FORMAT specifies 5 repetitions with record width
3499 10, which implies field width 2, but BY specifies field width 5.
3501 matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
3502 requires a width between 6 and 40.
3504 matrix.sps:20: error: WRITE: Format A9 is too wide for 8-byte matrix eleemnts.
3506 matrix.sps:21.7-21.11: error: MATRIX: WRITE with MODE=TRIANGULAR requires a
3507 square matrix but the matrix to be written has dimensions 1×2.
3508 21 | WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3513 AT_SETUP([MATRIX - GET])
3514 AT_DATA([matrix.sps], [dnl
3515 DATA LIST LIST NOTABLE /a b c.
3516 MISSING VALUES a(1) b(5).
3525 GET x0 /NAMES=names0.
3527 PRINT names0/FORMAT=A8.
3531 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
3533 PRINT names1/FORMAT=A8.
3537 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
3539 PRINT names2/FORMAT=A8.
3543 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
3545 PRINT names3/FORMAT=A8.
3549 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
3551 PRINT names4/FORMAT=A8.
3554 SAVE OUTFILE='matrix.sav'.
3558 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
3560 PRINT names5/FORMAT=A8.
3564 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
3566 PRINT names6/FORMAT=A8.
3570 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
3572 PRINT names7/FORMAT=A8.
3575 AT_CHECK([pspp matrix.sps], [1], [dnl
3576 matrix.sps:11: error: MATRIX: Variable a in case 2 has user-missing value 1.
3578 matrix.sps:12.7-12.8: error: MATRIX: Uninitialized variable x0 used in
3588 matrix.sps:17: error: MATRIX: Variable c in case 4 is system-missing.
3590 matrix.sps:18.7-18.8: error: MATRIX: Uninitialized variable x1 used in
3608 matrix.sps:29: error: MATRIX: Variable c in case 4 is system-missing.
3610 matrix.sps:30.7-30.8: error: MATRIX: Uninitialized variable x3 used in
3630 matrix.sps:44: error: MATRIX: Variable c in case 4 is system-missing.
3632 matrix.sps:45.7-45.8: error: MATRIX: Uninitialized variable x5 used in
3665 AT_SETUP([MATRIX - GET - negative])
3666 AT_DATA([matrix.sps], [dnl
3667 DATA LIST LIST NOTABLE /a b c * d(a1).
3668 MISSING VALUES a(1) b(5).
3675 SAVE OUTFILE='matrix.sav'.
3687 GET x/VARIABLES=x TO !.
3689 GET x/VARIABLES=c TO a.
3699 AT_CHECK([pspp matrix.sps], [1], [dnl
3700 matrix.sps:12.5: error: GET: Syntax error at `!': expecting identifier.
3702 matrix.sps:13.17: error: GET: Syntax error at `!': expecting variable name.
3704 matrix.sps:14.12: error: GET: Syntax error at `!': expecting a file name or
3707 matrix.sps:15.16: error: GET: Syntax error at `!': expecting string.
3709 matrix.sps:16.13: error: GET: Syntax error at `!': expecting identifier.
3711 matrix.sps:17.15: error: GET: Syntax error at `!'.
3713 matrix.sps:18.14: error: GET: Syntax error at `!'.
3715 matrix.sps:19.7: error: GET: Syntax error at `!': expecting FILE, VARIABLES,
3716 NAMES, MISSING, or SYSMIS.
3718 matrix.sps:20.17: error: GET: Syntax error at `!': expecting variable name.
3720 matrix.sps:21.22: error: GET: Syntax error at `!': expecting variable name.
3722 matrix.sps:22: error: MATRIX: x is not a variable name.
3724 matrix.sps:23: error: MATRIX: c TO a is not valid syntax since c precedes a in
3727 matrix.sps:24: warning: MATRIX: d is not a numeric variable.
3729 matrix.sps:25: error: MATRIX: Variable d is not numeric.
3731 error: The GET command cannot read an empty active file.
3735 AT_SETUP([MATRIX - SAVE])
3736 AT_DATA([matrix.sps], [dnl
3738 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3739 SAVE {7,8,9}/VARIABLES=a b c d.
3741 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3742 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3744 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3745 SAVE {4,'xyzw',6}/STRINGS=a, b.
3748 AT_CHECK([pspp matrix.sps])
3749 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3755 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3760 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
3767 AT_SETUP([MATRIX - SAVE - inline])
3768 AT_DATA([matrix.sps], [dnl
3770 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
3771 SAVE {7,8,9}/VARIABLES=a b c d.
3776 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
3777 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3782 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
3783 SAVE {4,'xyzw',6}/STRINGS=a, b.
3787 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3806 AT_SETUP([MATRIX - SAVE - negative])
3807 AT_DATA([matrix.sps], [dnl
3815 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
3816 SAVE 1/OUTFILE='matrix2.sav'.
3817 SAVE {1,2}/OUTFILE='matrix2.sav'.
3818 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
3819 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
3820 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
3823 AT_CHECK([pspp matrix.sps], [1], [dnl
3824 matrix.sps:2.6: error: SAVE: Syntax error at `!'.
3826 matrix.sps:3.16: error: SAVE: Syntax error at `!': expecting a file name or
3829 matrix.sps:4.18: error: SAVE: Syntax error at `!': expecting variable name.
3831 matrix.sps:5.14: error: SAVE: Syntax error at `!'.
3833 matrix.sps:6.8: error: SAVE: Syntax error at `!': expecting OUTFILE, VARIABLES,
3836 matrix.sps:7: error: SAVE: Required subcommand OUTFILE was not specified.
3838 matrix.sps:8: warning: SAVE: VARIABLES and NAMES both specified; ignoring
3841 matrix.sps:10: error: MATRIX: Cannot save 1×2 matrix to `matrix2.sav' because
3842 the first SAVE to `matrix2.sav' in this matrix program wrote a 1-column matrix.
3844 matrix.sps:9: error: MATRIX: This is the location of the first SAVE to
3847 error: Duplicate variable name a in SAVE statement.
3849 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
3851 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
3856 AT_SETUP([MATRIX - MGET])
3857 AT_DATA([matrix.sps], [dnl
3859 VARIABLES=ROWTYPE_ var01 TO var08.
3861 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
3862 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
3863 N 92 92 92 92 92 92 92 92
3867 CORR .36 .31 -.14 1.00
3868 CORR .27 .16 -.12 .22 1.00
3869 CORR .33 .15 -.17 .24 .21 1.00
3870 CORR .50 .29 -.20 .32 .12 .38 1.00
3871 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
3876 PRINT MN/FORMAT=F5.1.
3877 PRINT SD/FORMAT=F5.1.
3878 PRINT NC/FORMAT=F5.0.
3879 PRINT CR/FORMAT=F5.2.
3882 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3883 Table: Matrix Variables Created by MGET
3892 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
3895 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
3898 92 92 92 92 92 92 92 92
3901 1.00 .18 -.22 .36 .27 .33 .50 .17
3902 .18 1.00 -.17 .31 .16 .15 .29 .29
3903 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
3904 .36 .31 -.14 1.00 .22 .24 .32 .20
3905 .27 .16 -.12 .22 1.00 .21 .12 .27
3906 .33 .15 -.17 .24 .21 1.00 .38 .20
3907 .50 .29 -.20 .32 .12 .38 1.00 .04
3908 .17 .29 -.05 .20 .27 .20 .04 1.00
3912 AT_SETUP([MATRIX - MGET with split variables])
3913 AT_DATA([matrix.sps], [dnl
3915 variables = s1 s2 rowtype_ var01 var02 var03
3919 8 0 mean 21.4 5.0 72.9
3924 8 0 corr -.16 -.22 1
3925 8 1 mean 11.4 1.0 52.9
3935 PRINT MNS1/FORMAT=F5.1.
3936 PRINT SDS1/FORMAT=F5.1.
3937 PRINT NCS1/FORMAT=F5.0.
3938 PRINT CRS1/FORMAT=F5.2.
3939 PRINT MNS2/FORMAT=F5.1.
3940 PRINT SDS2/FORMAT=F5.1.
3941 PRINT NCS2/FORMAT=F5.0.
3942 PRINT CRS2/FORMAT=F5.2.
3945 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
3946 Table: Matrix Variables Created by MGET
3947 ,Split Values,,Dimensions,
3988 AT_SETUP([MATRIX - MGET with factor variables])
3989 AT_DATA([matrix.sps], [dnl
3991 VARIABLES=ROWTYPE_ f1 var01 TO var04
4005 FORMATS var01 TO var04(F5.1).
4006 SAVE OUTFILE='matrix.sav'.
4008 AT_DATA([matrix2.sps], [dnl
4010 MGET FILE='matrix.sav'.
4011 PRINT MNF1/FORMAT=F2.0.
4012 PRINT SDF1/FORMAT=F2.0.
4013 PRINT NCF1/FORMAT=F2.0.
4014 PRINT MNF2/FORMAT=F2.0.
4015 PRINT SDF2/FORMAT=F2.0.
4016 PRINT NCF2/FORMAT=F2.0.
4017 PRINT CR/FORMAT=F3.1.
4020 AT_CHECK([pspp matrix.sps])
4021 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4022 Table: Matrix Variables Created by MGET
4023 ,Factors,Dimensions,
4059 AT_SETUP([MATRIX - MGET with factor and split variables])
4060 AT_DATA([matrix.sps], [dnl
4062 variables = s f rowtype_ var01 var02 var03
4067 8 0 mean 21.4 5.0 72.9
4072 8 . corr -.16 -.22 1
4073 9 1 mean 11.4 1.0 52.9
4083 PRINT MNF1S1/FORMAT=F5.1.
4084 PRINT SDF1S1/FORMAT=F5.1.
4085 PRINT NCF1S1/FORMAT=F5.0.
4086 PRINT CRS1/FORMAT=F5.2.
4087 PRINT MNF1S2/FORMAT=F5.1.
4088 PRINT SDF1S2/FORMAT=F5.1.
4089 PRINT NCF1S2/FORMAT=F5.0.
4090 PRINT CRS2/FORMAT=F5.2.
4093 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4094 Table: Matrix Variables Created by MGET
4095 ,Split Values,Factors,Dimensions,
4136 AT_SETUP([MATRIX - MGET with TYPE])
4137 AT_DATA([matrix.sps], [dnl
4139 VARIABLES=ROWTYPE_ f1 var01 TO var04
4153 FORMATS var01 TO var04(F5.1).
4154 SAVE OUTFILE='matrix.sav'.
4156 AT_DATA([matrix2.sps], [dnl
4158 MGET/FILE='matrix.sav'/TYPE=CORR.
4159 PRINT CR/FORMAT=F3.1.
4162 AT_CHECK([pspp matrix.sps])
4163 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4164 Table: Matrix Variables Created by MGET
4165 ,Factors,Dimensions,
4177 AT_SETUP([MATRIX - MGET - negative - parsing])
4178 AT_DATA([matrix.sps], [dnl
4187 AT_CHECK([pspp matrix.sps], [1], [dnl
4188 matrix.sps:2.6: error: MGET: Syntax error at `!': expecting FILE or TYPE.
4190 matrix.sps:3.11: error: MGET: Syntax error at `!': expecting a file name or
4193 matrix.sps:4.15: error: MGET: Syntax error at `!': expecting string.
4195 matrix.sps:5.11: error: MGET: Syntax error at `!': expecting COV, CORR, MEAN,
4196 STDDEV, N, or COUNT.
4198 matrix.sps:6.16: error: MGET: Syntax error at `!': expecting COV, CORR, MEAN,
4199 STDDEV, N, or COUNT.
4203 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
4204 AT_DATA([matrix.sps], [dnl
4205 DATA LIST LIST NOTABLE /x.
4214 AT_CHECK([pspp matrix.sps], [1], [dnl
4215 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
4217 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
4221 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
4222 AT_DATA([matrix.sps], [dnl
4223 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
4232 AT_CHECK([pspp matrix.sps], [1], [dnl
4233 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
4234 byte string, but it has width 7.
4236 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
4237 byte string, but it has width 0.
4241 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
4242 AT_DATA([matrix.sps], [dnl
4243 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
4252 AT_CHECK([pspp matrix.sps], [1], [dnl
4253 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
4258 AT_SETUP([MATRIX - MGET - no continuous variables])
4259 AT_DATA([matrix.sps], [dnl
4260 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
4269 AT_CHECK([pspp matrix.sps], [1], [dnl
4270 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
4274 AT_SETUP([MATRIX - MGET - unexpected string variables])
4275 AT_DATA([matrix.sps], [dnl
4276 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
4285 AT_CHECK([pspp matrix.sps], [1], [dnl
4286 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
4291 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
4292 AT_DATA([matrix.sps], [dnl
4293 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4302 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4303 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
4307 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
4308 AT_DATA([matrix.sps], [dnl
4309 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4319 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4320 Table: Matrix Variables Created by MGET
4325 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
4329 AT_SETUP([MATRIX - MGET - missing values in input])
4330 AT_DATA([matrix.sps], [dnl
4331 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
4339 PRINT ncs1/FORMAT=F5.
4340 PRINT ncs2/FORMAT=F5.
4343 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4344 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
4346 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
4348 Table: Matrix Variables Created by MGET
4349 ,Split Values,Dimensions,
4362 AT_SETUP([MATRIX - MSAVE])
4363 AT_DATA([matrix.sps], [dnl
4365 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
4366 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
4367 MSAVE {11, 12}/TYPE=MEAN.
4368 MSAVE {13, 14}/TYPE=STDDEV.
4369 MSAVE {15, 16}/TYPE=N.
4370 MSAVE {17, 18}/TYPE=COUNT.
4375 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4377 ROWTYPE_,VARNAME_,X,Y
4390 AT_SETUP([MATRIX - MSAVE with factor variables])
4391 AT_DATA([matrix.sps], [dnl
4393 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
4394 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4395 MSAVE {11, 12}/TYPE=MEAN.
4396 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
4397 MSAVE {15, 16}/TYPE=N.
4398 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
4404 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
4409 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4411 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
4412 CORR,1.00,1.00,COL1,1.00,2.00
4413 CORR,1.00,1.00,COL2,3.00,4.00
4414 COV,1.00,1.00,COL1,5.00,6.00
4415 COV,1.00,1.00,COL2,7.00,8.00
4416 COV,1.00,1.00,,9.00,10.00
4417 MEAN,1.00,1.00,,11.00,12.00
4418 STDDEV,2.00,1.00,,13.00,14.00
4419 N,2.00,1.00,,15.00,16.00
4420 COUNT,1.00,2.00,,17.00,18.00
4423 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
4424 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
4425 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
4429 AT_SETUP([MATRIX - MSAVE with split variables])
4430 AT_DATA([matrix.sps], [dnl
4432 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
4433 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4434 MSAVE {11, 12}/TYPE=MEAN.
4435 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
4436 MSAVE {15, 16}/TYPE=N.
4437 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
4443 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
4448 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4450 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
4451 1.00,1.00,CORR,COL1,1.00,2.00
4452 1.00,1.00,CORR,COL2,3.00,4.00
4453 1.00,1.00,COV,COL1,5.00,6.00
4454 1.00,1.00,COV,COL2,7.00,8.00
4455 1.00,1.00,COV,,9.00,10.00
4456 1.00,1.00,MEAN,,11.00,12.00
4457 2.00,1.00,STDDEV,,13.00,14.00
4458 2.00,1.00,N,,15.00,16.00
4459 1.00,2.00,COUNT,,17.00,18.00
4462 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
4463 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
4464 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
4468 AT_SETUP([MATRIX - MSAVE with factor and split variables])
4469 AT_DATA([matrix.sps], [dnl
4471 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
4472 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4473 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
4474 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
4475 MSAVE {15, 16}/TYPE=N.
4476 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
4481 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4483 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
4484 1.00,CORR,1.00,COL1,1.00,2.00
4485 1.00,CORR,1.00,COL2,3.00,4.00
4486 1.00,COV,1.00,COL1,5.00,6.00
4487 1.00,COV,1.00,COL2,7.00,8.00
4488 1.00,COV,1.00,,9.00,10.00
4489 1.00,MEAN,2.00,,11.00,12.00
4490 2.00,STDDEV,1.00,,13.00,14.00
4491 2.00,N,1.00,,15.00,16.00
4492 2.00,COUNT,2.00,,17.00,18.00
4496 AT_SETUP([MATRIX - MSAVE - negative])
4497 AT_DATA([matrix.sps], [dnl
4502 MSAVE 1/VARIABLES=!.
4509 MSAVE 1/TYPE=COV/FNAMES=x.
4510 MSAVE 1/TYPE=COV/SNAMES=x.
4513 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4517 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4518 MSAVE 1/TYPE=COV/VARIABLES=x.
4519 MSAVE 1/TYPE=COV/FNAMES=x.
4520 MSAVE 1/TYPE=COV/SNAMES=x.
4524 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4525 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4526 MSAVE {1,2;3}/TYPE=COV.
4527 MSAVE 0/TYPE=COV/FACTOR={1,2}.
4528 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4532 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4536 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
4540 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4544 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4548 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4549 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4550 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4551 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4552 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4553 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4556 AT_CHECK([pspp matrix.sps], [1], [dnl
4557 matrix.sps:2.7: error: MSAVE: Syntax error at `!'.
4559 matrix.sps:3.14: error: MSAVE: Syntax error at `!': expecting COV, CORR, MEAN,
4560 STDDEV, N, or COUNT.
4562 matrix.sps:4.17: error: MSAVE: Syntax error at `!': expecting a file name or
4565 matrix.sps:5.19: error: MSAVE: Syntax error at `!': expecting variable name.
4567 matrix.sps:6.16: error: MSAVE: Syntax error at `!': expecting variable name.
4569 matrix.sps:7.16: error: MSAVE: Syntax error at `!': expecting variable name.
4571 matrix.sps:8.15: error: MSAVE: Syntax error at `!'.
4573 matrix.sps:9.16: error: MSAVE: Syntax error at `!'.
4575 matrix.sps:10.9: error: MSAVE: Syntax error at `!': expecting TYPE, OUTFILE,
4576 VARIABLES, FNAMES, SNAMES, SPLIT, or FACTOR.
4578 matrix.sps:11: error: MSAVE: Required subcommand TYPE was not specified.
4580 matrix.sps:12: error: MSAVE: FNAMES requires FACTOR.
4582 matrix.sps:13: error: MSAVE: SNAMES requires SPLIT.
4584 matrix.sps:14: error: MSAVE: Required subcommand OUTFILE was not specified.
4586 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
4587 within a single MATRIX command.
4589 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables each
4590 time within a given MATRIX.
4592 matrix.sps:16-19: note: MSAVE: This is the location of the first MSAVE command.
4594 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables each time
4595 within a given MATRIX.
4597 matrix.sps:16-19: note: MSAVE: This is the location of the first MSAVE command.
4599 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables each time
4600 within a given MATRIX.
4602 matrix.sps:16-19: note: MSAVE: This is the location of the first MSAVE command.
4604 matrix.sps:28.7-28.11: error: MATRIX: Matrix on MSAVE has 2 columns but there
4606 28 | MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/
4610 matrix.sps:29.7-29.13: error: MATRIX: This expression tries to vertically join
4611 matrices with differing numbers of columns.
4612 29 | MSAVE {1,2;3}/TYPE=COV.
4615 matrix.sps:29.8-29.10: note: MATRIX: This operand is a 1×2 matrix.
4616 29 | MSAVE {1,2;3}/TYPE=COV.
4619 matrix.sps:29.12: note: MATRIX: This operand is a 1×1 matrix.
4620 29 | MSAVE {1,2;3}/TYPE=COV.
4623 matrix.sps:30.25-30.29: error: MATRIX: There are 1 factor variables, but 2
4624 factor values were supplied.
4625 30 | MSAVE 0/TYPE=COV/FACTOR={1,2}.
4628 matrix.sps:31.33-31.37: error: MATRIX: There are 1 split variables, but 2 split
4629 values were supplied.
4630 31 | MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4633 matrix.sps:35: error: MSAVE: Variable x appears twice in variable list.
4635 matrix.sps:39: error: MATRIX: Duplicate or invalid FACTOR variable name x.
4637 matrix.sps:43: error: MATRIX: Duplicate or invalid variable name x.
4639 matrix.sps:47: error: MATRIX: Duplicate or invalid variable name x.
4641 matrix.sps:51: error: MSAVE: Variable name VARNAME_ is reserved.
4643 matrix.sps:52: error: MSAVE: Variable name ROWTYPE_ is reserved.
4645 matrix.sps:53: error: MSAVE: Variable name VARNAME_ is reserved.
4647 matrix.sps:54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4649 matrix.sps:55: error: MSAVE: Variable name VARNAME_ is reserved.
4651 matrix.sps:56: error: MSAVE: Variable name ROWTYPE_ is reserved.
4655 AT_SETUP([MATRIX - DISPLAY])
4656 AT_DATA([matrix-template.sps], [dnl
4665 for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
4666 sed "s/command/$command/" < matrix-template.sps > matrix.sps
4667 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4668 Table: Matrix Variables
4669 ,Dimension,,Size (kB)
4679 AT_SETUP([MATRIX - DISPLAY - negative])
4680 AT_DATA([matrix.sps], [dnl
4685 AT_CHECK([pspp matrix.sps], [1], [dnl
4686 matrix.sps:2.9: error: DISPLAY: Syntax error at `!': expecting DICTIONARY or
4691 AT_SETUP([MATRIX - RELEASE])
4692 AT_DATA([matrix.sps], [dnl
4700 AT_CHECK([pspp matrix.sps], [1], [dnl
4704 matrix.sps:5.7: error: MATRIX: Uninitialized variable x used in expression.
4710 AT_SETUP([MATRIX - RELEASE - negative])
4711 AT_DATA([matrix.sps], [dnl
4724 AT_CHECK([pspp matrix.sps], [1], [dnl
4725 matrix.sps:2.9: error: RELEASE: Syntax error at `!': expecting end of command.
4727 matrix.sps:3.9: error: RELEASE: Syntax error at `x': Variable name expected.
4729 matrix.sps:5.12: error: RELEASE: Syntax error at `!': expecting end of command.
4731 matrix.sps:7.11: error: RELEASE: Syntax error at `y': expecting end of command.