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:19.56: note: WRITE: This syntax specifies format E.
3647 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3650 matrix.sps:19.26: note: WRITE: This syntax specifies field width 5.
3651 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
3654 matrix.sps:20.51-20.52: error: WRITE: Format A9 is too wide for 8-byte matrix
3656 20 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
3659 matrix.sps:21.7-21.11: error: MATRIX: WRITE with MODE=TRIANGULAR requires a
3660 square matrix but the matrix to be written has dimensions 1×2.
3661 21 | WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
3666 AT_SETUP([MATRIX - GET])
3667 AT_DATA([matrix.sps], [dnl
3668 DATA LIST LIST NOTABLE /a b c.
3669 MISSING VALUES a(1) b(5).
3678 GET x0 /NAMES=names0.
3680 PRINT names0/FORMAT=A8.
3684 GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
3686 PRINT names1/FORMAT=A8.
3690 GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
3692 PRINT names2/FORMAT=A8.
3696 GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
3698 PRINT names3/FORMAT=A8.
3702 GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
3704 PRINT names4/FORMAT=A8.
3707 SAVE OUTFILE='matrix.sav'.
3711 GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
3713 PRINT names5/FORMAT=A8.
3717 GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
3719 PRINT names6/FORMAT=A8.
3723 GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
3725 PRINT names7/FORMAT=A8.
3728 AT_CHECK([pspp matrix.sps], [1], [dnl
3729 matrix.sps:11: error: MATRIX: Variable a in case 2 has user-missing value 1.
3731 matrix.sps:12.7-12.8: error: MATRIX: Uninitialized variable x0 used in
3741 matrix.sps:17: error: MATRIX: Variable c in case 4 is system-missing.
3743 matrix.sps:18.7-18.8: error: MATRIX: Uninitialized variable x1 used in
3761 matrix.sps:29: error: MATRIX: Variable c in case 4 is system-missing.
3763 matrix.sps:30.7-30.8: error: MATRIX: Uninitialized variable x3 used in
3783 matrix.sps:44: error: MATRIX: Variable c in case 4 is system-missing.
3785 matrix.sps:45.7-45.8: error: MATRIX: Uninitialized variable x5 used in
3818 AT_SETUP([MATRIX - GET - negative])
3819 AT_DATA([matrix.sps], [dnl
3820 DATA LIST LIST NOTABLE /a b c * d(a1).
3821 MISSING VALUES a(1) b(5).
3828 SAVE OUTFILE='matrix.sav'.
3840 GET x/VARIABLES=x TO !.
3842 GET x/VARIABLES=c TO a.
3852 AT_CHECK([pspp matrix.sps], [1], [dnl
3853 matrix.sps:12.5: error: GET: Syntax error expecting identifier.
3857 matrix.sps:13.17: error: GET: Syntax error expecting variable name.
3858 13 | GET x/VARIABLES=!.
3861 matrix.sps:14.12: error: GET: Syntax error expecting a file name or handle
3866 matrix.sps:15.16: error: GET: Syntax error expecting string.
3867 15 | GET x/ENCODING=!.
3870 matrix.sps:16.13: error: GET: Syntax error expecting identifier.
3874 matrix.sps:17.15: error: GET: Syntax error.
3875 17 | GET x/MISSING=!.
3878 matrix.sps:18.14: error: GET: Syntax error.
3879 18 | GET x/SYSMIS=!.
3882 matrix.sps:19.7: error: GET: Syntax error expecting FILE, VARIABLES, NAMES,
3887 matrix.sps:20.17: error: GET: Syntax error expecting variable name.
3888 20 | GET x/VARIABLES=!.
3891 matrix.sps:21.22: error: GET: Syntax error expecting variable name.
3892 21 | GET x/VARIABLES=x TO !.
3895 matrix.sps:22.17: error: MATRIX: x is not a variable name.
3896 22 | GET x/VARIABLES=x.
3899 matrix.sps:23.17-23.22: error: MATRIX: c TO a is not valid syntax since c
3900 precedes a in the dictionary.
3901 23 | GET x/VARIABLES=c TO a.
3904 matrix.sps:24.17: error: MATRIX: d is not a numeric variable.
3905 24 | GET x/VARIABLES=d.
3908 matrix.sps:25: error: MATRIX: Variable d is not numeric.
3910 matrix.sps:30: error: MATRIX: The GET command cannot read an empty active file.
3914 AT_SETUP([MATRIX - SAVE])
3915 AT_DATA([matrix.sps], [dnl
3917 SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
3918 SAVE {7,8,9}/VARIABLES=a b c d.
3920 SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
3921 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3923 SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
3924 SAVE {4,'xyzw',6}/STRINGS=a, b.
3927 AT_CHECK([pspp matrix.sps])
3928 AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
3934 AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
3939 AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
3946 AT_SETUP([MATRIX - SAVE - inline])
3947 AT_DATA([matrix.sps], [dnl
3949 SAVE {1,2,3; 4,5,6}/OUTFILE=*.
3950 SAVE {7,8,9}/VARIABLES=a b c d.
3955 SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
3956 SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
3961 SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
3962 SAVE {4,'xyzw',6}/STRINGS=a, b.
3966 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
3985 AT_SETUP([MATRIX - SAVE - negative])
3986 AT_DATA([matrix.sps], [dnl
3994 SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
3995 SAVE 1/OUTFILE='matrix2.sav'.
3996 SAVE {1,2}/OUTFILE='matrix2.sav'.
3997 SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
3998 SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
3999 SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
4002 AT_CHECK([pspp matrix.sps], [1], [dnl
4003 matrix.sps:2.6: error: SAVE: Syntax error.
4007 matrix.sps:3.16: error: SAVE: Syntax error expecting a file name or handle
4009 3 | SAVE 1/OUTFILE=!.
4012 matrix.sps:4.18: error: SAVE: Syntax error expecting variable name.
4013 4 | SAVE 1/VARIABLES=!.
4016 matrix.sps:5.14: error: SAVE: Syntax error.
4020 matrix.sps:6.8: error: SAVE: Syntax error expecting OUTFILE, VARIABLES, NAMES,
4025 matrix.sps:7.1-7.7: error: SAVE: Required subcommand OUTFILE was not specified.
4029 matrix.sps:8.35-8.39: warning: SAVE: Ignoring NAMES because VARIABLES was also
4031 8 | SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
4034 matrix.sps:10: error: MATRIX: Cannot save 1×2 matrix to `matrix2.sav' because
4035 the first SAVE to `matrix2.sav' in this matrix program wrote a 1-column matrix.
4037 matrix.sps:9: error: MATRIX: This is the location of the first SAVE to
4040 error: Duplicate variable name a in SAVE statement.
4042 error: The SAVE command STRINGS subcommand specifies an unknown variable a.
4044 error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
4049 AT_SETUP([MATRIX - MGET])
4050 AT_DATA([matrix.sps], [dnl
4052 VARIABLES=ROWTYPE_ var01 TO var08.
4054 MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4055 SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4056 N 92 92 92 92 92 92 92 92
4060 CORR .36 .31 -.14 1.00
4061 CORR .27 .16 -.12 .22 1.00
4062 CORR .33 .15 -.17 .24 .21 1.00
4063 CORR .50 .29 -.20 .32 .12 .38 1.00
4064 CORR .17 .29 -.05 .20 .27 .20 .04 1.00
4069 PRINT MN/FORMAT=F5.1.
4070 PRINT SD/FORMAT=F5.1.
4071 PRINT NC/FORMAT=F5.0.
4072 PRINT CR/FORMAT=F5.2.
4075 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4076 Table: Matrix Variables Created by MGET
4085 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
4088 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
4091 92 92 92 92 92 92 92 92
4094 1.00 .18 -.22 .36 .27 .33 .50 .17
4095 .18 1.00 -.17 .31 .16 .15 .29 .29
4096 -.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
4097 .36 .31 -.14 1.00 .22 .24 .32 .20
4098 .27 .16 -.12 .22 1.00 .21 .12 .27
4099 .33 .15 -.17 .24 .21 1.00 .38 .20
4100 .50 .29 -.20 .32 .12 .38 1.00 .04
4101 .17 .29 -.05 .20 .27 .20 .04 1.00
4105 AT_SETUP([MATRIX - MGET with split variables])
4106 AT_DATA([matrix.sps], [dnl
4108 variables = s1 s2 rowtype_ var01 var02 var03
4112 8 0 mean 21.4 5.0 72.9
4117 8 0 corr -.16 -.22 1
4118 8 1 mean 11.4 1.0 52.9
4128 PRINT MNS1/FORMAT=F5.1.
4129 PRINT SDS1/FORMAT=F5.1.
4130 PRINT NCS1/FORMAT=F5.0.
4131 PRINT CRS1/FORMAT=F5.2.
4132 PRINT MNS2/FORMAT=F5.1.
4133 PRINT SDS2/FORMAT=F5.1.
4134 PRINT NCS2/FORMAT=F5.0.
4135 PRINT CRS2/FORMAT=F5.2.
4138 AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
4139 Table: Matrix Variables Created by MGET
4140 ,Split Values,,Dimensions,
4181 AT_SETUP([MATRIX - MGET with factor variables])
4182 AT_DATA([matrix.sps], [dnl
4184 VARIABLES=ROWTYPE_ f1 var01 TO var04
4198 FORMATS var01 TO var04(F5.1).
4199 SAVE OUTFILE='matrix.sav'.
4201 AT_DATA([matrix2.sps], [dnl
4203 MGET FILE='matrix.sav'.
4204 PRINT MNF1/FORMAT=F2.0.
4205 PRINT SDF1/FORMAT=F2.0.
4206 PRINT NCF1/FORMAT=F2.0.
4207 PRINT MNF2/FORMAT=F2.0.
4208 PRINT SDF2/FORMAT=F2.0.
4209 PRINT NCF2/FORMAT=F2.0.
4210 PRINT CR/FORMAT=F3.1.
4213 AT_CHECK([pspp matrix.sps])
4214 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4215 Table: Matrix Variables Created by MGET
4216 ,Factors,Dimensions,
4252 AT_SETUP([MATRIX - MGET with factor and split variables])
4253 AT_DATA([matrix.sps], [dnl
4255 variables = s f rowtype_ var01 var02 var03
4260 8 0 mean 21.4 5.0 72.9
4265 8 . corr -.16 -.22 1
4266 9 1 mean 11.4 1.0 52.9
4276 PRINT MNF1S1/FORMAT=F5.1.
4277 PRINT SDF1S1/FORMAT=F5.1.
4278 PRINT NCF1S1/FORMAT=F5.0.
4279 PRINT CRS1/FORMAT=F5.2.
4280 PRINT MNF1S2/FORMAT=F5.1.
4281 PRINT SDF1S2/FORMAT=F5.1.
4282 PRINT NCF1S2/FORMAT=F5.0.
4283 PRINT CRS2/FORMAT=F5.2.
4286 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4287 Table: Matrix Variables Created by MGET
4288 ,Split Values,Factors,Dimensions,
4329 AT_SETUP([MATRIX - MGET with TYPE])
4330 AT_DATA([matrix.sps], [dnl
4332 VARIABLES=ROWTYPE_ f1 var01 TO var04
4346 FORMATS var01 TO var04(F5.1).
4347 SAVE OUTFILE='matrix.sav'.
4349 AT_DATA([matrix2.sps], [dnl
4351 MGET/FILE='matrix.sav'/TYPE=CORR.
4352 PRINT CR/FORMAT=F3.1.
4355 AT_CHECK([pspp matrix.sps])
4356 AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
4357 Table: Matrix Variables Created by MGET
4358 ,Factors,Dimensions,
4370 AT_SETUP([MATRIX - MGET - negative - parsing])
4371 AT_DATA([matrix.sps], [dnl
4380 AT_CHECK([pspp matrix.sps], [1], [dnl
4381 matrix.sps:2.6: error: MGET: Syntax error expecting FILE or TYPE.
4385 matrix.sps:3.11: error: MGET: Syntax error expecting a file name or handle
4390 matrix.sps:4.15: error: MGET: Syntax error expecting string.
4391 4 | MGET ENCODING=!.
4394 matrix.sps:5.11: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4399 matrix.sps:6.16: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
4401 6 | MGET TYPE=CORR !.
4406 AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
4407 AT_DATA([matrix.sps], [dnl
4408 DATA LIST LIST NOTABLE /x.
4417 AT_CHECK([pspp matrix.sps], [1], [dnl
4418 matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
4420 matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
4424 AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
4425 AT_DATA([matrix.sps], [dnl
4426 DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
4435 AT_CHECK([pspp matrix.sps], [1], [dnl
4436 matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
4437 byte string, but it has width 7.
4439 matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
4440 byte string, but it has width 0.
4444 AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
4445 AT_DATA([matrix.sps], [dnl
4446 DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
4455 AT_CHECK([pspp matrix.sps], [1], [dnl
4456 matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
4461 AT_SETUP([MATRIX - MGET - no continuous variables])
4462 AT_DATA([matrix.sps], [dnl
4463 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
4472 AT_CHECK([pspp matrix.sps], [1], [dnl
4473 matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
4477 AT_SETUP([MATRIX - MGET - unexpected string variables])
4478 AT_DATA([matrix.sps], [dnl
4479 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
4488 AT_CHECK([pspp matrix.sps], [1], [dnl
4489 matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
4494 AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
4495 AT_DATA([matrix.sps], [dnl
4496 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4505 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4506 "matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
4510 AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
4511 AT_DATA([matrix.sps], [dnl
4512 DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
4522 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4523 Table: Matrix Variables Created by MGET
4528 matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
4532 AT_SETUP([MATRIX - MGET - missing values in input])
4533 AT_DATA([matrix.sps], [dnl
4534 DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
4542 PRINT ncs1/FORMAT=F5.
4543 PRINT ncs2/FORMAT=F5.
4546 AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
4547 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
4549 "matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
4551 Table: Matrix Variables Created by MGET
4552 ,Split Values,Dimensions,
4565 AT_SETUP([MATRIX - MSAVE])
4566 AT_DATA([matrix.sps], [dnl
4568 MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
4569 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
4570 MSAVE {11, 12}/TYPE=MEAN.
4571 MSAVE {13, 14}/TYPE=STDDEV.
4572 MSAVE {15, 16}/TYPE=N.
4573 MSAVE {17, 18}/TYPE=COUNT.
4578 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4580 ROWTYPE_,VARNAME_,X,Y
4593 AT_SETUP([MATRIX - MSAVE with factor variables])
4594 AT_DATA([matrix.sps], [dnl
4596 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
4597 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4598 MSAVE {11, 12}/TYPE=MEAN.
4599 MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
4600 MSAVE {15, 16}/TYPE=N.
4601 MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
4607 MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
4612 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4614 ROWTYPE_,X,Y,VARNAME_,COL1,COL2
4615 CORR,1.00,1.00,COL1,1.00,2.00
4616 CORR,1.00,1.00,COL2,3.00,4.00
4617 COV,1.00,1.00,COL1,5.00,6.00
4618 COV,1.00,1.00,COL2,7.00,8.00
4619 COV,1.00,1.00,,9.00,10.00
4620 MEAN,1.00,1.00,,11.00,12.00
4621 STDDEV,2.00,1.00,,13.00,14.00
4622 N,2.00,1.00,,15.00,16.00
4623 COUNT,1.00,2.00,,17.00,18.00
4626 ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
4627 CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
4628 CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
4632 AT_SETUP([MATRIX - MSAVE with split variables])
4633 AT_DATA([matrix.sps], [dnl
4635 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
4636 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4637 MSAVE {11, 12}/TYPE=MEAN.
4638 MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
4639 MSAVE {15, 16}/TYPE=N.
4640 MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
4646 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
4651 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4653 X,Y,ROWTYPE_,VARNAME_,COL1,COL2
4654 1.00,1.00,CORR,COL1,1.00,2.00
4655 1.00,1.00,CORR,COL2,3.00,4.00
4656 1.00,1.00,COV,COL1,5.00,6.00
4657 1.00,1.00,COV,COL2,7.00,8.00
4658 1.00,1.00,COV,,9.00,10.00
4659 1.00,1.00,MEAN,,11.00,12.00
4660 2.00,1.00,STDDEV,,13.00,14.00
4661 2.00,1.00,N,,15.00,16.00
4662 1.00,2.00,COUNT,,17.00,18.00
4665 SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
4666 5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
4667 5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
4671 AT_SETUP([MATRIX - MSAVE with factor and split variables])
4672 AT_DATA([matrix.sps], [dnl
4674 MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
4675 MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
4676 MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
4677 MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
4678 MSAVE {15, 16}/TYPE=N.
4679 MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
4684 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4686 SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
4687 1.00,CORR,1.00,COL1,1.00,2.00
4688 1.00,CORR,1.00,COL2,3.00,4.00
4689 1.00,COV,1.00,COL1,5.00,6.00
4690 1.00,COV,1.00,COL2,7.00,8.00
4691 1.00,COV,1.00,,9.00,10.00
4692 1.00,MEAN,2.00,,11.00,12.00
4693 2.00,STDDEV,1.00,,13.00,14.00
4694 2.00,N,1.00,,15.00,16.00
4695 2.00,COUNT,2.00,,17.00,18.00
4699 AT_SETUP([MATRIX - MSAVE - negative])
4700 AT_DATA([matrix.sps], [dnl
4705 MSAVE 1/VARIABLES=!.
4712 MSAVE 1/TYPE=COV/FNAMES=x.
4713 MSAVE 1/TYPE=COV/SNAMES=x.
4716 MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4720 MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4721 MSAVE 1/TYPE=COV/VARIABLES=x.
4722 MSAVE 1/TYPE=COV/FNAMES=x.
4723 MSAVE 1/TYPE=COV/SNAMES=x.
4727 MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4728 MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
4729 MSAVE {1,2;3}/TYPE=COV.
4730 MSAVE 0/TYPE=COV/FACTOR={1,2}.
4731 MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4735 MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4739 MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
4743 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4747 MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4751 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4752 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4753 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4754 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4755 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4756 MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4759 AT_CHECK([pspp matrix.sps], [1], [dnl
4760 matrix.sps:2.7: error: MSAVE: Syntax error.
4764 matrix.sps:3.14: error: MSAVE: Syntax error expecting COV, CORR, MEAN, STDDEV,
4769 matrix.sps:4.17: error: MSAVE: Syntax error expecting a file name or handle
4771 4 | MSAVE 1/OUTFILE=!.
4774 matrix.sps:5.19: error: MSAVE: Syntax error expecting variable name.
4775 5 | MSAVE 1/VARIABLES=!.
4778 matrix.sps:6.16: error: MSAVE: Syntax error expecting variable name.
4779 6 | MSAVE 1/FNAMES=!.
4782 matrix.sps:7.16: error: MSAVE: Syntax error expecting variable name.
4783 7 | MSAVE 1/SNAMES=!.
4786 matrix.sps:8.15: error: MSAVE: Syntax error.
4787 8 | MSAVE 1/SPLIT=!.
4790 matrix.sps:9.16: error: MSAVE: Syntax error.
4791 9 | MSAVE 1/FACTOR=!.
4794 matrix.sps:10.9: error: MSAVE: Syntax error expecting TYPE, OUTFILE, VARIABLES,
4795 FNAMES, SNAMES, SPLIT, or FACTOR.
4799 matrix.sps:11.1-11.8: error: MSAVE: Required subcommand TYPE was not specified.
4803 matrix.sps:12.25: error: MSAVE: FNAMES requires FACTOR.
4804 12 | MSAVE 1/TYPE=COV/FNAMES=x.
4807 matrix.sps:13.25: error: MSAVE: SNAMES requires SPLIT.
4808 13 | MSAVE 1/TYPE=COV/SNAMES=x.
4811 matrix.sps:14.1-14.17: error: MSAVE: Required subcommand OUTFILE was not
4813 14 | MSAVE 1/TYPE=COV.
4816 matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
4817 within a single MATRIX command.
4819 matrix.sps:16.26-16.37: note: MSAVE: This is the OUTFILE on the first MSAVE
4821 16 | MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
4824 matrix.sps:20.26-20.38: note: MSAVE: This is the OUTFILE on a later MSAVE
4826 20 | MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
4829 matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables on each
4830 MSAVE within a given MATRIX.
4832 matrix.sps:19.16: error: MSAVE: This is the specification of VARIABLES on the
4837 matrix.sps:21.28: error: MSAVE: This is a different specification of VARIABLES
4839 21 | MSAVE 1/TYPE=COV/VARIABLES=x.
4842 matrix.sps:22: error: MSAVE: FNAMES must specify the same variables on each
4843 MSAVE within a given MATRIX.
4845 matrix.sps:17.23: error: MSAVE: This is the specification of FNAMES on the
4847 17 | /FACTOR=1 /FNAMES=y
4850 matrix.sps:22.25: error: MSAVE: This is a different specification of FNAMES on
4852 22 | MSAVE 1/TYPE=COV/FNAMES=x.
4855 matrix.sps:23: error: MSAVE: SNAMES must specify the same variables on each
4856 MSAVE within a given MATRIX.
4858 matrix.sps:18.22: error: MSAVE: This is the specification of SNAMES on the
4860 18 | /SPLIT=2 /SNAMES=z
4863 matrix.sps:23.25: error: MSAVE: This is a different specification of SNAMES on
4865 23 | MSAVE 1/TYPE=COV/SNAMES=x.
4868 matrix.sps:28.7-28.11: error: MATRIX: Matrix on MSAVE has 2 columns but there
4870 28 | MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/
4874 matrix.sps:29.7-29.13: error: MATRIX: This expression tries to vertically join
4875 matrices with differing numbers of columns.
4876 29 | MSAVE {1,2;3}/TYPE=COV.
4879 matrix.sps:29.8-29.10: note: MATRIX: This operand is a 1×2 matrix.
4880 29 | MSAVE {1,2;3}/TYPE=COV.
4883 matrix.sps:29.12: note: MATRIX: This operand is a 1×1 matrix.
4884 29 | MSAVE {1,2;3}/TYPE=COV.
4887 matrix.sps:30.25-30.29: error: MATRIX: There are 1 factor variables, but 2
4888 factor values were supplied.
4889 30 | MSAVE 0/TYPE=COV/FACTOR={1,2}.
4892 matrix.sps:31.33-31.37: error: MATRIX: There are 1 split variables, but 2 split
4893 values were supplied.
4894 31 | MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
4897 matrix.sps:35.49: error: MSAVE: Variable x appears twice in variable list.
4898 35 | MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
4901 matrix.sps:39.56: error: MATRIX: Duplicate or invalid FACTOR variable name x.
4902 39 | MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/
4906 matrix.sps:43.50: error: MATRIX: Duplicate or invalid variable name x.
4907 43 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
4910 matrix.sps:47.50: error: MATRIX: Duplicate or invalid variable name x.
4911 47 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
4914 matrix.sps:51.47-51.54: error: MSAVE: Variable name VARNAME_ is reserved.
4915 51 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
4918 matrix.sps:52.47-52.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4919 52 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
4922 matrix.sps:53.47-53.54: error: MSAVE: Variable name VARNAME_ is reserved.
4923 53 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
4926 matrix.sps:54.47-54.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
4927 54 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
4930 matrix.sps:55.50-55.57: error: MSAVE: Variable name VARNAME_ is reserved.
4931 55 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
4934 matrix.sps:56.50-56.57: error: MSAVE: Variable name ROWTYPE_ is reserved.
4935 56 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
4940 AT_SETUP([MATRIX - DISPLAY])
4941 AT_DATA([matrix-template.sps], [dnl
4950 for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
4951 sed "s/command/$command/" < matrix-template.sps > matrix.sps
4952 AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
4953 Table: Matrix Variables
4954 ,Dimension,,Size (kB)
4964 AT_SETUP([MATRIX - DISPLAY - negative])
4965 AT_DATA([matrix.sps], [dnl
4970 AT_CHECK([pspp matrix.sps], [1], [dnl
4971 matrix.sps:2.9: error: DISPLAY: Syntax error expecting DICTIONARY or STATUS.
4977 AT_SETUP([MATRIX - RELEASE])
4978 AT_DATA([matrix.sps], [dnl
4986 AT_CHECK([pspp matrix.sps], [1], [dnl
4990 matrix.sps:5.7: error: MATRIX: Uninitialized variable x used in expression.
4996 AT_SETUP([MATRIX - RELEASE - negative])
4997 AT_DATA([matrix.sps], [dnl
5010 AT_CHECK([pspp matrix.sps], [1], [dnl
5011 matrix.sps:2.9: error: RELEASE: Syntax error expecting end of command.
5015 matrix.sps:3.9: error: RELEASE: Syntax error expecting variable name.
5019 matrix.sps:5.12: error: RELEASE: Syntax error expecting end of command.
5023 matrix.sps:7.11: error: RELEASE: Syntax error expecting end of command.