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 expecting `='.
937 matrix.sps:3.11: error: COMPUTE: Syntax error.
941 matrix.sps:4.9: error: MATRIX: Undefined variable x.
945 matrix.sps:5.9: error: COMPUTE: Undefined variable y.
951 AT_SETUP([MATRIX - elementwise arithmetic operators])
952 AT_DATA([matrix.sps], [dnl
957 PRINT ({1,2;3,4} + {5,6;7,8}).
958 PRINT ({1,2;3,4} + 5).
959 PRINT (5 + {5,6;7,8}).
960 PRINT ({1,2;3,4} + {5,6}).
962 PRINT ({1,2;3,4} - {5,6;7,8}).
963 PRINT ({1,2;3,4} - 5).
964 PRINT (5 - {5,6;7,8}).
965 PRINT ({1,2;3,4} - {5,6}).
967 PRINT ({1,2;3,4} * 5).
968 PRINT (5 * {5,6;7,8}).
970 PRINT ({2,4;6,8} / 2).
971 PRINT (12 / {1,2;3,4}).
972 PRINT ({2,8;18,32} / {1,2;3,4}).
974 PRINT ({1,2;3,4} &* {5,6;7,8}).
975 PRINT ({1,2;3,4} &* 5).
976 PRINT (5 &* {5,6;7,8}).
977 PRINT ({1,2;3,4} &* {5,6}).
979 PRINT ({2,4;6,8} &/ 2).
980 PRINT (12 &/ {1,2;3,4}).
981 PRINT ({2,8;18,32} &/ {1,2;3,4}).
983 PRINT ({1,2;3,4} &** 2).
984 PRINT (2 &** {1,2;3,4}).
985 PRINT ({1,2;3,4} &** {2,3;4,5}).
986 PRINT ({1,2;3,4} &** {5,6}).
989 AT_CHECK([pspp matrix.sps], [1], [dnl
997 ({1,2;3,4} + {5,6;7,8})
1009 matrix.sps:8.8-8.24: error: MATRIX: The operands of + must have the same
1010 dimensions or one must be a scalar.
1011 8 | PRINT ({1,2;3,4} + {5,6}).
1014 matrix.sps:8.8-8.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1015 8 | PRINT ({1,2;3,4} + {5,6}).
1018 matrix.sps:8.20-8.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
1019 8 | PRINT ({1,2;3,4} + {5,6}).
1022 ({1,2;3,4} - {5,6;7,8})
1034 matrix.sps:13.8-13.24: error: MATRIX: The operands of - must have the same
1035 dimensions or one must be a scalar.
1036 13 | PRINT ({1,2;3,4} - {5,6}).
1039 matrix.sps:13.8-13.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1040 13 | PRINT ({1,2;3,4} - {5,6}).
1043 matrix.sps:13.20-13.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
1044 13 | PRINT ({1,2;3,4} - {5,6}).
1063 ({2,8;18,32} / {1,2;3,4})
1067 ({1,2;3,4} &* {5,6;7,8})
1079 matrix.sps:25.8-25.25: error: MATRIX: The operands of &* must have the same
1080 dimensions or one must be a scalar.
1081 25 | PRINT ({1,2;3,4} &* {5,6}).
1082 | ^~~~~~~~~~~~~~~~~~
1084 matrix.sps:25.8-25.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1085 25 | PRINT ({1,2;3,4} &* {5,6}).
1088 matrix.sps:25.21-25.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
1089 25 | PRINT ({1,2;3,4} &* {5,6}).
1100 ({2,8;18,32} &/ {1,2;3,4})
1112 ({1,2;3,4} &** {2,3;4,5})
1116 matrix.sps:34.8-34.26: error: MATRIX: The operands of &** must have the same
1117 dimensions or one must be a scalar.
1118 34 | PRINT ({1,2;3,4} &** {5,6}).
1119 | ^~~~~~~~~~~~~~~~~~~
1121 matrix.sps:34.8-34.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
1122 34 | PRINT ({1,2;3,4} &** {5,6}).
1125 matrix.sps:34.22-34.26: note: MATRIX: The right-hand operand is a 1×2 matrix.
1126 34 | PRINT ({1,2;3,4} &** {5,6}).
1131 AT_SETUP([MATRIX - relational operators])
1132 AT_DATA([matrix.sps], [dnl
1134 PRINT ({1, 1; 2, 2} > {1, 2; 1, 2}).
1135 PRINT ({1, 1; 2, 2} > 1).
1136 PRINT (2 > {1, 2; 1, 2}).
1137 PRINT ({1, 2} > {1; 2}).
1139 PRINT ({1, 1; 2, 2} < {1, 2; 1, 2}).
1140 PRINT ({1, 1; 2, 2} < 2).
1141 PRINT (1 < {1, 2; 1, 2}).
1142 PRINT ({1, 2} < {1; 2}).
1144 PRINT ({1, 1; 2, 2} <> {1, 2; 1, 2}).
1145 PRINT ({1, 1; 2, 2} <> 2).
1146 PRINT (1 <> {1, 2; 1, 2}).
1147 PRINT ({1, 2} <> {1; 2}).
1149 PRINT ({1, 1; 2, 2} >= {1, 2; 1, 2}).
1150 PRINT ({1, 1; 2, 2} >= 2).
1151 PRINT (1 >= {1, 2; 1, 2}).
1152 PRINT ({1, 2} >= {1; 2}).
1154 PRINT ({1, 1; 2, 2} <= {1, 2; 1, 2}).
1155 PRINT ({1, 1; 2, 2} <= 2).
1156 PRINT (1 <= {1, 2; 1, 2}).
1157 PRINT ({1, 2} <= {1; 2}).
1159 PRINT ({1, 1; 2, 2} = {1, 2; 1, 2}).
1160 PRINT ({1, 1; 2, 2} = 2).
1161 PRINT (1 = {1, 2; 1, 2}).
1162 PRINT ({1, 2} = {1; 2}).
1165 AT_CHECK([pspp matrix.sps], [1], [dnl
1166 ({1, 1; 2, 2} > {1, 2; 1, 2})
1178 matrix.sps:5.8-5.22: error: MATRIX: The operands of > must have the same
1179 dimensions or one must be a scalar.
1180 5 | PRINT ({1, 2} > {1; 2}).
1183 matrix.sps:5.8-5.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1184 5 | PRINT ({1, 2} > {1; 2}).
1187 matrix.sps:5.17-5.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1188 5 | PRINT ({1, 2} > {1; 2}).
1191 ({1, 1; 2, 2} < {1, 2; 1, 2})
1203 matrix.sps:10.8-10.22: error: MATRIX: The operands of < must have the same
1204 dimensions or one must be a scalar.
1205 10 | PRINT ({1, 2} < {1; 2}).
1208 matrix.sps:10.8-10.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1209 10 | PRINT ({1, 2} < {1; 2}).
1212 matrix.sps:10.17-10.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1213 10 | PRINT ({1, 2} < {1; 2}).
1216 ({1, 1; 2, 2} <> {1, 2; 1, 2})
1228 matrix.sps:15.8-15.23: error: MATRIX: The operands of <> must have the same
1229 dimensions or one must be a scalar.
1230 15 | PRINT ({1, 2} <> {1; 2}).
1233 matrix.sps:15.8-15.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1234 15 | PRINT ({1, 2} <> {1; 2}).
1237 matrix.sps:15.18-15.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1238 15 | PRINT ({1, 2} <> {1; 2}).
1241 ({1, 1; 2, 2} >= {1, 2; 1, 2})
1253 matrix.sps:20.8-20.23: error: MATRIX: The operands of >= must have the same
1254 dimensions or one must be a scalar.
1255 20 | PRINT ({1, 2} >= {1; 2}).
1258 matrix.sps:20.8-20.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1259 20 | PRINT ({1, 2} >= {1; 2}).
1262 matrix.sps:20.18-20.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1263 20 | PRINT ({1, 2} >= {1; 2}).
1266 ({1, 1; 2, 2} <= {1, 2; 1, 2})
1278 matrix.sps:25.8-25.23: error: MATRIX: The operands of <= must have the same
1279 dimensions or one must be a scalar.
1280 25 | PRINT ({1, 2} <= {1; 2}).
1283 matrix.sps:25.8-25.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1284 25 | PRINT ({1, 2} <= {1; 2}).
1287 matrix.sps:25.18-25.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
1288 25 | PRINT ({1, 2} <= {1; 2}).
1291 ({1, 1; 2, 2} = {1, 2; 1, 2})
1303 matrix.sps:30.8-30.22: error: MATRIX: The operands of = must have the same
1304 dimensions or one must be a scalar.
1305 30 | PRINT ({1, 2} = {1; 2}).
1308 matrix.sps:30.8-30.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
1309 30 | PRINT ({1, 2} = {1; 2}).
1312 matrix.sps:30.17-30.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
1313 30 | PRINT ({1, 2} = {1; 2}).
1318 AT_SETUP([MATRIX - logical operators])
1319 AT_DATA([matrix.sps], [dnl
1321 PRINT (NOT {-1, 0, 1}).
1323 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1324 PRINT ({-1, 0, 1} AND -1).
1325 PRINT ({-1, 0, 1} AND 0).
1326 PRINT ({-1, 0, 1} AND 1).
1327 PRINT ({-1, 0} AND {2; 3}).
1329 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1330 PRINT ({-1, 0, 1} OR -1).
1331 PRINT ({-1, 0, 1} OR 0).
1332 PRINT ({-1, 0, 1} OR 1).
1333 PRINT ({-1, 0} OR {2; 3}).
1335 PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
1336 PRINT ({-1, 0, 1} XOR -1).
1337 PRINT ({-1, 0, 1} XOR 0).
1338 PRINT ({-1, 0, 1} XOR 1).
1339 PRINT ({-1, 0} XOR {2; 3}).
1342 AT_CHECK([pspp matrix.sps], [1], [dnl
1346 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1360 matrix.sps:8.8-8.25: error: MATRIX: The operands of AND must have the same
1361 dimensions or one must be a scalar.
1362 8 | PRINT ({-1, 0} AND {2; 3}).
1363 | ^~~~~~~~~~~~~~~~~~
1365 matrix.sps:8.8-8.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1366 8 | PRINT ({-1, 0} AND {2; 3}).
1369 matrix.sps:8.20-8.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
1370 8 | PRINT ({-1, 0} AND {2; 3}).
1373 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1387 matrix.sps:14.8-14.24: error: MATRIX: The operands of OR must have the same
1388 dimensions or one must be a scalar.
1389 14 | PRINT ({-1, 0} OR {2; 3}).
1392 matrix.sps:14.8-14.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1393 14 | PRINT ({-1, 0} OR {2; 3}).
1396 matrix.sps:14.19-14.24: note: MATRIX: The right-hand operand is a 2×1 matrix.
1397 14 | PRINT ({-1, 0} OR {2; 3}).
1400 ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
1414 matrix.sps:20.8-20.25: error: MATRIX: The operands of XOR must have the same
1415 dimensions or one must be a scalar.
1416 20 | PRINT ({-1, 0} XOR {2; 3}).
1417 | ^~~~~~~~~~~~~~~~~~
1419 matrix.sps:20.8-20.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
1420 20 | PRINT ({-1, 0} XOR {2; 3}).
1423 matrix.sps:20.20-20.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
1424 20 | PRINT ({-1, 0} XOR {2; 3}).
1429 AT_SETUP([MATRIX - matrix operators])
1430 AT_DATA([matrix.sps], [dnl
1432 PRINT ({0, 1; 0, 0} * {0, 0; 1, 0}).
1433 PRINT ({0, 0; 1, 0} * {0, 1; 0, 0}).
1434 PRINT ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12}).
1435 PRINT ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3}).
1436 COMPUTE m = {0, 1, 0, 0; 1, 0, 1, 0; 0, 1, 0, 1; 0, 0, 1, 0}.
1444 PRINT {3, 3.5; 3.2, 3.6}**-1/FORMAT F6.2.
1446 PRINT ({1, 2, 3} * {1, 2}).
1452 AT_CHECK([pspp matrix.sps], [1], [dnl
1453 ({0, 1; 0, 0} * {0, 0; 1, 0})
1457 ({0, 0; 1, 0} * {0, 1; 0, 0})
1461 ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12})
1465 ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3})
1510 {3, 3.5; 3.2, 3.6}**-1
1514 matrix.sps:16.8-16.25: error: MATRIX: Matrices not conformable for
1516 16 | PRINT ({1, 2, 3} * {1, 2}).
1517 | ^~~~~~~~~~~~~~~~~~
1519 matrix.sps:16.8-16.16: note: MATRIX: The left-hand operand is a 1×3 matrix.
1520 16 | PRINT ({1, 2, 3} * {1, 2}).
1523 matrix.sps:16.20-16.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
1524 16 | PRINT ({1, 2, 3} * {1, 2}).
1527 matrix.sps:17.7-17.15: error: MATRIX: Matrix exponentation with ** requires a
1528 square matrix on the left-hand size, not one with dimensions 1×3.
1529 17 | PRINT {1, 2, 3}**2.
1532 matrix.sps:18.10-18.15: error: MATRIX: Matrix exponentiation with ** requires a
1533 scalar on the right-hand side, not a matrix with dimensions 1×2.
1534 18 | PRINT m**{1, 2}.
1537 matrix.sps:19.10-19.12: error: MATRIX: Exponent 1.5 in matrix exponentiation is
1538 non-integer or outside the valid range.
1544 AT_SETUP([MATRIX - sequences and construction])
1545 AT_DATA([matrix.sps], [dnl
1567 AT_CHECK([pspp matrix.sps], [1], [dnl
1596 matrix.sps:15.12: error: MATRIX: The increment operand to : must be nonzero.
1600 matrix.sps:16.14: error: MATRIX: The increment operand to : must be nonzero.
1601 16 | PRINT {-1:-3:0}.
1604 matrix.sps:18.7-18.15: error: MATRIX: This expression tries to vertically join
1605 matrices with differing numbers of columns.
1606 18 | PRINT {1, 2; 3}.
1609 matrix.sps:18.8-18.11: note: MATRIX: This operand is a 1×2 matrix.
1610 18 | PRINT {1, 2; 3}.
1613 matrix.sps:18.14: note: MATRIX: This operand is a 1×1 matrix.
1614 18 | PRINT {1, 2; 3}.
1617 matrix.sps:19.7-19.17: error: MATRIX: This expression tries to horizontally
1618 join matrices with differing numbers of rows.
1619 19 | PRINT {{2; 5}, 3}.
1622 matrix.sps:19.8-19.13: note: MATRIX: This operand is a 2×1 matrix.
1623 19 | PRINT {{2; 5}, 3}.
1626 matrix.sps:19.16: note: MATRIX: This operand is a 1×1 matrix.
1627 19 | PRINT {{2; 5}, 3}.
1632 AT_SETUP([MATRIX - comments])
1633 AT_DATA([matrix.sps], [dnl
1637 COMMENT Comment two.
1641 AT_CHECK([pspp matrix.sps], [0], [dnl
1650 AT_SETUP([MATRIX - string matrices])
1651 AT_DATA([matrix.sps], [dnl
1653 COMPUTE m={'This is', 'a string', 'matrix', 'including', 'some', 'long strings'}.
1657 AT_CHECK([pspp matrix.sps], [0], [dnl
1659 This is a string matrix includin some long str
1663 AT_SETUP([MATRIX - ABS ALL ANY ARSIN ARTAN])
1664 AT_DATA([matrix.sps], [dnl
1666 PRINT ABS({-1, 0, 1}).
1668 PRINT ALL({0, 0, 0}).
1670 PRINT ALL({-1, 0, 1}).
1672 PRINT ANY({0, 0, 0}).
1674 PRINT ANY({-1, 0, 1}).
1676 PRINT ARSIN({-1, 0, 1})/FORMAT=F5.2.
1678 PRINT ARTAN({-5, -1, 0, 1, 5})/FORMAT=F5.2.
1681 AT_CHECK([pspp matrix.sps], [0], [dnl
1706 ARTAN({-5, -1, 0, 1, 5})
1707 -1.37 -.79 .00 .79 1.37
1711 AT_SETUP([MATRIX - BLOCK CHOL CMAX CMIN COS])
1712 AT_DATA([matrix.sps], [dnl
1714 PRINT BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11}).
1716 COMPUTE b=CHOL({4, 12, -16; 12, 37, -43; -16, -43, 98}).
1720 PRINT CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1722 PRINT CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11}).
1724 PRINT COS({0.785, 1.57; 3.14, 1.57 + 3.14}) /FORMAT=F5.2.
1728 AT_CHECK([pspp matrix.sps], [0], [dnl
1729 BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11})
1748 CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11})
1751 CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11})
1754 COS({0.785, 1.57; 3.14, 1.57 + 3.14})
1760 AT_SETUP([MATRIX - CSSQ CSUM DESIGN DET DIAG])
1761 AT_DATA([matrix.sps], [dnl
1763 PRINT CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1764 PRINT CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
1765 PRINT DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1}).
1766 PRINT DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1}).
1767 PRINT DET({1, 2, 3; 4, 5, 6; 7, 8, 9}) /FORMAT F4.1.
1768 PRINT DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10}).
1771 AT_CHECK([pspp matrix.sps], [0], [dnl
1772 CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
1775 CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
1778 DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1})
1783 warning: Column 2 in DESIGN argument has constant value.
1785 DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1})
1790 DET({1, 2, 3; 4, 5, 6; 7, 8, 9})
1793 DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10})
1800 AT_SETUP([MATRIX - EVAL EXP GINV GRADE GSCH])
1801 AT_DATA([matrix.sps], [dnl
1803 PRINT EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})/FORMAT=F5.2.
1805 PRINT EXP({2, 3; 4, 5})/FORMAT F5.2.
1807 PRINT GINV({1, 2})/FORMAT F5.2.
1808 COMPUTE a={1, 2, 3; 4, 5, 6; 7, 8, 9}.
1810 PRINT (a*g*a)/FORMAT F5.2.
1812 PRINT GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5}).
1813 COMPUTE x={26, 690, 323, 208, 671, 818, 732, 711, 585, 792}.
1815 COMPUTE asort(GRADE(asort))=asort.
1818 COMPUTE dsort(GRADE(-dsort))=dsort.
1821 PRINT (GSCH({3, 2; 1, 2}) * SQRT(10))/FORMAT F5.2.
1822 PRINT (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))/FORMAT F5.2.
1824 PRINT GSCH({0, 0, 0; 0, 0, 0}).
1827 AT_CHECK([pspp matrix.sps], [1], [dnl
1828 EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})
1846 GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5})
1852 26 208 323 585 671 690 711 732 792 818
1855 818 792 732 711 690 671 585 323 208 26
1857 (GSCH({3, 2; 1, 2}) * SQRT(10))
1861 (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))
1865 matrix.sps:22.12-22.17: error: MATRIX: GSCH requires its argument to have at
1866 least as many columns as rows, but it has dimensions 2×1.
1867 22 | PRINT GSCH({0; 0}).
1870 matrix.sps:23.12-23.29: error: MATRIX: 2×3 argument to GSCH contains only 0
1871 linearly independent columns.
1872 23 | PRINT GSCH({0, 0, 0; 0, 0, 0}).
1873 | ^~~~~~~~~~~~~~~~~~
1877 AT_SETUP([MATRIX - IDENT INV KRONEKER LG10 LN])
1878 AT_DATA([matrix.sps], [dnl
1885 PRINT INV({3, 3.5; 3.2, 3.6})/FORMAT F8.2.
1886 PRINT INV({4, 7; 2, 6})/FORMAT F8.2.
1887 PRINT (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)/FORMAT F8.2.
1889 PRINT KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7}).
1891 PRINT LG10({1, 10, 100, 1000}).
1893 PRINT LN({1, 2; 3, 4})/FORMAT F5.2.
1897 AT_CHECK([pspp matrix.sps], [1], [dnl
1917 INV({3, 3.5; 3.2, 3.6})
1925 (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)
1930 KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7})
1936 LG10({1, 10, 100, 1000})
1943 matrix.sps:16.7-16.11: error: MATRIX: Argument 1 to matrix function LN must be
1948 matrix.sps:16.10: note: MATRIX: Argument 1 is 0.
1954 AT_SETUP([MATRIX - MAGIC])
1955 AT_DATA([matrix.sps], [dnl
1960 COMPUTE total=n*(n**2 + 1) / 2.
1961 COMPUTE tb={MSUM(DIAG(T(m))), CSUM(m), MSUM(DIAG(m))} - total.
1962 COMPUTE lr=RSUM(m) - total.
1963 PRINT {tb; lr, m, lr; tb}/FORMAT F4.0.
1967 AT_CHECK([pspp matrix.sps], [0], [dnl
1993 0 24 14 22 18 17 16 0
1994 0 13 23 15 19 20 21 0
2000 0 30 39 48 1 10 19 28 0
2001 0 38 47 7 9 18 27 29 0
2002 0 46 6 8 17 26 35 37 0
2003 0 5 14 16 25 34 36 45 0
2004 0 13 15 24 33 42 44 4 0
2005 0 21 23 32 41 43 3 12 0
2006 0 22 31 40 49 2 11 20 0
2010 0 1 9 17 25 40 48 56 64 0
2011 0 63 55 47 39 26 18 10 2 0
2012 0 3 11 19 27 38 46 54 62 0
2013 0 61 53 45 37 28 20 12 4 0
2014 0 60 52 44 32 33 21 13 5 0
2015 0 6 14 22 30 35 43 51 59 0
2016 0 58 50 42 34 31 23 15 7 0
2017 0 8 16 24 36 29 41 49 57 0
2020 0 0 0 0 0 0 0 0 0 0 0
2021 0 47 58 69 80 1 12 23 34 45 0
2022 0 57 68 79 9 11 22 33 44 46 0
2023 0 67 78 8 10 21 32 43 54 56 0
2024 0 77 7 18 20 31 42 53 55 66 0
2025 0 6 17 19 30 41 52 63 65 76 0
2026 0 16 27 29 40 51 62 64 75 5 0
2027 0 26 28 39 50 61 72 74 4 15 0
2028 0 36 38 49 60 71 73 3 14 25 0
2029 0 37 48 59 70 81 2 13 24 35 0
2030 0 0 0 0 0 0 0 0 0 0 0
2032 0 0 0 0 0 0 0 0 0 0 0 0
2033 0 1 9 17 25 33 68 76 84 92 100 0
2034 0 99 91 83 75 67 34 26 18 10 2 0
2035 0 3 11 19 27 35 66 74 82 90 98 0
2036 0 97 89 81 72 65 36 29 20 12 4 0
2037 0 60 42 58 44 56 50 49 53 47 46 0
2038 0 41 59 43 57 45 51 52 48 54 55 0
2039 0 96 88 80 73 64 37 28 21 13 5 0
2040 0 6 14 22 30 38 63 71 79 87 95 0
2041 0 94 86 78 70 62 39 31 23 15 7 0
2042 0 8 16 24 32 40 61 69 77 85 93 0
2043 0 0 0 0 0 0 0 0 0 0 0 0
2047 AT_SETUP([MATRIX - MAKE MDIAG MMAX MMIN MOD])
2048 AT_DATA([matrix.sps], [dnl
2050 PRINT MAKE(1, 2, 3).
2051 PRINT MAKE(2, 1, 4).
2052 PRINT MAKE(2, 3, 5).
2054 PRINT MDIAG({1, 2, 3, 4}).
2055 PRINT MDIAG({1; 2; 3; 4}).
2056 PRINT MDIAG({1, 2; 3, 4}).
2058 PRINT MMAX({55, 44; 66, 11}).
2060 PRINT MMIN({55, 44; 66, 11}).
2062 PRINT MOD({5, 4, 3, 2, 1, 0}, 3).
2063 PRINT MOD({5, 4, 3, 2, 1, 0}, -3).
2064 PRINT MOD({-5, -4, -3, -2, -1, 0}, 3).
2065 PRINT MOD({-5, -4, -3, -2, -1, 0}, -3).
2066 PRINT MOD({5, 4, 3, 2, 1, 0}, 1.5) /FORMAT F5.1.
2067 PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
2070 AT_CHECK([pspp matrix.sps], [1], [dnl
2094 matrix.sps:8.13-8.24: error: MATRIX: Function MDIAG argument 1 must be a
2095 vector, not a 2×2 matrix.
2096 8 | PRINT MDIAG({1, 2; 3, 4}).
2099 MMAX({55, 44; 66, 11})
2102 MMIN({55, 44; 66, 11})
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}, 3)
2114 MOD({-5, -4, -3, -2, -1, 0}, -3)
2117 MOD({5, 4, 3, 2, 1, 0}, 1.5)
2120 matrix.sps:19.7-19.32: error: MATRIX: Argument 2 to matrix function MOD must
2122 19 | PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
2123 | ^~~~~~~~~~~~~~~~~~~~~~~~~~
2127 AT_SETUP([MATRIX - MSSQ MSUM NCOL NROW RANK])
2128 AT_DATA([matrix.sps], [dnl
2130 PRINT MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2132 PRINT MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2134 PRINT NCOL({1, 0; -2, -3; 3, 3}).
2136 PRINT NROW({1, 0; -2, -3; 3, 3}).
2138 PRINT RANK({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2139 PRINT RANK({1, 1, 0, 2; -1, -1, 0, -2}).
2140 PRINT RANK({1, -1; 1, -1; 0, 0; 2, -2}).
2141 PRINT RANK({1, 2, 1; -2, -3, 1; 3, 5, 0}).
2142 PRINT RANK({1, 0, 2; 2, 1, 0; 3, 2, 1}).
2145 AT_CHECK([pspp matrix.sps], [0], [dnl
2146 MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0})
2149 MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0})
2152 NCOL({1, 0; -2, -3; 3, 3})
2155 NROW({1, 0; -2, -3; 3, 3})
2158 RANK({1, 0, 1; -2, -3, 1; 3, 3, 0})
2161 RANK({1, 1, 0, 2; -1, -1, 0, -2})
2164 RANK({1, -1; 1, -1; 0, 0; 2, -2})
2167 RANK({1, 2, 1; -2, -3, 1; 3, 5, 0})
2170 RANK({1, 0, 2; 2, 1, 0; 3, 2, 1})
2175 AT_SETUP([MATRIX - RESHAPE RMAX RMIN RND RNKORDER])
2176 AT_DATA([matrix.sps], [dnl
2178 PRINT RESHAPE(1:12, 1, 12).
2179 PRINT RESHAPE(1:12, 2, 6).
2180 PRINT RESHAPE(1:12, 3, 4).
2181 PRINT RESHAPE(1:12, 4, 3).
2182 PRINT RESHAPE(1:12, 6, 2).
2183 PRINT RESHAPE(1:12, 12, 1).
2185 PRINT RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2187 PRINT RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0}).
2189 PRINT RND({-1.6, -1.5, -1.4;
2192 1.4, 1.5, 1.6})/FORMAT F5.1.
2194 PRINT RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5}) /FORMAT F5.1.
2197 AT_CHECK([pspp matrix.sps], [0], [dnl
2198 RESHAPE(1:12, 1, 12)
2199 1 2 3 4 5 6 7 8 9 10 11 12
2224 RESHAPE(1:12, 12, 1)
2238 RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0})
2243 RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0})
2248 RND({-1.6, -1.5, -1.4;
2257 RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5})
2264 AT_SETUP([MATRIX - RSSQ RSUM SIN SOLVE SQRT])
2265 AT_DATA([matrix.sps], [dnl
2267 PRINT RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
2268 PRINT RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
2270 PRINT SIN({0, .78, 1.57, 2.35, 3.14}) /FORMAT F5.2.
2272 PRINT SOLVE({2, 3; 4, 9}, {6, 2; 15, 5}) /FORMAT=F6.2.
2273 PRINT SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8}) /FORMAT=F6.2.
2274 PRINT SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3}) /FORMAT=F6.2.
2275 PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2277 PRINT SQRT({0, 1, 2, 3, 4, 9, 81}) /FORMAT=F5.2.
2281 AT_CHECK([pspp matrix.sps], [1], [dnl
2282 RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
2287 RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
2292 SIN({0, .78, 1.57, 2.35, 3.14})
2293 .00 .70 1.00 .71 .00
2295 SOLVE({2, 3; 4, 9}, {6, 2; 15, 5})
2299 SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8})
2304 SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3})
2309 matrix.sps:10.7-10.33: error: MATRIX: SOLVE arguments must have the same number
2311 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2312 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
2314 matrix.sps:10.13-10.24: note: MATRIX: Argument 1 has dimensions 2×2.
2315 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2318 matrix.sps:10.27-10.32: note: MATRIX: Argument 2 has dimensions 1×2.
2319 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
2322 SQRT({0, 1, 2, 3, 4, 9, 81})
2323 .00 1.00 1.41 1.73 2.00 3.00 9.00
2325 matrix.sps:13.7-13.14: error: MATRIX: Argument 1 to matrix function SQRT must
2326 be greater than or equal to 0.
2327 13 | PRINT SQRT(-1).
2330 matrix.sps:13.12-13.13: note: MATRIX: Argument 1 is -1.
2331 13 | PRINT SQRT(-1).
2336 AT_SETUP([MATRIX - SSCP SVAL SWEEP TRACE TRANSPOS TRUNC])
2337 AT_DATA([matrix.sps], [dnl
2339 COMPUTE m={1, 2, 3; 4, 5, 6}
2340 COMPUTE sscp1=SSCP(m).
2341 COMPUTE sscp2=T(m)*m.
2343 PRINT (sscp1 <> sscp2).
2345 PRINT SVAL({1, 1; 0, 0})/FORMAT F5.2.
2346 PRINT SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})/FORMAT F5.2.
2347 PRINT SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
2349 PRINT SVAL({2, 4; 1, 3; 0, 0; 0, 0})/FORMAT F5.2.
2351 COMPUTE s0 = {6, 12, 0, 12; 12, 28, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
2352 PRINT SWEEP(s0, 1)/FORMAT F5.2.
2353 PRINT SWEEP(SWEEP(s0, 1), 2)/FORMAT F5.2.
2354 PRINT SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)/FORMAT F5.2.
2356 COMPUTE s1 = {6, 12, 0, 12; 12, 0, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
2359 COMPUTE s2 = {0, 1, 2; 3, 4, 5; 6, 7, 8}.
2368 PRINT ALL(T(T(s0)) = s0).
2370 PRINT TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
2371 PRINT TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
2374 AT_CHECK([pspp matrix.sps], [0], [dnl
2389 SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})
2394 SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
2400 SVAL({2, 4; 1, 3; 0, 0; 0, 0})
2408 -2.00 1.00 2.00 4.00
2410 SWEEP(SWEEP(s0, 1), 2)
2414 -1.50 -.25 2.00 3.75
2416 SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)
2420 -1.50 -.25 -.33 3.08
2434 -.7500000000 -.2500000000 .7500000000
2435 .7500000000 .2500000000 1.2500000000
2436 .7500000000 -1.7500000000 -.7500000000
2439 -1.5000000000 -.7500000000 -.2500000000
2440 -.7500000000 -.3750000000 -.6250000000
2441 .7500000000 .8750000000 .1250000000
2461 TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
2465 TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
2471 AT_SETUP([MATRIX - UNIFORM])
2472 AT_DATA([matrix.sps], [dnl
2475 PRINT (UNIFORM(4, 5)*10)/FORMAT F5.2.
2478 AT_CHECK([pspp matrix.sps], [0], [dnl
2480 7.71 2.99 .21 4.95 6.34
2481 4.43 7.49 8.32 4.99 5.83
2482 2.25 .25 1.98 7.09 7.61
2483 2.66 1.69 2.64 .88 1.50
2487 AT_SETUP([MATRIX - invalid function arguments])
2488 AT_DATA([matrix.sps], [dnl
2490 COMPUTE x=MOD({1,2,3},{4,5,6}).
2491 COMPUTE x=MDIAG({1, 2; 3, 4}).
2493 COMPUTE x=ARSIN({1, 1; -1, 2}).
2494 COMPUTE x=CDF.UNIFORM(2,1,1).
2495 COMPUTE x=CDF.UNIFORM(1,2,1).
2496 COMPUTE x=CDF.UNIFORM({1,2},1,1).
2500 AT_CHECK([pspp matrix.sps], [1], [dnl
2501 matrix.sps:2.23-2.29: error: MATRIX: Function MOD argument 2 must be a scalar,
2503 2 | COMPUTE x=MOD({1,2,3},{4,5,6}).
2506 matrix.sps:3.17-3.28: error: MATRIX: Function MDIAG argument 1 must be a
2507 vector, not a 2×2 matrix.
2508 3 | COMPUTE x=MDIAG({1, 2; 3, 4}).
2511 matrix.sps:4.17: error: MATRIX: Argument 1 to matrix function ARSIN is 2, which
2512 is outside the valid range [[-1,1]].
2513 4 | COMPUTE x=ARSIN(2).
2516 matrix.sps:5.17-5.29: error: MATRIX: Row 2, column 2 of argument 1 to matrix
2517 function ARSIN is 2, which is outside the valid range [[-1,1]].
2518 5 | COMPUTE x=ARSIN({1, 1; -1, 2}).
2521 error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
2524 matrix.sps:6.23: note: MATRIX: Argument 1 is 2.
2525 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
2528 matrix.sps:6.27: note: MATRIX: Argument 3 is 1.
2529 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
2532 error: Argument 2 to matrix function CDF.UNIFORM must be less than or equal to
2535 matrix.sps:7.25: note: MATRIX: Argument 2 is 2.
2536 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
2539 matrix.sps:7.27: note: MATRIX: Argument 3 is 1.
2540 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
2543 error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
2546 matrix.sps:8.23-8.27: note: MATRIX: Row 1, column 2 of argument 1 is 2.
2547 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
2550 matrix.sps:8.31: note: MATRIX: Argument 3 is 1.
2551 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
2554 matrix.sps:9.11-9.18: error: MATRIX: Argument 1 to matrix function MAGIC must
2555 be greater than or equal to 3.
2556 9 | COMPUTE x=MAGIC(2).
2559 matrix.sps:9.17: note: MATRIX: Argument 1 is 2.
2560 9 | COMPUTE x=MAGIC(2).
2565 AT_SETUP([MATRIX - invalid number function arguments])
2566 AT_DATA([matrix.sps], [dnl
2570 COMPUTE x=KRONEKER(1,2,3).
2572 COMPUTE x=IDENT(1,2,3).
2576 AT_CHECK([pspp matrix.sps], [1], [dnl
2577 matrix.sps:2: error: COMPUTE: Matrix function ABS requires 1 argument.
2579 matrix.sps:3: error: COMPUTE: Matrix function ABS requires 1 argument.
2581 matrix.sps:4: error: COMPUTE: Matrix function KRONEKER requires 2 arguments.
2583 matrix.sps:5: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2584 but 0 were provided.
2586 matrix.sps:6: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
2587 but 3 were provided.
2589 matrix.sps:7: error: COMPUTE: Matrix function BLOCK requires at least one
2594 AT_SETUP([MATRIX - CALL SETDIAG])
2595 AT_DATA([matrix.sps], [dnl
2597 COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
2600 CALL SETDIAG(x1, 10).
2604 CALL SETDIAG(x2, {10, 11}).
2608 CALL SETDIAG(x3, {10, 11, 12}).
2612 CALL SETDIAG(x4, {10, 11, 12, 13}).
2616 CALL SETDIAG(x5, {10, 11; 12, 13}).
2621 AT_CHECK([pspp matrix.sps], [1], [dnl
2642 matrix.sps:21.18-21.33: error: MATRIX: SETDIAG argument 2 must be a scalar or a
2643 vector, not a 2×2 matrix.
2644 21 | CALL SETDIAG(x5, {10, 11; 12, 13}).
2654 dnl I have some doubts about the correctness of the results below.
2655 AT_SETUP([MATRIX - CALL EIGEN])
2656 AT_DATA([matrix.sps], [dnl
2658 CALL EIGEN({1, 0; 0, 1}, evec, eval).
2662 CALL EIGEN({3, 2, 4; 2, 0, 2; 4, 2, 3}, evec2, eval2).
2667 AT_CHECK([pspp matrix.sps], [0], [dnl
2677 -.6666666667 .0000000000 .7453559925
2678 -.3333333333 -.8944271910 -.2981423970
2679 -.6666666667 .4472135955 -.5962847940
2688 AT_SETUP([MATRIX - CALL SVD])
2689 AT_DATA([matrix.sps], [dnl
2691 CALL SVD({3, 2, 2; 2, 3, -2}, u, s, v).
2692 PRINT (u * s * T(v))/FORMAT F5.1.
2694 CALL SVD({2, 4; 1, 3; 0, 0; 0, 0}, u, s, v).
2695 PRINT (u*s*T(v))/FORMAT F5.1.
2697 CALL SVD({-3, 1; 6, -2; 6, -2}, u, s, v).
2698 PRINT (u*s*T(v))/FORMAT F5.1.
2701 AT_CHECK([pspp matrix.sps], [0], [dnl
2719 AT_SETUP([MATRIX - PRINT])
2720 AT_DATA([matrix.sps], [dnl
2722 PRINT/TITLE="title 1".
2723 PRINT/SPACE=2/TITLE="title 2".
2725 COMPUTE m={1, 2, 3; 3, 4, 5; 6, 7, 8}.
2726 PRINT m/RLABELS=123, a b c, long name.
2727 PRINT m/RNAMES={'123', 'a b c', 'long name'}.
2728 PRINT m/CLABELS=col1, col2, long column name.
2729 PRINT m/CNAMES={'col1', 'col2', 'long column name'}.
2730 PRINT m/RLABELS=123, a b c, long name
2731 /CLABELS=col1, col2, long column name.
2732 PRINT m/RNAMES={'123', 'a b c', 'long name'}
2733 /CNAMES={'col1', 'col2', 'long column name'}.
2734 PRINT {123e10, 456e10, 500}.
2738 AT_DATA([matrix-tables.sps], [dnl
2739 SET MDISPLAY=TABLES.
2740 INCLUDE 'matrix.sps'.
2743 AT_CHECK([pspp matrix.sps], [0], [dnl
2784 {123e10, 456e10, 500}
2786 1.2300000000 4.5600000000 .0000000005
2789 AT_CHECK([pspp matrix-tables.sps], [0], [dnl
2811 +----+----+----------------+
2812 |col1|col2|long column name|
2813 +----+----+----------------+
2817 +----+----+----------------+
2820 +----+----+--------+
2821 |col1|col2|long col|
2822 +----+----+--------+
2826 +----+----+--------+
2829 +---------+----+----+----------------+
2830 | |col1|col2|long column name|
2831 +---------+----+----+----------------+
2834 |long name| 6| 7| 8|
2835 +---------+----+----+----------------+
2838 +--------+----+----+--------+
2839 | |col1|col2|long col|
2840 +--------+----+----+--------+
2844 +--------+----+----+--------+
2846 {123e10, 456e10, 500}
2847 +----------------------------------------------+
2848 |1.2300000000[[a]] 4.5600000000[[a]] .0000000005[[a]]|
2849 +----------------------------------------------+
2854 AT_SETUP([MATRIX - DO IF])
2855 AT_DATA([matrix.sps], [dnl
2883 AT_CHECK([pspp matrix.sps], [1], [dnl
2890 matrix.sps:20.7-20.12: error: MATRIX: Expression for DO IF must evaluate to
2891 scalar, not a 1×2 matrix.
2895 matrix.sps:24.9-24.10: error: MATRIX: Expression for ELSE IF must evaluate to
2896 scalar, not a 0×0 matrix.
2902 AT_SETUP([MATRIX - unbounded LOOP])
2903 AT_DATA([matrix.sps], [dnl
2905 * Truly unbounded loop.
2915 * Unbounded loop terminates with BREAK.
2930 AT_CHECK([pspp matrix.sps], [0], [dnl
2935 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2936 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
2943 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2948 AT_SETUP([MATRIX - indexed or conditional LOOP])
2949 AT_DATA([matrix.sps], [dnl
2951 * Indexed loop terminates based on index.
2959 * Indexed loop terminates based on MXLOOPS.
2967 * Indexed loop terminates with BREAK.
2978 * Indexed loop terminates with top IF.
2980 LOOP x=1 TO 50 IF NCOL(y) < 15.
2986 * Indexed loop terminates with bottom IF.
2990 END LOOP IF NCOL(y) >= 22.
3007 LOOP i=1 TO NROW(indexing).
3009 LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
3012 PRINT {indexing(i, :), y}.
3021 LOOP i=5 TO 8 BY {}.
3030 LOOP i=1e100 to 1e200.
3034 AT_CHECK([pspp matrix.sps], [1], [dnl
3039 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3046 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3047 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
3054 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3061 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3067 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
3071 1 10 1 1 2 3 4 5 6 7 8 9 10
3081 10 1 -1 10 9 8 7 6 5 4 3 2 1
3091 matrix.sps:66.8-66.9: error: MATRIX: Expression for LOOP must evaluate to
3092 scalar, not a 0×0 matrix.
3093 66 | LOOP i={} TO 5.
3096 matrix.sps:69.13-69.14: error: MATRIX: Expression for TO must evaluate to
3097 scalar, not a 0×0 matrix.
3098 69 | LOOP i=5 TO {}.
3101 matrix.sps:72.18-72.19: error: MATRIX: Expression for BY must evaluate to
3102 scalar, not a 0×0 matrix.
3103 72 | LOOP i=5 TO 8 BY {}.
3106 matrix.sps:75.9-75.10: error: MATRIX: Expression for LOOP IF must evaluate to
3107 scalar, not a 0×0 matrix.
3111 matrix.sps:79.13-79.14: error: MATRIX: Expression for END LOOP IF must evaluate
3112 to scalar, not a 0×0 matrix.
3113 79 | END LOOP IF {}.
3116 matrix.sps:81.8-81.12: error: MATRIX: Expression for LOOP is outside the
3118 81 | LOOP i=1e100 to 1e200.
3123 AT_SETUP([MATRIX - BREAK outside LOOP])
3124 AT_DATA([matrix.sps], [dnl
3129 AT_CHECK([pspp matrix.sps], [1], [dnl
3130 matrix.sps:2.1-2.5: error: BREAK: BREAK not inside LOOP.
3136 AT_SETUP([MATRIX - READ])
3137 AT_DATA([matrix.txt], [dnl
3163 AT_DATA([matrix2.txt], [dnl
3169 AT_DATA([matrix3.txt], [dnl
3176 AT_DATA([matrix.sps], [dnl
3178 READ x/FILE='matrix.txt'/SIZE=4/FIELD=1 TO 1.
3180 READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
3182 READ x/SIZE={2,4}/FIELD=1 TO 80.
3184 READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
3186 READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
3189 READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
3191 READ x/SIZE={2,3}/FIELD=1 TO 20/FORMAT=DOLLAR.
3193 READ x/SIZE={2,4}/FIELD=1 TO 20/FORMAT=DOLLAR5.1.
3195 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4PCT'.
3197 READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4A'.
3201 LOOP IF NOT EOF('matrix2.txt').
3202 READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
3207 COMPUTE m = MAKE(5, 5, 0).
3209 READ count /FILE='matrix3.txt' /FIELD=1 TO 1 /SIZE=1.
3210 READ m(i, 1:count) /FIELD=3 TO 100 /REREAD.
3215 AT_CHECK([pspp matrix.sps], [0], [dnl
3274 AT_SETUP([MATRIX - READ - negative])
3275 AT_DATA([matrix.sps], [dnl
3282 READ x/FIELD=1 TO !.
3283 READ x/FIELD=1 TO 0.
3284 READ x/FIELD=1 TO 10 BY !.
3285 READ x/FIELD=1 TO 10 BY 6.
3289 READ x/FORMAT=F8.2/FORMAT=F8.2.
3290 READ x/FORMAT='5XYZZY'.
3291 READ x/FORMAT=XYZZY.
3294 READ x/FIELD=1 TO 10.
3295 READ x/FIELD=1 TO 10/SIZE={1,2}.
3296 READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3297 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3298 READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3299 READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3300 READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3301 READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3303 READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3304 READ x/FIELD=1 TO 10/SIZE={1,3}/FILE='matrix.txt'/MODE=SYMMETRIC.
3305 READ x/FIELD=1 TO 10/SIZE=2/FILE='matrix.txt'.
3308 AT_DATA([matrix.txt], [dnl
3312 AT_CHECK([pspp matrix.sps], [1], [dnl
3313 matrix.sps:2.6: error: READ: Syntax error expecting identifier.
3317 matrix.sps:3.13: error: READ: Syntax error expecting a file name or handle
3322 matrix.sps:4.17: error: READ: Syntax error expecting string.
3323 4 | READ x/ENCODING=!.
3326 matrix.sps:5.14: error: READ: Syntax error expecting positive integer for
3331 matrix.sps:6.16: error: READ: Syntax error expecting `TO'.
3332 6 | READ x/FIELD=1 !.
3335 matrix.sps:7.19: error: READ: Syntax error expecting positive integer for TO.
3336 7 | READ x/FIELD=1 TO !.
3339 matrix.sps:8.19: error: READ: Syntax error expecting positive integer for TO.
3340 8 | READ x/FIELD=1 TO 0.
3343 matrix.sps:9.25: error: READ: Syntax error expecting integer between 1 and 10
3345 9 | READ x/FIELD=1 TO 10 BY !.
3348 matrix.sps:10.14-10.25: error: READ: Field width 6 does not evenly divide
3350 10 | READ x/FIELD=1 TO 10 BY 6.
3353 matrix.sps:10.14-10.20: note: READ: This syntax designates the record width.
3354 10 | READ x/FIELD=1 TO 10 BY 6.
3357 matrix.sps:10.25: note: READ: This syntax specifies the field width.
3358 10 | READ x/FIELD=1 TO 10 BY 6.
3361 matrix.sps:11.13: error: READ: Syntax error.
3365 matrix.sps:12.13: error: READ: Syntax error expecting RECTANGULAR or SYMMETRIC.
3369 matrix.sps:13.15: error: READ: Syntax error expecting identifier.
3370 13 | READ x/FORMAT=!.
3373 matrix.sps:14.20-14.25: error: READ: Subcommand FORMAT may only be specified
3375 14 | READ x/FORMAT=F8.2/FORMAT=F8.2.
3378 matrix.sps:15.15-15.22: error: READ: Unknown format XYZZY.
3379 15 | READ x/FORMAT='5XYZZY'.
3382 matrix.sps:16.15-16.19: error: READ: Unknown format type `XYZZY'.
3383 16 | READ x/FORMAT=XYZZY.
3386 matrix.sps:17.8: error: READ: Syntax error expecting FILE, FIELD, MODE, REREAD,
3391 matrix.sps:18: error: READ: Required subcommand FIELD was not specified.
3393 matrix.sps:19: error: READ: SIZE is required for reading data into a full
3394 matrix (as opposed to a submatrix).
3396 matrix.sps:19.6: note: READ: This expression designates a full matrix.
3397 19 | READ x/FIELD=1 TO 10.
3400 matrix.sps:20: error: READ: Required subcommand FILE was not specified.
3402 matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
3404 matrix.sps:21.57-21.61: note: READ: This syntax designates the number of
3406 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3409 matrix.sps:21.14-21.20: note: READ: This syntax designates the record width.
3410 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3413 matrix.sps:22: error: READ: This command specifies two different field widths.
3415 matrix.sps:22.62-22.63: note: READ: This syntax specifies field width 5.
3416 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3419 matrix.sps:22.25: note: READ: This syntax specifies field width 2.
3420 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3423 matrix.sps:23: error: READ: This command specifies two different field widths.
3425 matrix.sps:23.62-23.65: note: READ: This syntax specifies 2 repetitions.
3426 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3429 matrix.sps:23.14-23.20: note: READ: This syntax designates record width 10,
3430 which divided by 2 repetitions implies field width 5.
3431 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3434 matrix.sps:23.25: note: READ: This syntax specifies field width 2.
3435 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3438 matrix.sps:24.27-24.35: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3439 element vector, not a 2×2 matrix.
3440 24 | READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3443 matrix.sps:25.27-25.33: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3444 element vector, not a 1×3 matrix.
3445 25 | READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3448 matrix.sps:26.28-26.29: error: MATRIX: Matrix dimensions -1×1 specified on SIZE
3449 are outside valid range.
3450 26 | READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3453 matrix.sps:28: error: MATRIX: Dimensions specified on SIZE differ from
3454 dimensions of destination submatrix.
3456 matrix.sps:28.32-28.36: note: MATRIX: SIZE specifies dimensions 2×2.
3457 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3460 matrix.sps:28.6-28.11: note: MATRIX: Destination submatrix has dimensions 1×3.
3461 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3464 matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
3467 matrix.txt:1.1-1.5: warning: Error reading "xyzzy" as format F for matrix row
3468 1, column 1: Field contents are not numeric.
3470 matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
3471 1: Matrix data may not contain missing value.
3475 AT_SETUP([MATRIX - WRITE])
3476 AT_DATA([matrix.sps], [dnl
3478 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
3479 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
3480 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
3481 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
3482 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
3483 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
3484 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
3485 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
3486 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
3489 AT_CHECK([pspp matrix.sps])
3490 AT_CHECK([cat matrix.txt], [0], [dnl
3512 AT_SETUP([MATRIX - WRITE - negative])
3513 AT_DATA([matrix.sps], [dnl
3520 WRITE 1/FIELD=1 TO 0.
3521 WRITE 1/FIELD=1 TO 10 BY 20.
3522 WRITE 1/FIELD=1 TO 10 BY 6.
3523 WRITE 1/MODE=TRAPEZOIDAL.
3524 WRITE 1/FORMAT=F5/FORMAT=F5.
3525 WRITE 1/FORMAT='5ASDF'.
3526 WRITE 1/FORMAT=ASDF5.
3529 WRITE 1/FIELD=1 TO 10.
3530 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3531 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3532 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3533 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3534 WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3537 AT_CHECK([pspp matrix.sps], [1], [dnl
3538 matrix.sps:2.7: error: WRITE: Syntax error.
3542 matrix.sps:3.17: error: WRITE: Syntax error expecting a file name or handle
3544 3 | WRITE 1/OUTFILE=!.
3547 matrix.sps:4.18: error: WRITE: Syntax error expecting string.
3548 4 | WRITE 1/ENCODING=!.
3551 matrix.sps:5.15: error: WRITE: Syntax error expecting positive integer for
3553 5 | WRITE 1/FIELD=!.
3556 matrix.sps:6.17: error: WRITE: Syntax error expecting `TO'.
3557 6 | WRITE 1/FIELD=1 !.
3560 matrix.sps:7.20: error: WRITE: Syntax error expecting positive integer for TO.
3561 7 | WRITE 1/FIELD=1 TO 0.
3564 matrix.sps:8.26-8.27: error: WRITE: Syntax error expecting integer between 1
3566 8 | WRITE 1/FIELD=1 TO 10 BY 20.
3569 matrix.sps:9.15-9.26: error: WRITE: Field width 6 does not evenly divide record
3571 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3574 matrix.sps:9.15-9.21: note: WRITE: This syntax designates the record width.
3575 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3578 matrix.sps:9.26: note: WRITE: This syntax specifies the field width.
3579 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3582 matrix.sps:10.14-10.24: error: WRITE: Syntax error expecting RECTANGULAR or
3584 10 | WRITE 1/MODE=TRAPEZOIDAL.
3587 matrix.sps:11.19-11.24: error: WRITE: Subcommand FORMAT may only be specified
3589 11 | WRITE 1/FORMAT=F5/FORMAT=F5.
3592 matrix.sps:12.16-12.22: error: WRITE: Unknown format ASDF.
3593 12 | WRITE 1/FORMAT='5ASDF'.
3596 matrix.sps:13.16-13.20: error: WRITE: Unknown format type `ASDF'.
3597 13 | WRITE 1/FORMAT=ASDF5.
3600 matrix.sps:14.9: error: WRITE: Syntax error expecting OUTFILE, FIELD, MODE,
3605 matrix.sps:15: error: WRITE: Required subcommand FIELD was not specified.
3607 matrix.sps:16: error: WRITE: Required subcommand OUTFILE was not specified.
3609 matrix.sps:17.51-17.55: note: WRITE: This syntax designates the number of
3611 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3614 matrix.sps:17.15-17.21: note: WRITE: This syntax designates the record width.
3615 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3618 matrix.sps:18: error: WRITE: This command specifies two different field widths.
3620 matrix.sps:18.56-18.59: note: WRITE: This syntax specifies 5 repetitions.
3621 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3624 matrix.sps:18.15-18.21: note: WRITE: This syntax designates record width 10,
3625 which divided by 5 repetitions implies field width 2.
3626 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3629 matrix.sps:18.26: note: WRITE: This syntax specifies field width 5.
3630 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3633 matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
3634 requires a width between 6 and 40.
3636 matrix.sps:20.51-20.52: error: WRITE: Format A9 is too wide for 8-byte matrix
3638 20 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3641 matrix.sps:21.7-21.11: error: MATRIX: WRITE with MODE=TRIANGULAR requires a
3642 square matrix but the matrix to be written has dimensions 1×2.
3643 21 | WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3648 AT_SETUP([MATRIX - GET])
3649 AT_DATA([matrix.sps], [dnl
3650 DATA LIST LIST NOTABLE /a b c.
3651 MISSING VALUES a(1) b(5).
3660 GET x0 /NAMES=names0.
3662 PRINT names0/FORMAT=A8.
3666 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
3668 PRINT names1/FORMAT=A8.
3672 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
3674 PRINT names2/FORMAT=A8.
3678 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
3680 PRINT names3/FORMAT=A8.
3684 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
3686 PRINT names4/FORMAT=A8.
3689 SAVE OUTFILE='matrix.sav'.
3693 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
3695 PRINT names5/FORMAT=A8.
3699 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
3701 PRINT names6/FORMAT=A8.
3705 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
3707 PRINT names7/FORMAT=A8.
3710 AT_CHECK([pspp matrix.sps], [1], [dnl
3711 matrix.sps:11: error: MATRIX: Variable a in case 2 has user-missing value 1.
3713 matrix.sps:12.7-12.8: error: MATRIX: Uninitialized variable x0 used in
3723 matrix.sps:17: error: MATRIX: Variable c in case 4 is system-missing.
3725 matrix.sps:18.7-18.8: error: MATRIX: Uninitialized variable x1 used in
3743 matrix.sps:29: error: MATRIX: Variable c in case 4 is system-missing.
3745 matrix.sps:30.7-30.8: error: MATRIX: Uninitialized variable x3 used in
3765 matrix.sps:44: error: MATRIX: Variable c in case 4 is system-missing.
3767 matrix.sps:45.7-45.8: error: MATRIX: Uninitialized variable x5 used in
3800 AT_SETUP([MATRIX - GET - negative])
3801 AT_DATA([matrix.sps], [dnl
3802 DATA LIST LIST NOTABLE /a b c * d(a1).
3803 MISSING VALUES a(1) b(5).
3810 SAVE OUTFILE='matrix.sav'.
3822 GET x/VARIABLES=x TO !.
3824 GET x/VARIABLES=c TO a.
3834 AT_CHECK([pspp matrix.sps], [1], [dnl
3835 matrix.sps:12.5: error: GET: Syntax error expecting identifier.
3839 matrix.sps:13.17: error: GET: Syntax error expecting variable name.
3840 13 | GET x/VARIABLES=!.
3843 matrix.sps:14.12: error: GET: Syntax error expecting a file name or handle
3848 matrix.sps:15.16: error: GET: Syntax error expecting string.
3849 15 | GET x/ENCODING=!.
3852 matrix.sps:16.13: error: GET: Syntax error expecting identifier.
3856 matrix.sps:17.15: error: GET: Syntax error.
3857 17 | GET x/MISSING=!.
3860 matrix.sps:18.14: error: GET: Syntax error.
3861 18 | GET x/SYSMIS=!.
3864 matrix.sps:19.7: error: GET: Syntax error expecting FILE, VARIABLES, NAMES,
3869 matrix.sps:20.17: error: GET: Syntax error expecting variable name.
3870 20 | GET x/VARIABLES=!.
3873 matrix.sps:21.22: error: GET: Syntax error expecting variable name.
3874 21 | GET x/VARIABLES=x TO !.
3877 matrix.sps:22.17: error: MATRIX: x is not a variable name.
3878 22 | GET x/VARIABLES=x.
3881 matrix.sps:23.17-23.22: error: MATRIX: c TO a is not valid syntax since c
3882 precedes a in the dictionary.
3883 23 | GET x/VARIABLES=c TO a.
3886 matrix.sps:24.17: error: MATRIX: d is not a numeric variable.
3887 24 | GET x/VARIABLES=d.
3890 matrix.sps:25: error: MATRIX: Variable d is not numeric.
3892 matrix.sps:30: error: MATRIX: The GET command cannot read an empty active file.
3896 AT_SETUP([MATRIX - SAVE])
3897 AT_DATA([matrix.sps], [dnl
3899 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3900 SAVE {7,8,9}/VARIABLES=a b c d.
3902 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3903 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3905 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3906 SAVE {4,'xyzw',6}/STRINGS=a, b.
3909 AT_CHECK([pspp matrix.sps])
3910 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3916 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3921 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
3928 AT_SETUP([MATRIX - SAVE - inline])
3929 AT_DATA([matrix.sps], [dnl
3931 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
3932 SAVE {7,8,9}/VARIABLES=a b c d.
3937 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
3938 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3943 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
3944 SAVE {4,'xyzw',6}/STRINGS=a, b.
3948 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3967 AT_SETUP([MATRIX - SAVE - negative])
3968 AT_DATA([matrix.sps], [dnl
3976 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
3977 SAVE 1/OUTFILE='matrix2.sav'.
3978 SAVE {1,2}/OUTFILE='matrix2.sav'.
3979 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
3980 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
3981 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
3984 AT_CHECK([pspp matrix.sps], [1], [dnl
3985 matrix.sps:2.6: error: SAVE: Syntax error.
3989 matrix.sps:3.16: error: SAVE: Syntax error expecting a file name or handle
3991 3 | SAVE 1/OUTFILE=!.
3994 matrix.sps:4.18: error: SAVE: Syntax error expecting variable name.
3995 4 | SAVE 1/VARIABLES=!.
3998 matrix.sps:5.14: error: SAVE: Syntax error.
4002 matrix.sps:6.8: error: SAVE: Syntax error expecting OUTFILE, VARIABLES, NAMES,
4007 matrix.sps:7: error: SAVE: Required subcommand OUTFILE was not specified.
4009 matrix.sps:8: warning: SAVE: VARIABLES and NAMES both specified; ignoring
4012 matrix.sps:10: error: MATRIX: Cannot save 1×2 matrix to `matrix2.sav' because
4013 the first SAVE to `matrix2.sav' in this matrix program wrote a 1-column matrix.
4015 matrix.sps:9: error: MATRIX: This is the location of the first SAVE to
4018 error: Duplicate variable name a in SAVE statement.
4020 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
4022 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
4027 AT_SETUP([MATRIX - MGET])
4028 AT_DATA([matrix.sps], [dnl
4030 VARIABLES=ROWTYPE_ var01 TO var08.
4032 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4033 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4034 N 92 92 92 92 92 92 92 92
4038 CORR .36 .31 -.14 1.00
4039 CORR .27 .16 -.12 .22 1.00
4040 CORR .33 .15 -.17 .24 .21 1.00
4041 CORR .50 .29 -.20 .32 .12 .38 1.00
4042 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
4047 PRINT MN/FORMAT=F5.1.
4048 PRINT SD/FORMAT=F5.1.
4049 PRINT NC/FORMAT=F5.0.
4050 PRINT CR/FORMAT=F5.2.
4053 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4054 Table: Matrix Variables Created by MGET
4063 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4066 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4069 92 92 92 92 92 92 92 92
4072 1.00 .18 -.22 .36 .27 .33 .50 .17
4073 .18 1.00 -.17 .31 .16 .15 .29 .29
4074 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
4075 .36 .31 -.14 1.00 .22 .24 .32 .20
4076 .27 .16 -.12 .22 1.00 .21 .12 .27
4077 .33 .15 -.17 .24 .21 1.00 .38 .20
4078 .50 .29 -.20 .32 .12 .38 1.00 .04
4079 .17 .29 -.05 .20 .27 .20 .04 1.00
4083 AT_SETUP([MATRIX - MGET with split variables])
4084 AT_DATA([matrix.sps], [dnl
4086 variables = s1 s2 rowtype_ var01 var02 var03
4090 8 0 mean 21.4 5.0 72.9
4095 8 0 corr -.16 -.22 1
4096 8 1 mean 11.4 1.0 52.9
4106 PRINT MNS1/FORMAT=F5.1.
4107 PRINT SDS1/FORMAT=F5.1.
4108 PRINT NCS1/FORMAT=F5.0.
4109 PRINT CRS1/FORMAT=F5.2.
4110 PRINT MNS2/FORMAT=F5.1.
4111 PRINT SDS2/FORMAT=F5.1.
4112 PRINT NCS2/FORMAT=F5.0.
4113 PRINT CRS2/FORMAT=F5.2.
4116 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
4117 Table: Matrix Variables Created by MGET
4118 ,Split Values,,Dimensions,
4159 AT_SETUP([MATRIX - MGET with factor variables])
4160 AT_DATA([matrix.sps], [dnl
4162 VARIABLES=ROWTYPE_ f1 var01 TO var04
4176 FORMATS var01 TO var04(F5.1).
4177 SAVE OUTFILE='matrix.sav'.
4179 AT_DATA([matrix2.sps], [dnl
4181 MGET FILE='matrix.sav'.
4182 PRINT MNF1/FORMAT=F2.0.
4183 PRINT SDF1/FORMAT=F2.0.
4184 PRINT NCF1/FORMAT=F2.0.
4185 PRINT MNF2/FORMAT=F2.0.
4186 PRINT SDF2/FORMAT=F2.0.
4187 PRINT NCF2/FORMAT=F2.0.
4188 PRINT CR/FORMAT=F3.1.
4191 AT_CHECK([pspp matrix.sps])
4192 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4193 Table: Matrix Variables Created by MGET
4194 ,Factors,Dimensions,
4230 AT_SETUP([MATRIX - MGET with factor and split variables])
4231 AT_DATA([matrix.sps], [dnl
4233 variables = s f rowtype_ var01 var02 var03
4238 8 0 mean 21.4 5.0 72.9
4243 8 . corr -.16 -.22 1
4244 9 1 mean 11.4 1.0 52.9
4254 PRINT MNF1S1/FORMAT=F5.1.
4255 PRINT SDF1S1/FORMAT=F5.1.
4256 PRINT NCF1S1/FORMAT=F5.0.
4257 PRINT CRS1/FORMAT=F5.2.
4258 PRINT MNF1S2/FORMAT=F5.1.
4259 PRINT SDF1S2/FORMAT=F5.1.
4260 PRINT NCF1S2/FORMAT=F5.0.
4261 PRINT CRS2/FORMAT=F5.2.
4264 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4265 Table: Matrix Variables Created by MGET
4266 ,Split Values,Factors,Dimensions,
4307 AT_SETUP([MATRIX - MGET with TYPE])
4308 AT_DATA([matrix.sps], [dnl
4310 VARIABLES=ROWTYPE_ f1 var01 TO var04
4324 FORMATS var01 TO var04(F5.1).
4325 SAVE OUTFILE='matrix.sav'.
4327 AT_DATA([matrix2.sps], [dnl
4329 MGET/FILE='matrix.sav'/TYPE=CORR.
4330 PRINT CR/FORMAT=F3.1.
4333 AT_CHECK([pspp matrix.sps])
4334 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4335 Table: Matrix Variables Created by MGET
4336 ,Factors,Dimensions,
4348 AT_SETUP([MATRIX - MGET - negative - parsing])
4349 AT_DATA([matrix.sps], [dnl
4358 AT_CHECK([pspp matrix.sps], [1], [dnl
4359 matrix.sps:2.6: error: MGET: Syntax error expecting FILE or TYPE.
4363 matrix.sps:3.11: error: MGET: Syntax error expecting a file name or handle
4368 matrix.sps:4.15: error: MGET: Syntax error expecting string.
4369 4 | MGET ENCODING=!.
4372 matrix.sps:5.11: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4377 matrix.sps:6.16: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4379 6 | MGET TYPE=CORR !.
4384 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
4385 AT_DATA([matrix.sps], [dnl
4386 DATA LIST LIST NOTABLE /x.
4395 AT_CHECK([pspp matrix.sps], [1], [dnl
4396 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
4398 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
4402 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
4403 AT_DATA([matrix.sps], [dnl
4404 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
4413 AT_CHECK([pspp matrix.sps], [1], [dnl
4414 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
4415 byte string, but it has width 7.
4417 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
4418 byte string, but it has width 0.
4422 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
4423 AT_DATA([matrix.sps], [dnl
4424 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
4433 AT_CHECK([pspp matrix.sps], [1], [dnl
4434 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
4439 AT_SETUP([MATRIX - MGET - no continuous variables])
4440 AT_DATA([matrix.sps], [dnl
4441 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
4450 AT_CHECK([pspp matrix.sps], [1], [dnl
4451 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
4455 AT_SETUP([MATRIX - MGET - unexpected string variables])
4456 AT_DATA([matrix.sps], [dnl
4457 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
4466 AT_CHECK([pspp matrix.sps], [1], [dnl
4467 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
4472 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
4473 AT_DATA([matrix.sps], [dnl
4474 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4483 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4484 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
4488 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
4489 AT_DATA([matrix.sps], [dnl
4490 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4500 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4501 Table: Matrix Variables Created by MGET
4506 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
4510 AT_SETUP([MATRIX - MGET - missing values in input])
4511 AT_DATA([matrix.sps], [dnl
4512 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
4520 PRINT ncs1/FORMAT=F5.
4521 PRINT ncs2/FORMAT=F5.
4524 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4525 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
4527 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
4529 Table: Matrix Variables Created by MGET
4530 ,Split Values,Dimensions,
4543 AT_SETUP([MATRIX - MSAVE])
4544 AT_DATA([matrix.sps], [dnl
4546 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
4547 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
4548 MSAVE {11, 12}/TYPE=MEAN.
4549 MSAVE {13, 14}/TYPE=STDDEV.
4550 MSAVE {15, 16}/TYPE=N.
4551 MSAVE {17, 18}/TYPE=COUNT.
4556 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4558 ROWTYPE_,VARNAME_,X,Y
4571 AT_SETUP([MATRIX - MSAVE with factor variables])
4572 AT_DATA([matrix.sps], [dnl
4574 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
4575 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4576 MSAVE {11, 12}/TYPE=MEAN.
4577 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
4578 MSAVE {15, 16}/TYPE=N.
4579 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
4585 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
4590 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4592 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
4593 CORR,1.00,1.00,COL1,1.00,2.00
4594 CORR,1.00,1.00,COL2,3.00,4.00
4595 COV,1.00,1.00,COL1,5.00,6.00
4596 COV,1.00,1.00,COL2,7.00,8.00
4597 COV,1.00,1.00,,9.00,10.00
4598 MEAN,1.00,1.00,,11.00,12.00
4599 STDDEV,2.00,1.00,,13.00,14.00
4600 N,2.00,1.00,,15.00,16.00
4601 COUNT,1.00,2.00,,17.00,18.00
4604 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
4605 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
4606 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
4610 AT_SETUP([MATRIX - MSAVE with split variables])
4611 AT_DATA([matrix.sps], [dnl
4613 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
4614 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4615 MSAVE {11, 12}/TYPE=MEAN.
4616 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
4617 MSAVE {15, 16}/TYPE=N.
4618 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
4624 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
4629 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4631 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
4632 1.00,1.00,CORR,COL1,1.00,2.00
4633 1.00,1.00,CORR,COL2,3.00,4.00
4634 1.00,1.00,COV,COL1,5.00,6.00
4635 1.00,1.00,COV,COL2,7.00,8.00
4636 1.00,1.00,COV,,9.00,10.00
4637 1.00,1.00,MEAN,,11.00,12.00
4638 2.00,1.00,STDDEV,,13.00,14.00
4639 2.00,1.00,N,,15.00,16.00
4640 1.00,2.00,COUNT,,17.00,18.00
4643 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
4644 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
4645 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
4649 AT_SETUP([MATRIX - MSAVE with factor and split variables])
4650 AT_DATA([matrix.sps], [dnl
4652 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
4653 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4654 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
4655 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
4656 MSAVE {15, 16}/TYPE=N.
4657 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
4662 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4664 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
4665 1.00,CORR,1.00,COL1,1.00,2.00
4666 1.00,CORR,1.00,COL2,3.00,4.00
4667 1.00,COV,1.00,COL1,5.00,6.00
4668 1.00,COV,1.00,COL2,7.00,8.00
4669 1.00,COV,1.00,,9.00,10.00
4670 1.00,MEAN,2.00,,11.00,12.00
4671 2.00,STDDEV,1.00,,13.00,14.00
4672 2.00,N,1.00,,15.00,16.00
4673 2.00,COUNT,2.00,,17.00,18.00
4677 AT_SETUP([MATRIX - MSAVE - negative])
4678 AT_DATA([matrix.sps], [dnl
4683 MSAVE 1/VARIABLES=!.
4690 MSAVE 1/TYPE=COV/FNAMES=x.
4691 MSAVE 1/TYPE=COV/SNAMES=x.
4694 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4698 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4699 MSAVE 1/TYPE=COV/VARIABLES=x.
4700 MSAVE 1/TYPE=COV/FNAMES=x.
4701 MSAVE 1/TYPE=COV/SNAMES=x.
4705 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4706 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4707 MSAVE {1,2;3}/TYPE=COV.
4708 MSAVE 0/TYPE=COV/FACTOR={1,2}.
4709 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4713 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4717 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
4721 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4725 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4729 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4730 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4731 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4732 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4733 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4734 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4737 AT_CHECK([pspp matrix.sps], [1], [dnl
4738 matrix.sps:2.7: error: MSAVE: Syntax error.
4742 matrix.sps:3.14: error: MSAVE: Syntax error expecting COV, CORR, MEAN, STDDEV,
4747 matrix.sps:4.17: error: MSAVE: Syntax error expecting a file name or handle
4749 4 | MSAVE 1/OUTFILE=!.
4752 matrix.sps:5.19: error: MSAVE: Syntax error expecting variable name.
4753 5 | MSAVE 1/VARIABLES=!.
4756 matrix.sps:6.16: error: MSAVE: Syntax error expecting variable name.
4757 6 | MSAVE 1/FNAMES=!.
4760 matrix.sps:7.16: error: MSAVE: Syntax error expecting variable name.
4761 7 | MSAVE 1/SNAMES=!.
4764 matrix.sps:8.15: error: MSAVE: Syntax error.
4765 8 | MSAVE 1/SPLIT=!.
4768 matrix.sps:9.16: error: MSAVE: Syntax error.
4769 9 | MSAVE 1/FACTOR=!.
4772 matrix.sps:10.9: error: MSAVE: Syntax error expecting TYPE, OUTFILE, VARIABLES,
4773 FNAMES, SNAMES, SPLIT, or FACTOR.
4777 matrix.sps:11: error: MSAVE: Required subcommand TYPE was not specified.
4779 matrix.sps:12.25: error: MSAVE: FNAMES requires FACTOR.
4780 12 | MSAVE 1/TYPE=COV/FNAMES=x.
4783 matrix.sps:13.25: error: MSAVE: SNAMES requires SPLIT.
4784 13 | MSAVE 1/TYPE=COV/SNAMES=x.
4787 matrix.sps:14: error: MSAVE: Required subcommand OUTFILE was not specified.
4789 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
4790 within a single MATRIX command.
4792 matrix.sps:16.26-16.37: note: MSAVE: This is the OUTFILE on the first MSAVE
4794 16 | MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4797 matrix.sps:20.26-20.38: note: MSAVE: This is the OUTFILE on a later MSAVE
4799 20 | MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4802 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables on each
4803 MSAVE within a given MATRIX.
4805 matrix.sps:19.16: error: MSAVE: This is the specification of VARIABLES on the
4810 matrix.sps:21.28: error: MSAVE: This is a different specification of VARIABLES
4812 21 | MSAVE 1/TYPE=COV/VARIABLES=x.
4815 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables on each
4816 MSAVE within a given MATRIX.
4818 matrix.sps:17.23: error: MSAVE: This is the specification of FNAMES on the
4820 17 | /FACTOR=1 /FNAMES=y
4823 matrix.sps:22.25: error: MSAVE: This is a different specification of FNAMES on
4825 22 | MSAVE 1/TYPE=COV/FNAMES=x.
4828 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables on each
4829 MSAVE within a given MATRIX.
4831 matrix.sps:18.22: error: MSAVE: This is the specification of SNAMES on the
4833 18 | /SPLIT=2 /SNAMES=z
4836 matrix.sps:23.25: error: MSAVE: This is a different specification of SNAMES on
4838 23 | MSAVE 1/TYPE=COV/SNAMES=x.
4841 matrix.sps:28.7-28.11: error: MATRIX: Matrix on MSAVE has 2 columns but there
4843 28 | MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/
4847 matrix.sps:29.7-29.13: error: MATRIX: This expression tries to vertically join
4848 matrices with differing numbers of columns.
4849 29 | MSAVE {1,2;3}/TYPE=COV.
4852 matrix.sps:29.8-29.10: note: MATRIX: This operand is a 1×2 matrix.
4853 29 | MSAVE {1,2;3}/TYPE=COV.
4856 matrix.sps:29.12: note: MATRIX: This operand is a 1×1 matrix.
4857 29 | MSAVE {1,2;3}/TYPE=COV.
4860 matrix.sps:30.25-30.29: error: MATRIX: There are 1 factor variables, but 2
4861 factor values were supplied.
4862 30 | MSAVE 0/TYPE=COV/FACTOR={1,2}.
4865 matrix.sps:31.33-31.37: error: MATRIX: There are 1 split variables, but 2 split
4866 values were supplied.
4867 31 | MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4870 matrix.sps:35.49: error: MSAVE: Variable x appears twice in variable list.
4871 35 | MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4874 matrix.sps:39.56: error: MATRIX: Duplicate or invalid FACTOR variable name x.
4875 39 | MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/
4879 matrix.sps:43.50: error: MATRIX: Duplicate or invalid variable name x.
4880 43 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4883 matrix.sps:47.50: error: MATRIX: Duplicate or invalid variable name x.
4884 47 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4887 matrix.sps:51.47-51.54: error: MSAVE: Variable name VARNAME_ is reserved.
4888 51 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4891 matrix.sps:52.47-52.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4892 52 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4895 matrix.sps:53.47-53.54: error: MSAVE: Variable name VARNAME_ is reserved.
4896 53 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4899 matrix.sps:54.47-54.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4900 54 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4903 matrix.sps:55.50-55.57: error: MSAVE: Variable name VARNAME_ is reserved.
4904 55 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4907 matrix.sps:56.50-56.57: error: MSAVE: Variable name ROWTYPE_ is reserved.
4908 56 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4913 AT_SETUP([MATRIX - DISPLAY])
4914 AT_DATA([matrix-template.sps], [dnl
4923 for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
4924 sed "s/command/$command/" < matrix-template.sps > matrix.sps
4925 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4926 Table: Matrix Variables
4927 ,Dimension,,Size (kB)
4937 AT_SETUP([MATRIX - DISPLAY - negative])
4938 AT_DATA([matrix.sps], [dnl
4943 AT_CHECK([pspp matrix.sps], [1], [dnl
4944 matrix.sps:2.9: error: DISPLAY: Syntax error expecting DICTIONARY or STATUS.
4950 AT_SETUP([MATRIX - RELEASE])
4951 AT_DATA([matrix.sps], [dnl
4959 AT_CHECK([pspp matrix.sps], [1], [dnl
4963 matrix.sps:5.7: error: MATRIX: Uninitialized variable x used in expression.
4969 AT_SETUP([MATRIX - RELEASE - negative])
4970 AT_DATA([matrix.sps], [dnl
4983 AT_CHECK([pspp matrix.sps], [1], [dnl
4984 matrix.sps:2.9: error: RELEASE: Syntax error expecting end of command.
4988 matrix.sps:3.9: error: RELEASE: Syntax error expecting variable name.
4992 matrix.sps:5.12: error: RELEASE: Syntax error expecting end of command.
4996 matrix.sps:7.11: error: RELEASE: Syntax error expecting end of command.