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.1-18.7: error: READ: Required subcommand FIELD was not specified.
3395 matrix.sps:19: error: READ: SIZE is required for reading data into a full
3396 matrix (as opposed to a submatrix).
3398 matrix.sps:19.6: note: READ: This expression designates a full matrix.
3399 19 | READ x/FIELD=1 TO 10.
3402 matrix.sps:20.1-20.32: error: READ: Required subcommand FILE was not specified.
3403 20 | READ x/FIELD=1 TO 10/SIZE={1,2}.
3404 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3406 matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
3408 matrix.sps:21.57-21.61: note: READ: This syntax designates the number of
3410 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3413 matrix.sps:21.14-21.20: note: READ: This syntax designates the record width.
3414 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
3417 matrix.sps:22: error: READ: This command specifies two different field widths.
3419 matrix.sps:22.62-22.63: note: READ: This syntax specifies field width 5.
3420 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3423 matrix.sps:22.25: note: READ: This syntax specifies field width 2.
3424 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
3427 matrix.sps:23: error: READ: This command specifies two different field widths.
3429 matrix.sps:23.62-23.65: note: READ: This syntax specifies 2 repetitions.
3430 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3433 matrix.sps:23.14-23.20: note: READ: This syntax designates record width 10,
3434 which divided by 2 repetitions implies field width 5.
3435 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3438 matrix.sps:23.25: note: READ: This syntax specifies field width 2.
3439 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
3442 matrix.sps:24.27-24.35: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3443 element vector, not a 2×2 matrix.
3444 24 | READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
3447 matrix.sps:25.27-25.33: error: MATRIX: SIZE must evaluate to a scalar or a 2-
3448 element vector, not a 1×3 matrix.
3449 25 | READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
3452 matrix.sps:26.28-26.29: error: MATRIX: Matrix dimensions -1×1 specified on SIZE
3453 are outside valid range.
3454 26 | READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
3457 matrix.sps:28: error: MATRIX: Dimensions specified on SIZE differ from
3458 dimensions of destination submatrix.
3460 matrix.sps:28.32-28.36: note: MATRIX: SIZE specifies dimensions 2×2.
3461 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3464 matrix.sps:28.6-28.11: note: MATRIX: Destination submatrix has dimensions 1×3.
3465 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
3468 matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
3471 matrix.txt:1.1-1.5: warning: Error reading "xyzzy" as format F for matrix row
3472 1, column 1: Field contents are not numeric.
3474 matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
3475 1: Matrix data may not contain missing value.
3479 AT_SETUP([MATRIX - WRITE])
3480 AT_DATA([matrix.sps], [dnl
3482 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
3483 WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
3484 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
3485 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
3486 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
3487 WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
3488 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
3489 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
3490 WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
3493 AT_CHECK([pspp matrix.sps])
3494 AT_CHECK([cat matrix.txt], [0], [dnl
3516 AT_SETUP([MATRIX - WRITE - negative])
3517 AT_DATA([matrix.sps], [dnl
3524 WRITE 1/FIELD=1 TO 0.
3525 WRITE 1/FIELD=1 TO 10 BY 20.
3526 WRITE 1/FIELD=1 TO 10 BY 6.
3527 WRITE 1/MODE=TRAPEZOIDAL.
3528 WRITE 1/FORMAT=F5/FORMAT=F5.
3529 WRITE 1/FORMAT='5ASDF'.
3530 WRITE 1/FORMAT=ASDF5.
3533 WRITE 1/FIELD=1 TO 10.
3534 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3535 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3536 WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3537 WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3538 WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3541 AT_CHECK([pspp matrix.sps], [1], [dnl
3542 matrix.sps:2.7: error: WRITE: Syntax error.
3546 matrix.sps:3.17: error: WRITE: Syntax error expecting a file name or handle
3548 3 | WRITE 1/OUTFILE=!.
3551 matrix.sps:4.18: error: WRITE: Syntax error expecting string.
3552 4 | WRITE 1/ENCODING=!.
3555 matrix.sps:5.15: error: WRITE: Syntax error expecting positive integer for
3557 5 | WRITE 1/FIELD=!.
3560 matrix.sps:6.17: error: WRITE: Syntax error expecting `TO'.
3561 6 | WRITE 1/FIELD=1 !.
3564 matrix.sps:7.20: error: WRITE: Syntax error expecting positive integer for TO.
3565 7 | WRITE 1/FIELD=1 TO 0.
3568 matrix.sps:8.26-8.27: error: WRITE: Syntax error expecting integer between 1
3570 8 | WRITE 1/FIELD=1 TO 10 BY 20.
3573 matrix.sps:9.15-9.26: error: WRITE: Field width 6 does not evenly divide record
3575 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3578 matrix.sps:9.15-9.21: note: WRITE: This syntax designates the record width.
3579 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3582 matrix.sps:9.26: note: WRITE: This syntax specifies the field width.
3583 9 | WRITE 1/FIELD=1 TO 10 BY 6.
3586 matrix.sps:10.14-10.24: error: WRITE: Syntax error expecting RECTANGULAR or
3588 10 | WRITE 1/MODE=TRAPEZOIDAL.
3591 matrix.sps:11.19-11.24: error: WRITE: Subcommand FORMAT may only be specified
3593 11 | WRITE 1/FORMAT=F5/FORMAT=F5.
3596 matrix.sps:12.16-12.22: error: WRITE: Unknown format ASDF.
3597 12 | WRITE 1/FORMAT='5ASDF'.
3600 matrix.sps:13.16-13.20: error: WRITE: Unknown format type `ASDF'.
3601 13 | WRITE 1/FORMAT=ASDF5.
3604 matrix.sps:14.9: error: WRITE: Syntax error expecting OUTFILE, FIELD, MODE,
3609 matrix.sps:15.1-15.8: error: WRITE: Required subcommand FIELD was not
3614 matrix.sps:16.1-16.22: error: WRITE: Required subcommand OUTFILE was not
3616 16 | WRITE 1/FIELD=1 TO 10.
3617 | ^~~~~~~~~~~~~~~~~~~~~~
3619 matrix.sps:17.51-17.55: note: WRITE: This syntax designates the number of
3621 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3624 matrix.sps:17.15-17.21: note: WRITE: This syntax designates the record width.
3625 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
3628 matrix.sps:18: error: WRITE: This command specifies two different field widths.
3630 matrix.sps:18.56-18.59: note: WRITE: This syntax specifies 5 repetitions.
3631 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3634 matrix.sps:18.15-18.21: note: WRITE: This syntax designates record width 10,
3635 which divided by 5 repetitions implies field width 2.
3636 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3639 matrix.sps:18.26: note: WRITE: This syntax specifies field width 5.
3640 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
3643 matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
3644 requires a width between 6 and 40.
3646 matrix.sps:20.51-20.52: error: WRITE: Format A9 is too wide for 8-byte matrix
3648 20 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3651 matrix.sps:21.7-21.11: error: MATRIX: WRITE with MODE=TRIANGULAR requires a
3652 square matrix but the matrix to be written has dimensions 1×2.
3653 21 | WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3658 AT_SETUP([MATRIX - GET])
3659 AT_DATA([matrix.sps], [dnl
3660 DATA LIST LIST NOTABLE /a b c.
3661 MISSING VALUES a(1) b(5).
3670 GET x0 /NAMES=names0.
3672 PRINT names0/FORMAT=A8.
3676 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
3678 PRINT names1/FORMAT=A8.
3682 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
3684 PRINT names2/FORMAT=A8.
3688 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
3690 PRINT names3/FORMAT=A8.
3694 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
3696 PRINT names4/FORMAT=A8.
3699 SAVE OUTFILE='matrix.sav'.
3703 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
3705 PRINT names5/FORMAT=A8.
3709 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
3711 PRINT names6/FORMAT=A8.
3715 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
3717 PRINT names7/FORMAT=A8.
3720 AT_CHECK([pspp matrix.sps], [1], [dnl
3721 matrix.sps:11: error: MATRIX: Variable a in case 2 has user-missing value 1.
3723 matrix.sps:12.7-12.8: error: MATRIX: Uninitialized variable x0 used in
3733 matrix.sps:17: error: MATRIX: Variable c in case 4 is system-missing.
3735 matrix.sps:18.7-18.8: error: MATRIX: Uninitialized variable x1 used in
3753 matrix.sps:29: error: MATRIX: Variable c in case 4 is system-missing.
3755 matrix.sps:30.7-30.8: error: MATRIX: Uninitialized variable x3 used in
3775 matrix.sps:44: error: MATRIX: Variable c in case 4 is system-missing.
3777 matrix.sps:45.7-45.8: error: MATRIX: Uninitialized variable x5 used in
3810 AT_SETUP([MATRIX - GET - negative])
3811 AT_DATA([matrix.sps], [dnl
3812 DATA LIST LIST NOTABLE /a b c * d(a1).
3813 MISSING VALUES a(1) b(5).
3820 SAVE OUTFILE='matrix.sav'.
3832 GET x/VARIABLES=x TO !.
3834 GET x/VARIABLES=c TO a.
3844 AT_CHECK([pspp matrix.sps], [1], [dnl
3845 matrix.sps:12.5: error: GET: Syntax error expecting identifier.
3849 matrix.sps:13.17: error: GET: Syntax error expecting variable name.
3850 13 | GET x/VARIABLES=!.
3853 matrix.sps:14.12: error: GET: Syntax error expecting a file name or handle
3858 matrix.sps:15.16: error: GET: Syntax error expecting string.
3859 15 | GET x/ENCODING=!.
3862 matrix.sps:16.13: error: GET: Syntax error expecting identifier.
3866 matrix.sps:17.15: error: GET: Syntax error.
3867 17 | GET x/MISSING=!.
3870 matrix.sps:18.14: error: GET: Syntax error.
3871 18 | GET x/SYSMIS=!.
3874 matrix.sps:19.7: error: GET: Syntax error expecting FILE, VARIABLES, NAMES,
3879 matrix.sps:20.17: error: GET: Syntax error expecting variable name.
3880 20 | GET x/VARIABLES=!.
3883 matrix.sps:21.22: error: GET: Syntax error expecting variable name.
3884 21 | GET x/VARIABLES=x TO !.
3887 matrix.sps:22.17: error: MATRIX: x is not a variable name.
3888 22 | GET x/VARIABLES=x.
3891 matrix.sps:23.17-23.22: error: MATRIX: c TO a is not valid syntax since c
3892 precedes a in the dictionary.
3893 23 | GET x/VARIABLES=c TO a.
3896 matrix.sps:24.17: error: MATRIX: d is not a numeric variable.
3897 24 | GET x/VARIABLES=d.
3900 matrix.sps:25: error: MATRIX: Variable d is not numeric.
3902 matrix.sps:30: error: MATRIX: The GET command cannot read an empty active file.
3906 AT_SETUP([MATRIX - SAVE])
3907 AT_DATA([matrix.sps], [dnl
3909 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3910 SAVE {7,8,9}/VARIABLES=a b c d.
3912 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3913 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3915 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3916 SAVE {4,'xyzw',6}/STRINGS=a, b.
3919 AT_CHECK([pspp matrix.sps])
3920 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3926 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3931 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
3938 AT_SETUP([MATRIX - SAVE - inline])
3939 AT_DATA([matrix.sps], [dnl
3941 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
3942 SAVE {7,8,9}/VARIABLES=a b c d.
3947 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
3948 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3953 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
3954 SAVE {4,'xyzw',6}/STRINGS=a, b.
3958 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3977 AT_SETUP([MATRIX - SAVE - negative])
3978 AT_DATA([matrix.sps], [dnl
3986 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
3987 SAVE 1/OUTFILE='matrix2.sav'.
3988 SAVE {1,2}/OUTFILE='matrix2.sav'.
3989 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
3990 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
3991 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
3994 AT_CHECK([pspp matrix.sps], [1], [dnl
3995 matrix.sps:2.6: error: SAVE: Syntax error.
3999 matrix.sps:3.16: error: SAVE: Syntax error expecting a file name or handle
4001 3 | SAVE 1/OUTFILE=!.
4004 matrix.sps:4.18: error: SAVE: Syntax error expecting variable name.
4005 4 | SAVE 1/VARIABLES=!.
4008 matrix.sps:5.14: error: SAVE: Syntax error.
4012 matrix.sps:6.8: error: SAVE: Syntax error expecting OUTFILE, VARIABLES, NAMES,
4017 matrix.sps:7.1-7.7: error: SAVE: Required subcommand OUTFILE was not specified.
4021 matrix.sps:8: warning: SAVE: VARIABLES and NAMES both specified; ignoring
4024 matrix.sps:10: error: MATRIX: Cannot save 1×2 matrix to `matrix2.sav' because
4025 the first SAVE to `matrix2.sav' in this matrix program wrote a 1-column matrix.
4027 matrix.sps:9: error: MATRIX: This is the location of the first SAVE to
4030 error: Duplicate variable name a in SAVE statement.
4032 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
4034 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
4039 AT_SETUP([MATRIX - MGET])
4040 AT_DATA([matrix.sps], [dnl
4042 VARIABLES=ROWTYPE_ var01 TO var08.
4044 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4045 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4046 N 92 92 92 92 92 92 92 92
4050 CORR .36 .31 -.14 1.00
4051 CORR .27 .16 -.12 .22 1.00
4052 CORR .33 .15 -.17 .24 .21 1.00
4053 CORR .50 .29 -.20 .32 .12 .38 1.00
4054 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
4059 PRINT MN/FORMAT=F5.1.
4060 PRINT SD/FORMAT=F5.1.
4061 PRINT NC/FORMAT=F5.0.
4062 PRINT CR/FORMAT=F5.2.
4065 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4066 Table: Matrix Variables Created by MGET
4075 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4078 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4081 92 92 92 92 92 92 92 92
4084 1.00 .18 -.22 .36 .27 .33 .50 .17
4085 .18 1.00 -.17 .31 .16 .15 .29 .29
4086 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
4087 .36 .31 -.14 1.00 .22 .24 .32 .20
4088 .27 .16 -.12 .22 1.00 .21 .12 .27
4089 .33 .15 -.17 .24 .21 1.00 .38 .20
4090 .50 .29 -.20 .32 .12 .38 1.00 .04
4091 .17 .29 -.05 .20 .27 .20 .04 1.00
4095 AT_SETUP([MATRIX - MGET with split variables])
4096 AT_DATA([matrix.sps], [dnl
4098 variables = s1 s2 rowtype_ var01 var02 var03
4102 8 0 mean 21.4 5.0 72.9
4107 8 0 corr -.16 -.22 1
4108 8 1 mean 11.4 1.0 52.9
4118 PRINT MNS1/FORMAT=F5.1.
4119 PRINT SDS1/FORMAT=F5.1.
4120 PRINT NCS1/FORMAT=F5.0.
4121 PRINT CRS1/FORMAT=F5.2.
4122 PRINT MNS2/FORMAT=F5.1.
4123 PRINT SDS2/FORMAT=F5.1.
4124 PRINT NCS2/FORMAT=F5.0.
4125 PRINT CRS2/FORMAT=F5.2.
4128 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
4129 Table: Matrix Variables Created by MGET
4130 ,Split Values,,Dimensions,
4171 AT_SETUP([MATRIX - MGET with factor variables])
4172 AT_DATA([matrix.sps], [dnl
4174 VARIABLES=ROWTYPE_ f1 var01 TO var04
4188 FORMATS var01 TO var04(F5.1).
4189 SAVE OUTFILE='matrix.sav'.
4191 AT_DATA([matrix2.sps], [dnl
4193 MGET FILE='matrix.sav'.
4194 PRINT MNF1/FORMAT=F2.0.
4195 PRINT SDF1/FORMAT=F2.0.
4196 PRINT NCF1/FORMAT=F2.0.
4197 PRINT MNF2/FORMAT=F2.0.
4198 PRINT SDF2/FORMAT=F2.0.
4199 PRINT NCF2/FORMAT=F2.0.
4200 PRINT CR/FORMAT=F3.1.
4203 AT_CHECK([pspp matrix.sps])
4204 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4205 Table: Matrix Variables Created by MGET
4206 ,Factors,Dimensions,
4242 AT_SETUP([MATRIX - MGET with factor and split variables])
4243 AT_DATA([matrix.sps], [dnl
4245 variables = s f rowtype_ var01 var02 var03
4250 8 0 mean 21.4 5.0 72.9
4255 8 . corr -.16 -.22 1
4256 9 1 mean 11.4 1.0 52.9
4266 PRINT MNF1S1/FORMAT=F5.1.
4267 PRINT SDF1S1/FORMAT=F5.1.
4268 PRINT NCF1S1/FORMAT=F5.0.
4269 PRINT CRS1/FORMAT=F5.2.
4270 PRINT MNF1S2/FORMAT=F5.1.
4271 PRINT SDF1S2/FORMAT=F5.1.
4272 PRINT NCF1S2/FORMAT=F5.0.
4273 PRINT CRS2/FORMAT=F5.2.
4276 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4277 Table: Matrix Variables Created by MGET
4278 ,Split Values,Factors,Dimensions,
4319 AT_SETUP([MATRIX - MGET with TYPE])
4320 AT_DATA([matrix.sps], [dnl
4322 VARIABLES=ROWTYPE_ f1 var01 TO var04
4336 FORMATS var01 TO var04(F5.1).
4337 SAVE OUTFILE='matrix.sav'.
4339 AT_DATA([matrix2.sps], [dnl
4341 MGET/FILE='matrix.sav'/TYPE=CORR.
4342 PRINT CR/FORMAT=F3.1.
4345 AT_CHECK([pspp matrix.sps])
4346 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4347 Table: Matrix Variables Created by MGET
4348 ,Factors,Dimensions,
4360 AT_SETUP([MATRIX - MGET - negative - parsing])
4361 AT_DATA([matrix.sps], [dnl
4370 AT_CHECK([pspp matrix.sps], [1], [dnl
4371 matrix.sps:2.6: error: MGET: Syntax error expecting FILE or TYPE.
4375 matrix.sps:3.11: error: MGET: Syntax error expecting a file name or handle
4380 matrix.sps:4.15: error: MGET: Syntax error expecting string.
4381 4 | MGET ENCODING=!.
4384 matrix.sps:5.11: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4389 matrix.sps:6.16: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4391 6 | MGET TYPE=CORR !.
4396 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
4397 AT_DATA([matrix.sps], [dnl
4398 DATA LIST LIST NOTABLE /x.
4407 AT_CHECK([pspp matrix.sps], [1], [dnl
4408 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
4410 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
4414 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
4415 AT_DATA([matrix.sps], [dnl
4416 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
4425 AT_CHECK([pspp matrix.sps], [1], [dnl
4426 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
4427 byte string, but it has width 7.
4429 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
4430 byte string, but it has width 0.
4434 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
4435 AT_DATA([matrix.sps], [dnl
4436 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
4445 AT_CHECK([pspp matrix.sps], [1], [dnl
4446 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
4451 AT_SETUP([MATRIX - MGET - no continuous variables])
4452 AT_DATA([matrix.sps], [dnl
4453 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
4462 AT_CHECK([pspp matrix.sps], [1], [dnl
4463 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
4467 AT_SETUP([MATRIX - MGET - unexpected string variables])
4468 AT_DATA([matrix.sps], [dnl
4469 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
4478 AT_CHECK([pspp matrix.sps], [1], [dnl
4479 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
4484 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
4485 AT_DATA([matrix.sps], [dnl
4486 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4495 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4496 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
4500 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
4501 AT_DATA([matrix.sps], [dnl
4502 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4512 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4513 Table: Matrix Variables Created by MGET
4518 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
4522 AT_SETUP([MATRIX - MGET - missing values in input])
4523 AT_DATA([matrix.sps], [dnl
4524 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
4532 PRINT ncs1/FORMAT=F5.
4533 PRINT ncs2/FORMAT=F5.
4536 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4537 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
4539 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
4541 Table: Matrix Variables Created by MGET
4542 ,Split Values,Dimensions,
4555 AT_SETUP([MATRIX - MSAVE])
4556 AT_DATA([matrix.sps], [dnl
4558 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
4559 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
4560 MSAVE {11, 12}/TYPE=MEAN.
4561 MSAVE {13, 14}/TYPE=STDDEV.
4562 MSAVE {15, 16}/TYPE=N.
4563 MSAVE {17, 18}/TYPE=COUNT.
4568 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4570 ROWTYPE_,VARNAME_,X,Y
4583 AT_SETUP([MATRIX - MSAVE with factor variables])
4584 AT_DATA([matrix.sps], [dnl
4586 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
4587 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4588 MSAVE {11, 12}/TYPE=MEAN.
4589 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
4590 MSAVE {15, 16}/TYPE=N.
4591 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
4597 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
4602 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4604 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
4605 CORR,1.00,1.00,COL1,1.00,2.00
4606 CORR,1.00,1.00,COL2,3.00,4.00
4607 COV,1.00,1.00,COL1,5.00,6.00
4608 COV,1.00,1.00,COL2,7.00,8.00
4609 COV,1.00,1.00,,9.00,10.00
4610 MEAN,1.00,1.00,,11.00,12.00
4611 STDDEV,2.00,1.00,,13.00,14.00
4612 N,2.00,1.00,,15.00,16.00
4613 COUNT,1.00,2.00,,17.00,18.00
4616 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
4617 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
4618 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
4622 AT_SETUP([MATRIX - MSAVE with split variables])
4623 AT_DATA([matrix.sps], [dnl
4625 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
4626 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4627 MSAVE {11, 12}/TYPE=MEAN.
4628 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
4629 MSAVE {15, 16}/TYPE=N.
4630 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
4636 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
4641 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4643 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
4644 1.00,1.00,CORR,COL1,1.00,2.00
4645 1.00,1.00,CORR,COL2,3.00,4.00
4646 1.00,1.00,COV,COL1,5.00,6.00
4647 1.00,1.00,COV,COL2,7.00,8.00
4648 1.00,1.00,COV,,9.00,10.00
4649 1.00,1.00,MEAN,,11.00,12.00
4650 2.00,1.00,STDDEV,,13.00,14.00
4651 2.00,1.00,N,,15.00,16.00
4652 1.00,2.00,COUNT,,17.00,18.00
4655 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
4656 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
4657 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
4661 AT_SETUP([MATRIX - MSAVE with factor and split variables])
4662 AT_DATA([matrix.sps], [dnl
4664 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
4665 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4666 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
4667 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
4668 MSAVE {15, 16}/TYPE=N.
4669 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
4674 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4676 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
4677 1.00,CORR,1.00,COL1,1.00,2.00
4678 1.00,CORR,1.00,COL2,3.00,4.00
4679 1.00,COV,1.00,COL1,5.00,6.00
4680 1.00,COV,1.00,COL2,7.00,8.00
4681 1.00,COV,1.00,,9.00,10.00
4682 1.00,MEAN,2.00,,11.00,12.00
4683 2.00,STDDEV,1.00,,13.00,14.00
4684 2.00,N,1.00,,15.00,16.00
4685 2.00,COUNT,2.00,,17.00,18.00
4689 AT_SETUP([MATRIX - MSAVE - negative])
4690 AT_DATA([matrix.sps], [dnl
4695 MSAVE 1/VARIABLES=!.
4702 MSAVE 1/TYPE=COV/FNAMES=x.
4703 MSAVE 1/TYPE=COV/SNAMES=x.
4706 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4710 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4711 MSAVE 1/TYPE=COV/VARIABLES=x.
4712 MSAVE 1/TYPE=COV/FNAMES=x.
4713 MSAVE 1/TYPE=COV/SNAMES=x.
4717 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4718 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4719 MSAVE {1,2;3}/TYPE=COV.
4720 MSAVE 0/TYPE=COV/FACTOR={1,2}.
4721 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4725 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4729 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
4733 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4737 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4741 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4742 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4743 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4744 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4745 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4746 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4749 AT_CHECK([pspp matrix.sps], [1], [dnl
4750 matrix.sps:2.7: error: MSAVE: Syntax error.
4754 matrix.sps:3.14: error: MSAVE: Syntax error expecting COV, CORR, MEAN, STDDEV,
4759 matrix.sps:4.17: error: MSAVE: Syntax error expecting a file name or handle
4761 4 | MSAVE 1/OUTFILE=!.
4764 matrix.sps:5.19: error: MSAVE: Syntax error expecting variable name.
4765 5 | MSAVE 1/VARIABLES=!.
4768 matrix.sps:6.16: error: MSAVE: Syntax error expecting variable name.
4769 6 | MSAVE 1/FNAMES=!.
4772 matrix.sps:7.16: error: MSAVE: Syntax error expecting variable name.
4773 7 | MSAVE 1/SNAMES=!.
4776 matrix.sps:8.15: error: MSAVE: Syntax error.
4777 8 | MSAVE 1/SPLIT=!.
4780 matrix.sps:9.16: error: MSAVE: Syntax error.
4781 9 | MSAVE 1/FACTOR=!.
4784 matrix.sps:10.9: error: MSAVE: Syntax error expecting TYPE, OUTFILE, VARIABLES,
4785 FNAMES, SNAMES, SPLIT, or FACTOR.
4789 matrix.sps:11.1-11.8: error: MSAVE: Required subcommand TYPE was not specified.
4793 matrix.sps:12.25: error: MSAVE: FNAMES requires FACTOR.
4794 12 | MSAVE 1/TYPE=COV/FNAMES=x.
4797 matrix.sps:13.25: error: MSAVE: SNAMES requires SPLIT.
4798 13 | MSAVE 1/TYPE=COV/SNAMES=x.
4801 matrix.sps:14.1-14.17: error: MSAVE: Required subcommand OUTFILE was not
4803 14 | MSAVE 1/TYPE=COV.
4806 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
4807 within a single MATRIX command.
4809 matrix.sps:16.26-16.37: note: MSAVE: This is the OUTFILE on the first MSAVE
4811 16 | MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4814 matrix.sps:20.26-20.38: note: MSAVE: This is the OUTFILE on a later MSAVE
4816 20 | MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4819 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables on each
4820 MSAVE within a given MATRIX.
4822 matrix.sps:19.16: error: MSAVE: This is the specification of VARIABLES on the
4827 matrix.sps:21.28: error: MSAVE: This is a different specification of VARIABLES
4829 21 | MSAVE 1/TYPE=COV/VARIABLES=x.
4832 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables on each
4833 MSAVE within a given MATRIX.
4835 matrix.sps:17.23: error: MSAVE: This is the specification of FNAMES on the
4837 17 | /FACTOR=1 /FNAMES=y
4840 matrix.sps:22.25: error: MSAVE: This is a different specification of FNAMES on
4842 22 | MSAVE 1/TYPE=COV/FNAMES=x.
4845 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables on each
4846 MSAVE within a given MATRIX.
4848 matrix.sps:18.22: error: MSAVE: This is the specification of SNAMES on the
4850 18 | /SPLIT=2 /SNAMES=z
4853 matrix.sps:23.25: error: MSAVE: This is a different specification of SNAMES on
4855 23 | MSAVE 1/TYPE=COV/SNAMES=x.
4858 matrix.sps:28.7-28.11: error: MATRIX: Matrix on MSAVE has 2 columns but there
4860 28 | MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/
4864 matrix.sps:29.7-29.13: error: MATRIX: This expression tries to vertically join
4865 matrices with differing numbers of columns.
4866 29 | MSAVE {1,2;3}/TYPE=COV.
4869 matrix.sps:29.8-29.10: note: MATRIX: This operand is a 1×2 matrix.
4870 29 | MSAVE {1,2;3}/TYPE=COV.
4873 matrix.sps:29.12: note: MATRIX: This operand is a 1×1 matrix.
4874 29 | MSAVE {1,2;3}/TYPE=COV.
4877 matrix.sps:30.25-30.29: error: MATRIX: There are 1 factor variables, but 2
4878 factor values were supplied.
4879 30 | MSAVE 0/TYPE=COV/FACTOR={1,2}.
4882 matrix.sps:31.33-31.37: error: MATRIX: There are 1 split variables, but 2 split
4883 values were supplied.
4884 31 | MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4887 matrix.sps:35.49: error: MSAVE: Variable x appears twice in variable list.
4888 35 | MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4891 matrix.sps:39.56: error: MATRIX: Duplicate or invalid FACTOR variable name x.
4892 39 | MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/
4896 matrix.sps:43.50: error: MATRIX: Duplicate or invalid variable name x.
4897 43 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4900 matrix.sps:47.50: error: MATRIX: Duplicate or invalid variable name x.
4901 47 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4904 matrix.sps:51.47-51.54: error: MSAVE: Variable name VARNAME_ is reserved.
4905 51 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4908 matrix.sps:52.47-52.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4909 52 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4912 matrix.sps:53.47-53.54: error: MSAVE: Variable name VARNAME_ is reserved.
4913 53 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4916 matrix.sps:54.47-54.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4917 54 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4920 matrix.sps:55.50-55.57: error: MSAVE: Variable name VARNAME_ is reserved.
4921 55 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4924 matrix.sps:56.50-56.57: error: MSAVE: Variable name ROWTYPE_ is reserved.
4925 56 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4930 AT_SETUP([MATRIX - DISPLAY])
4931 AT_DATA([matrix-template.sps], [dnl
4940 for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
4941 sed "s/command/$command/" < matrix-template.sps > matrix.sps
4942 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4943 Table: Matrix Variables
4944 ,Dimension,,Size (kB)
4954 AT_SETUP([MATRIX - DISPLAY - negative])
4955 AT_DATA([matrix.sps], [dnl
4960 AT_CHECK([pspp matrix.sps], [1], [dnl
4961 matrix.sps:2.9: error: DISPLAY: Syntax error expecting DICTIONARY or STATUS.
4967 AT_SETUP([MATRIX - RELEASE])
4968 AT_DATA([matrix.sps], [dnl
4976 AT_CHECK([pspp matrix.sps], [1], [dnl
4980 matrix.sps:5.7: error: MATRIX: Uninitialized variable x used in expression.
4986 AT_SETUP([MATRIX - RELEASE - negative])
4987 AT_DATA([matrix.sps], [dnl
5000 AT_CHECK([pspp matrix.sps], [1], [dnl
5001 matrix.sps:2.9: error: RELEASE: Syntax error expecting end of command.
5005 matrix.sps:3.9: error: RELEASE: Syntax error expecting variable name.
5009 matrix.sps:5.12: error: RELEASE: Syntax error expecting end of command.
5013 matrix.sps:7.11: error: RELEASE: Syntax error expecting end of command.