+++ /dev/null
-AT_BANNER([MATRIX])
-
-AT_SETUP([MATRIX - empty matrices])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE a={}.
-PRINT a.
-COMPUTE b={a; 1; 2; 3}.
-PRINT b.
-COMPUTE c={a, 1, 2, 3}.
-PRINT c.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-a
-
-b
- 1
- 2
- 3
-
-c
- 1 2 3
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - submatrices as rvalues - all columns or all rows])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1}, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2}, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2, 3}, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1; 3; 2}, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 3, 3}, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:2, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(1:3, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}({}, :).
-
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1}).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2}).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2, 3}).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1; 3; 2}).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 3, 3}).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:2).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:3).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {}).
-
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, :).
-
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(0, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 0).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(4, :).
-PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 4).
-
-PRINT {}(:,{}).
-PRINT {}({},:).
-PRINT {}({},{}).
-
-PRINT {1, 2, 3, 4}({1, 2; 3, 4}, :).
-PRINT {1, 2, 3, 4}(:, {1, 2; 3, 4}).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(1, :)
- 1 2 3
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}({1}, :)
- 1 2 3
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2}, :)
- 1 2 3
- 4 5 6
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 2, 3}, :)
- 1 2 3
- 4 5 6
- 7 8 9
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}({1; 3; 2}, :)
- 1 2 3
- 7 8 9
- 4 5 6
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}({1, 3, 3}, :)
- 1 2 3
- 7 8 9
- 7 8 9
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(1:2, :)
- 1 2 3
- 4 5 6
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(1:3, :)
- 1 2 3
- 4 5 6
- 7 8 9
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}({}, :)
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1)
- 1
- 4
- 7
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1})
- 1
- 4
- 7
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2})
- 1 2
- 4 5
- 7 8
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 2, 3})
- 1 2 3
- 4 5 6
- 7 8 9
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1; 3; 2})
- 1 3 2
- 4 6 5
- 7 9 8
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {1, 3, 3})
- 1 3 3
- 4 6 6
- 7 9 9
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:2)
- 1 2
- 4 5
- 7 8
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 1:3)
- 1 2 3
- 4 5 6
- 7 8 9
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, {})
-
-
-
-{1, 2, 3; 4, 5, 6; 7, 8, 9}(:, :)
- 1 2 3
- 4 5 6
- 7 8 9
-
-matrix.sps:24.35: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
- 24 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(0, :).
- | ^
-
-matrix.sps:25.38: error: MATRIX: 0 is not a valid column index for a 3×3
-matrix.
- 25 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 0).
- | ^
-
-matrix.sps:26.35: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
- 26 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(4, :).
- | ^
-
-matrix.sps:27.38: error: MATRIX: 4 is not a valid column index for a 3×3
-matrix.
- 27 | PRINT {1, 2, 3; 4, 5, 6; 7, 8, 9}(:, 4).
- | ^
-
-{}(:,{})
-
-{}({},:)
-
-{}({},{})
-
-matrix.sps:33.20-33.31: error: MATRIX: Matrix row index must be scalar or
-vector, not a 2×2 matrix.
- 33 | PRINT {1, 2, 3, 4}({1, 2; 3, 4}, :).
- | ^~~~~~~~~~~~
-
-matrix.sps:34.23-34.34: error: MATRIX: Matrix column index must be scalar or
-vector, not a 2×2 matrix.
- 34 | PRINT {1, 2, 3, 4}(:, {1, 2; 3, 4}).
- | ^~~~~~~~~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - COMPUTE submatrices as lvalues])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE y={1, 2, 3; 4, 5, 6; 7, 8, 9}.
-
-COMPUTE x1=y.
-COMPUTE x1(1, :) = {11, 12, 13}.
-PRINT x1.
-
-COMPUTE x2=y.
-COMPUTE x2(2, :) = {14, 15, 16}.
-PRINT x2.
-
-COMPUTE x3=y.
-COMPUTE x3(3, :) = {17, 18, 19}.
-PRINT x3.
-
-COMPUTE x4=y.
-COMPUTE x4(:, 1) = {11; 14; 17}.
-PRINT x4.
-
-COMPUTE x5=y.
-COMPUTE x5(:, 2) = {12; 15; 18}.
-PRINT x5.
-
-COMPUTE x6=y.
-COMPUTE x6(:, 3) = {13; 16; 19}.
-PRINT x6.
-
-COMPUTE x7=y.
-COMPUTE x7(1, 1) = 11.
-PRINT x7.
-
-COMPUTE x8=y.
-COMPUTE x8(1:2, 2:3) = {12, 13; 15, 16}.
-PRINT x8.
-
-COMPUTE x9=y.
-COMPUTE x9({3, 1}, {2; 3}) = {18, 19; 12, 13}.
-PRINT x9.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-x1
- 11 12 13
- 4 5 6
- 7 8 9
-
-x2
- 1 2 3
- 14 15 16
- 7 8 9
-
-x3
- 1 2 3
- 4 5 6
- 17 18 19
-
-x4
- 11 2 3
- 14 5 6
- 17 8 9
-
-x5
- 1 12 3
- 4 15 6
- 7 18 9
-
-x6
- 1 2 13
- 4 5 16
- 7 8 19
-
-x7
- 11 2 3
- 4 5 6
- 7 8 9
-
-x8
- 1 12 13
- 4 15 16
- 7 8 9
-
-x9
- 1 12 13
- 4 5 6
- 7 18 19
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - COMPUTE submatrices as lvalues - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
-COMPUTE x(1, :) = {}.
-COMPUTE x(1, :) = 15.
-COMPUTE x(1, :) = {11, 12}.
-COMPUTE x(1, :) = {11, 12, 13, 14}.
-COMPUTE x(:, 1) = {}.
-COMPUTE x(:, 1) = 15.
-COMPUTE x(:, 1) = {11, 12}.
-COMPUTE x(:, 1) = {11, 12, 13, 14}.
-COMPUTE x(:) = 1.
-COMPUTE x(0, 1) = 1.
-COMPUTE x(1, 0) = 1.
-COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
-COMPUTE x(4, 3) = 1.
-COMPUTE x(3, 4) = 1.
-COMPUTE x({1, 2; 3, 4}, 5) = 1.
-COMPUTE x(3, {1, 2; 3, 4}) = 1.
-PRINT x.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:3.9-3.15: error: MATRIX: Numbers of indexes for assigning to x
-differ from the size of the source matrix.
- 3 | COMPUTE x(1, :) = {}.
- | ^~~~~~~
-
-matrix.sps:3.11: note: MATRIX: There is 1 row index.
- 3 | COMPUTE x(1, :) = {}.
- | ^
-
-matrix.sps:3.14: note: MATRIX: Destination matrix x has 3 columns.
- 3 | COMPUTE x(1, :) = {}.
- | ^
-
-matrix.sps:3.19-3.20: note: MATRIX: The source matrix is 0×0.
- 3 | COMPUTE x(1, :) = {}.
- | ^~
-
-matrix.sps:4.9-4.15: error: MATRIX: Number of column indexes for assigning to x
-differs from number of columns in source matrix.
- 4 | COMPUTE x(1, :) = 15.
- | ^~~~~~~
-
-matrix.sps:4.14: note: MATRIX: Destination matrix x has 3 columns.
- 4 | COMPUTE x(1, :) = 15.
- | ^
-
-matrix.sps:4.19-4.20: note: MATRIX: The source matrix is 1×1.
- 4 | COMPUTE x(1, :) = 15.
- | ^~
-
-matrix.sps:5.9-5.15: error: MATRIX: Number of column indexes for assigning to x
-differs from number of columns in source matrix.
- 5 | COMPUTE x(1, :) = {11, 12}.
- | ^~~~~~~
-
-matrix.sps:5.14: note: MATRIX: Destination matrix x has 3 columns.
- 5 | COMPUTE x(1, :) = {11, 12}.
- | ^
-
-matrix.sps:5.19-5.26: note: MATRIX: The source matrix is 1×2.
- 5 | COMPUTE x(1, :) = {11, 12}.
- | ^~~~~~~~
-
-matrix.sps:6.9-6.15: error: MATRIX: Number of column indexes for assigning to x
-differs from number of columns in source matrix.
- 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
- | ^~~~~~~
-
-matrix.sps:6.14: note: MATRIX: Destination matrix x has 3 columns.
- 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
- | ^
-
-matrix.sps:6.19-6.34: note: MATRIX: The source matrix is 1×4.
- 6 | COMPUTE x(1, :) = {11, 12, 13, 14}.
- | ^~~~~~~~~~~~~~~~
-
-matrix.sps:7.9-7.15: error: MATRIX: Numbers of indexes for assigning to x
-differ from the size of the source matrix.
- 7 | COMPUTE x(:, 1) = {}.
- | ^~~~~~~
-
-matrix.sps:7.11: note: MATRIX: Destination matrix x has 3 rows.
- 7 | COMPUTE x(:, 1) = {}.
- | ^
-
-matrix.sps:7.14: note: MATRIX: There is 1 column index.
- 7 | COMPUTE x(:, 1) = {}.
- | ^
-
-matrix.sps:7.19-7.20: note: MATRIX: The source matrix is 0×0.
- 7 | COMPUTE x(:, 1) = {}.
- | ^~
-
-matrix.sps:8.9-8.15: error: MATRIX: Number of row indexes for assigning to x
-differs from number of rows in source matrix.
- 8 | COMPUTE x(:, 1) = 15.
- | ^~~~~~~
-
-matrix.sps:8.11: note: MATRIX: Destination matrix x has 3 rows.
- 8 | COMPUTE x(:, 1) = 15.
- | ^
-
-matrix.sps:8.19-8.20: note: MATRIX: The source matrix is 1×1.
- 8 | COMPUTE x(:, 1) = 15.
- | ^~
-
-matrix.sps:9.9-9.15: error: MATRIX: Numbers of indexes for assigning to x
-differ from the size of the source matrix.
- 9 | COMPUTE x(:, 1) = {11, 12}.
- | ^~~~~~~
-
-matrix.sps:9.11: note: MATRIX: Destination matrix x has 3 rows.
- 9 | COMPUTE x(:, 1) = {11, 12}.
- | ^
-
-matrix.sps:9.14: note: MATRIX: There is 1 column index.
- 9 | COMPUTE x(:, 1) = {11, 12}.
- | ^
-
-matrix.sps:9.19-9.26: note: MATRIX: The source matrix is 1×2.
- 9 | COMPUTE x(:, 1) = {11, 12}.
- | ^~~~~~~~
-
-matrix.sps:10.9-10.15: error: MATRIX: Numbers of indexes for assigning to x
-differ from the size of the source matrix.
- 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
- | ^~~~~~~
-
-matrix.sps:10.11: note: MATRIX: Destination matrix x has 3 rows.
- 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
- | ^
-
-matrix.sps:10.14: note: MATRIX: There is 1 column index.
- 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
- | ^
-
-matrix.sps:10.19-10.34: note: MATRIX: The source matrix is 1×4.
- 10 | COMPUTE x(:, 1) = {11, 12, 13, 14}.
- | ^~~~~~~~~~~~~~~~
-
-matrix.sps:11.9-11.12: error: MATRIX: Can't use vector indexing on 3×3 matrix
-x.
- 11 | COMPUTE x(:) = 1.
- | ^~~~
-
-matrix.sps:12.11: error: MATRIX: 0 is not a valid row index for a 3×3 matrix.
- 12 | COMPUTE x(0, 1) = 1.
- | ^
-
-matrix.sps:13.14: error: MATRIX: 0 is not a valid column index for a 3×3
-matrix.
- 13 | COMPUTE x(1, 0) = 1.
- | ^
-
-matrix.sps:14.11-14.19: error: MATRIX: 0 is not a valid row index for a 3×3
-matrix.
- 14 | COMPUTE x({1, 0, 2}, 1) = {1; 2; 3}.
- | ^~~~~~~~~
-
-matrix.sps:15.11: error: MATRIX: 4 is not a valid row index for a 3×3 matrix.
- 15 | COMPUTE x(4, 3) = 1.
- | ^
-
-matrix.sps:16.14: error: MATRIX: 4 is not a valid column index for a 3×3
-matrix.
- 16 | COMPUTE x(3, 4) = 1.
- | ^
-
-matrix.sps:17.11-17.22: error: MATRIX: Matrix row index must be scalar or
-vector, not a 2×2 matrix.
- 17 | COMPUTE x({1, 2; 3, 4}, 5) = 1.
- | ^~~~~~~~~~~~
-
-matrix.sps:18.14-18.25: error: MATRIX: Matrix column index must be scalar or
-vector, not a 2×2 matrix.
- 18 | COMPUTE x(3, {1, 2; 3, 4}) = 1.
- | ^~~~~~~~~~~~
-
-x
- 1 2 3
- 4 5 6
- 7 8 9
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - subvectors as rvalues])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT {10, 20, 30}({}).
-PRINT {10, 20, 30}(2).
-PRINT {10, 20, 30}({2}).
-PRINT {10, 20, 30}({1,3}).
-PRINT {10, 20, 30}({2,3}).
-PRINT {10, 20, 30}({1;3}).
-PRINT {10, 20, 30}({2;3}).
-PRINT {10, 20, 30}(2:3).
-PRINT {10, 20, 30}(:).
-
-PRINT {10; 20; 30}({}).
-PRINT {10; 20; 30}(2).
-PRINT {10; 20; 30}({2}).
-PRINT {10; 20; 30}({1,3}).
-PRINT {10; 20; 30}({2,3}).
-PRINT {10; 20; 30}({1;3}).
-PRINT {10; 20; 30}({2;3}).
-PRINT {10; 20; 30}(2:3).
-PRINT {10; 20; 30}(:).
-
-PRINT {}({}).
-
-PRINT {1, 2; 3, 4}(:).
-PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
-PRINT {1, 2, 3, 4}(0).
-PRINT {1, 2, 3, 4}(5).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-{10, 20, 30}({})
-
-{10, 20, 30}(2)
- 20
-
-{10, 20, 30}({2})
- 20
-
-{10, 20, 30}({1,3})
- 10 30
-
-{10, 20, 30}({2,3})
- 20 30
-
-{10, 20, 30}({1;3})
- 10 30
-
-{10, 20, 30}({2;3})
- 20 30
-
-{10, 20, 30}(2:3)
- 20 30
-
-{10, 20, 30}(:)
- 10 20 30
-
-{10; 20; 30}({})
-
-{10; 20; 30}(2)
- 20
-
-{10; 20; 30}({2})
- 20
-
-{10; 20; 30}({1,3})
- 10
- 30
-
-{10; 20; 30}({2,3})
- 20
- 30
-
-{10; 20; 30}({1;3})
- 10
- 30
-
-{10; 20; 30}({2;3})
- 20
- 30
-
-{10; 20; 30}(2:3)
- 20
- 30
-
-{10; 20; 30}(:)
- 10
- 20
- 30
-
-{}({})
-
-matrix.sps:24.7-24.18: error: MATRIX: Vector index operator may not be applied
-to a 2×2 matrix.
- 24 | PRINT {1, 2; 3, 4}(:).
- | ^~~~~~~~~~~~
-
-matrix.sps:25.20-25.31: error: MATRIX: Vector index must be scalar or vector,
-not a 2×2 matrix.
- 25 | PRINT {1, 2, 3, 4}({1, 2; 3, 4}).
- | ^~~~~~~~~~~~
-
-matrix.sps:26.20: error: MATRIX: Index 0 is out of range for vector with 4
-elements.
- 26 | PRINT {1, 2, 3, 4}(0).
- | ^
-
-matrix.sps:27.20: error: MATRIX: Index 5 is out of range for vector with 4
-elements.
- 27 | PRINT {1, 2, 3, 4}(5).
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - COMPUTE subvectors as lvalues])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
-
-COMPUTE r1=r.
-COMPUTE r1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
-PRINT r1.
-
-COMPUTE r2=r.
-COMPUTE r2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
-PRINT r2.
-
-COMPUTE r3=r.
-COMPUTE r3(1) = 11.
-PRINT r3.
-
-COMPUTE r4=r.
-COMPUTE r4(1:2) = {11:12}.
-PRINT r4.
-
-COMPUTE r5=r.
-COMPUTE r5({8;9}) = {18:19}.
-PRINT r5.
-
-COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
-
-COMPUTE c1=c.
-COMPUTE c1(:) = {11, 12, 13, 14, 15, 16, 17, 18, 19}.
-PRINT c1.
-
-COMPUTE c2=c.
-COMPUTE c2(:) = {11; 12; 13; 14; 15; 16; 17; 18; 19}.
-PRINT c2.
-
-COMPUTE c3=c.
-COMPUTE c3(1) = 11.
-PRINT c3.
-
-COMPUTE c4=c.
-COMPUTE c4(1:2) = {11:12}.
-PRINT c4.
-
-COMPUTE c5=c.
-COMPUTE c5(8:9) = {18:19}.
-PRINT c5.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-r1
- 11 12 13 14 15 16 17 18 19
-
-r2
- 11 12 13 14 15 16 17 18 19
-
-r3
- 11 2 3 4 5 6 7 8 9
-
-r4
- 11 12 3 4 5 6 7 8 9
-
-r5
- 1 2 3 4 5 6 7 18 19
-
-c1
- 11 12 13 14 15 16 17 18 19
-
-c2
- 11 12 13 14 15 16 17 18 19
-
-c3
- 11 2 3 4 5 6 7 8 9
-
-c4
- 11 12 3 4 5 6 7 8 9
-
-c5
- 1 2 3 4 5 6 7 18 19
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - COMPUTE subvectors as lvalues - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE r={1, 2, 3, 4, 5, 6, 7, 8, 9}.
-COMPUTE r(1:3) = {1, 2; 3, 4}.
-COMPUTE r(1:3) = {}.
-COMPUTE r(1:3) = {1}.
-COMPUTE r(1:3) = {1, 2}.
-COMPUTE r(1:3) = {1, 2, 3, 4}.
-COMPUTE r(1:3) = {}.
-COMPUTE r(1:3) = {1}.
-COMPUTE r(1:3) = {1; 2}.
-COMPUTE r(1:3) = {1; 2; 3; 4}.
-COMPUTE r(:) = {1; 2; 3; 4}.
-COMPUTE r(0) = 5.
-COMPUTE r(10) = 5.
-COMPUTE r({1, 2; 3, 4}) = 1.
-
-COMPUTE c={1, 2, 3, 4, 5, 6, 7, 8, 9}.
-COMPUTE c(1:3) = {1, 2; 3, 4}.
-COMPUTE c(1:3) = {}.
-COMPUTE c(1:3) = {1}.
-COMPUTE c(1:3) = {1, 2}.
-COMPUTE c(1:3) = {1, 2, 3, 4}.
-COMPUTE c(1:3) = {}.
-COMPUTE c(1:3) = {1}.
-COMPUTE c(1:3) = {1; 2}.
-COMPUTE c(1:3) = {1; 2; 3; 4}.
-COMPUTE c(:) = {1; 2; 3; 4}.
-COMPUTE c(0) = 5.
-COMPUTE c(10) = 5.
-COMPUTE c({1, 2; 3, 4}) = 1.
-
-COMPUTE m = {1, 2; 3, 4}.
-COMPUTE m(5) = 1.
-COMPUTE m(:) = 1.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:3.9-3.14: error: MATRIX: Only an 3-element vector may be assigned to
-this 3-element subvector of r.
- 3 | COMPUTE r(1:3) = {1, 2; 3, 4}.
- | ^~~~~~
-
-matrix.sps:3.18-3.29: error: MATRIX: The source is an 2×2 matrix.
- 3 | COMPUTE r(1:3) = {1, 2; 3, 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:4.9-4.14: error: MATRIX: Only an 3-element vector may be assigned to
-this 3-element subvector of r.
- 4 | COMPUTE r(1:3) = {}.
- | ^~~~~~
-
-matrix.sps:4.18-4.19: error: MATRIX: The source vector has 0 elements.
- 4 | COMPUTE r(1:3) = {}.
- | ^~
-
-matrix.sps:5.9-5.14: error: MATRIX: Only an 3-element vector may be assigned to
-this 3-element subvector of r.
- 5 | COMPUTE r(1:3) = {1}.
- | ^~~~~~
-
-matrix.sps:5.19: error: MATRIX: The source vector has 1 element.
- 5 | COMPUTE r(1:3) = {1}.
- | ^
-
-matrix.sps:6.9-6.14: error: MATRIX: Only an 3-element vector may be assigned to
-this 3-element subvector of r.
- 6 | COMPUTE r(1:3) = {1, 2}.
- | ^~~~~~
-
-matrix.sps:6.18-6.23: error: MATRIX: The source vector has 2 elements.
- 6 | COMPUTE r(1:3) = {1, 2}.
- | ^~~~~~
-
-matrix.sps:7.9-7.14: error: MATRIX: Only an 3-element vector may be assigned to
-this 3-element subvector of r.
- 7 | COMPUTE r(1:3) = {1, 2, 3, 4}.
- | ^~~~~~
-
-matrix.sps:7.18-7.29: error: MATRIX: The source vector has 4 elements.
- 7 | COMPUTE r(1:3) = {1, 2, 3, 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:8.9-8.14: error: MATRIX: Only an 3-element vector may be assigned to
-this 3-element subvector of r.
- 8 | COMPUTE r(1:3) = {}.
- | ^~~~~~
-
-matrix.sps:8.18-8.19: error: MATRIX: The source vector has 0 elements.
- 8 | COMPUTE r(1:3) = {}.
- | ^~
-
-matrix.sps:9.9-9.14: error: MATRIX: Only an 3-element vector may be assigned to
-this 3-element subvector of r.
- 9 | COMPUTE r(1:3) = {1}.
- | ^~~~~~
-
-matrix.sps:9.19: error: MATRIX: The source vector has 1 element.
- 9 | COMPUTE r(1:3) = {1}.
- | ^
-
-matrix.sps:10.9-10.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of r.
- 10 | COMPUTE r(1:3) = {1; 2}.
- | ^~~~~~
-
-matrix.sps:10.18-10.23: error: MATRIX: The source vector has 2 elements.
- 10 | COMPUTE r(1:3) = {1; 2}.
- | ^~~~~~
-
-matrix.sps:11.9-11.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of r.
- 11 | COMPUTE r(1:3) = {1; 2; 3; 4}.
- | ^~~~~~
-
-matrix.sps:11.18-11.29: error: MATRIX: The source vector has 4 elements.
- 11 | COMPUTE r(1:3) = {1; 2; 3; 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:12.9-12.12: error: MATRIX: Only an 9-element vector may be assigned
-to this 9-element subvector of r.
- 12 | COMPUTE r(:) = {1; 2; 3; 4}.
- | ^~~~
-
-matrix.sps:12.16-12.27: error: MATRIX: The source vector has 4 elements.
- 12 | COMPUTE r(:) = {1; 2; 3; 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:13.11: error: MATRIX: Index 0 is out of range for vector with 9
-elements.
- 13 | COMPUTE r(0) = 5.
- | ^
-
-matrix.sps:14.11-14.12: error: MATRIX: Index 10 is out of range for vector with
-9 elements.
- 14 | COMPUTE r(10) = 5.
- | ^~
-
-matrix.sps:15.11-15.22: error: MATRIX: Vector index must be scalar or vector,
-not a 2×2 matrix.
- 15 | COMPUTE r({1, 2; 3, 4}) = 1.
- | ^~~~~~~~~~~~
-
-matrix.sps:18.9-18.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 18 | COMPUTE c(1:3) = {1, 2; 3, 4}.
- | ^~~~~~
-
-matrix.sps:18.18-18.29: error: MATRIX: The source is an 2×2 matrix.
- 18 | COMPUTE c(1:3) = {1, 2; 3, 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:19.9-19.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 19 | COMPUTE c(1:3) = {}.
- | ^~~~~~
-
-matrix.sps:19.18-19.19: error: MATRIX: The source vector has 0 elements.
- 19 | COMPUTE c(1:3) = {}.
- | ^~
-
-matrix.sps:20.9-20.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 20 | COMPUTE c(1:3) = {1}.
- | ^~~~~~
-
-matrix.sps:20.19: error: MATRIX: The source vector has 1 element.
- 20 | COMPUTE c(1:3) = {1}.
- | ^
-
-matrix.sps:21.9-21.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 21 | COMPUTE c(1:3) = {1, 2}.
- | ^~~~~~
-
-matrix.sps:21.18-21.23: error: MATRIX: The source vector has 2 elements.
- 21 | COMPUTE c(1:3) = {1, 2}.
- | ^~~~~~
-
-matrix.sps:22.9-22.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 22 | COMPUTE c(1:3) = {1, 2, 3, 4}.
- | ^~~~~~
-
-matrix.sps:22.18-22.29: error: MATRIX: The source vector has 4 elements.
- 22 | COMPUTE c(1:3) = {1, 2, 3, 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:23.9-23.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 23 | COMPUTE c(1:3) = {}.
- | ^~~~~~
-
-matrix.sps:23.18-23.19: error: MATRIX: The source vector has 0 elements.
- 23 | COMPUTE c(1:3) = {}.
- | ^~
-
-matrix.sps:24.9-24.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 24 | COMPUTE c(1:3) = {1}.
- | ^~~~~~
-
-matrix.sps:24.19: error: MATRIX: The source vector has 1 element.
- 24 | COMPUTE c(1:3) = {1}.
- | ^
-
-matrix.sps:25.9-25.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 25 | COMPUTE c(1:3) = {1; 2}.
- | ^~~~~~
-
-matrix.sps:25.18-25.23: error: MATRIX: The source vector has 2 elements.
- 25 | COMPUTE c(1:3) = {1; 2}.
- | ^~~~~~
-
-matrix.sps:26.9-26.14: error: MATRIX: Only an 3-element vector may be assigned
-to this 3-element subvector of c.
- 26 | COMPUTE c(1:3) = {1; 2; 3; 4}.
- | ^~~~~~
-
-matrix.sps:26.18-26.29: error: MATRIX: The source vector has 4 elements.
- 26 | COMPUTE c(1:3) = {1; 2; 3; 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:27.9-27.12: error: MATRIX: Only an 9-element vector may be assigned
-to this 9-element subvector of c.
- 27 | COMPUTE c(:) = {1; 2; 3; 4}.
- | ^~~~
-
-matrix.sps:27.16-27.27: error: MATRIX: The source vector has 4 elements.
- 27 | COMPUTE c(:) = {1; 2; 3; 4}.
- | ^~~~~~~~~~~~
-
-matrix.sps:28.11: error: MATRIX: Index 0 is out of range for vector with 9
-elements.
- 28 | COMPUTE c(0) = 5.
- | ^
-
-matrix.sps:29.11-29.12: error: MATRIX: Index 10 is out of range for vector with
-9 elements.
- 29 | COMPUTE c(10) = 5.
- | ^~
-
-matrix.sps:30.11-30.22: error: MATRIX: Vector index must be scalar or vector,
-not a 2×2 matrix.
- 30 | COMPUTE c({1, 2; 3, 4}) = 1.
- | ^~~~~~~~~~~~
-
-matrix.sps:33.9-33.12: error: MATRIX: Can't use vector indexing on 2×2 matrix
-m.
- 33 | COMPUTE m(5) = 1.
- | ^~~~
-
-matrix.sps:34.9-34.12: error: MATRIX: Can't use vector indexing on 2×2 matrix
-m.
- 34 | COMPUTE m(:) = 1.
- | ^~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - COMPUTE - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE x.
-COMPUTE x=.
-COMPUTE x(5)=1.
-COMPUTE y(5)=1.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.10: error: COMPUTE: Syntax error expecting `='.
- 2 | COMPUTE x.
- | ^
-
-matrix.sps:3.11: error: COMPUTE: Syntax error expecting matrix expression.
- 3 | COMPUTE x=.
- | ^
-
-matrix.sps:4.9: error: MATRIX: Undefined variable x.
- 4 | COMPUTE x(5)=1.
- | ^
-
-matrix.sps:5.9: error: COMPUTE: Undefined variable y.
- 5 | COMPUTE y(5)=1.
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - elementwise arithmetic operators])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT (-(5)).
-PRINT (-{1,2;3,4}).
-
-PRINT ({1,2;3,4} + {5,6;7,8}).
-PRINT ({1,2;3,4} + 5).
-PRINT (5 + {5,6;7,8}).
-PRINT ({1,2;3,4} + {5,6}).
-
-PRINT ({1,2;3,4} - {5,6;7,8}).
-PRINT ({1,2;3,4} - 5).
-PRINT (5 - {5,6;7,8}).
-PRINT ({1,2;3,4} - {5,6}).
-
-PRINT ({1,2;3,4} * 5).
-PRINT (5 * {5,6;7,8}).
-
-PRINT ({2,4;6,8} / 2).
-PRINT (12 / {1,2;3,4}).
-PRINT ({2,8;18,32} / {1,2;3,4}).
-
-PRINT ({1,2;3,4} &* {5,6;7,8}).
-PRINT ({1,2;3,4} &* 5).
-PRINT (5 &* {5,6;7,8}).
-PRINT ({1,2;3,4} &* {5,6}).
-
-PRINT ({2,4;6,8} &/ 2).
-PRINT (12 &/ {1,2;3,4}).
-PRINT ({2,8;18,32} &/ {1,2;3,4}).
-
-PRINT ({1,2;3,4} &** 2).
-PRINT (2 &** {1,2;3,4}).
-PRINT ({1,2;3,4} &** {2,3;4,5}).
-PRINT ({1,2;3,4} &** {5,6}).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-(-(5))
- -5
-
-(-{1,2;3,4})
- -1 -2
- -3 -4
-
-({1,2;3,4} + {5,6;7,8})
- 6 8
- 10 12
-
-({1,2;3,4} + 5)
- 6 7
- 8 9
-
-(5 + {5,6;7,8})
- 10 11
- 12 13
-
-matrix.sps:8.8-8.24: error: MATRIX: The operands of + must have the same
-dimensions or one must be a scalar.
- 8 | PRINT ({1,2;3,4} + {5,6}).
- | ^~~~~~~~~~~~~~~~~
-
-matrix.sps:8.8-8.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
- 8 | PRINT ({1,2;3,4} + {5,6}).
- | ^~~~~~~~~
-
-matrix.sps:8.20-8.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
- 8 | PRINT ({1,2;3,4} + {5,6}).
- | ^~~~~
-
-({1,2;3,4} - {5,6;7,8})
- -4 -4
- -4 -4
-
-({1,2;3,4} - 5)
- -4 -3
- -2 -1
-
-(5 - {5,6;7,8})
- 0 -1
- -2 -3
-
-matrix.sps:13.8-13.24: error: MATRIX: The operands of - must have the same
-dimensions or one must be a scalar.
- 13 | PRINT ({1,2;3,4} - {5,6}).
- | ^~~~~~~~~~~~~~~~~
-
-matrix.sps:13.8-13.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
- 13 | PRINT ({1,2;3,4} - {5,6}).
- | ^~~~~~~~~
-
-matrix.sps:13.20-13.24: note: MATRIX: The right-hand operand is a 1×2 matrix.
- 13 | PRINT ({1,2;3,4} - {5,6}).
- | ^~~~~
-
-({1,2;3,4} * 5)
- 5 10
- 15 20
-
-(5 * {5,6;7,8})
- 25 30
- 35 40
-
-({2,4;6,8} / 2)
- 1 2
- 3 4
-
-(12 / {1,2;3,4})
- 12 6
- 4 3
-
-({2,8;18,32} / {1,2;3,4})
- 2 4
- 6 8
-
-({1,2;3,4} &* {5,6;7,8})
- 5 12
- 21 32
-
-({1,2;3,4} &* 5)
- 5 10
- 15 20
-
-(5 &* {5,6;7,8})
- 25 30
- 35 40
-
-matrix.sps:25.8-25.25: error: MATRIX: The operands of &* must have the same
-dimensions or one must be a scalar.
- 25 | PRINT ({1,2;3,4} &* {5,6}).
- | ^~~~~~~~~~~~~~~~~~
-
-matrix.sps:25.8-25.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
- 25 | PRINT ({1,2;3,4} &* {5,6}).
- | ^~~~~~~~~
-
-matrix.sps:25.21-25.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
- 25 | PRINT ({1,2;3,4} &* {5,6}).
- | ^~~~~
-
-({2,4;6,8} &/ 2)
- 1 2
- 3 4
-
-(12 &/ {1,2;3,4})
- 12 6
- 4 3
-
-({2,8;18,32} &/ {1,2;3,4})
- 2 4
- 6 8
-
-({1,2;3,4} &** 2)
- 1 4
- 9 16
-
-(2 &** {1,2;3,4})
- 2 4
- 8 16
-
-({1,2;3,4} &** {2,3;4,5})
- 1 8
- 81 1024
-
-matrix.sps:34.8-34.26: error: MATRIX: The operands of &** must have the same
-dimensions or one must be a scalar.
- 34 | PRINT ({1,2;3,4} &** {5,6}).
- | ^~~~~~~~~~~~~~~~~~~
-
-matrix.sps:34.8-34.16: note: MATRIX: The left-hand operand is a 2×2 matrix.
- 34 | PRINT ({1,2;3,4} &** {5,6}).
- | ^~~~~~~~~
-
-matrix.sps:34.22-34.26: note: MATRIX: The right-hand operand is a 1×2 matrix.
- 34 | PRINT ({1,2;3,4} &** {5,6}).
- | ^~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - relational operators])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT ({1, 1; 2, 2} > {1, 2; 1, 2}).
-PRINT ({1, 1; 2, 2} > 1).
-PRINT (2 > {1, 2; 1, 2}).
-PRINT ({1, 2} > {1; 2}).
-
-PRINT ({1, 1; 2, 2} < {1, 2; 1, 2}).
-PRINT ({1, 1; 2, 2} < 2).
-PRINT (1 < {1, 2; 1, 2}).
-PRINT ({1, 2} < {1; 2}).
-
-PRINT ({1, 1; 2, 2} <> {1, 2; 1, 2}).
-PRINT ({1, 1; 2, 2} <> 2).
-PRINT (1 <> {1, 2; 1, 2}).
-PRINT ({1, 2} <> {1; 2}).
-
-PRINT ({1, 1; 2, 2} >= {1, 2; 1, 2}).
-PRINT ({1, 1; 2, 2} >= 2).
-PRINT (1 >= {1, 2; 1, 2}).
-PRINT ({1, 2} >= {1; 2}).
-
-PRINT ({1, 1; 2, 2} <= {1, 2; 1, 2}).
-PRINT ({1, 1; 2, 2} <= 2).
-PRINT (1 <= {1, 2; 1, 2}).
-PRINT ({1, 2} <= {1; 2}).
-
-PRINT ({1, 1; 2, 2} = {1, 2; 1, 2}).
-PRINT ({1, 1; 2, 2} = 2).
-PRINT (1 = {1, 2; 1, 2}).
-PRINT ({1, 2} = {1; 2}).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-({1, 1; 2, 2} > {1, 2; 1, 2})
- 0 0
- 1 0
-
-({1, 1; 2, 2} > 1)
- 0 0
- 1 1
-
-(2 > {1, 2; 1, 2})
- 1 0
- 1 0
-
-matrix.sps:5.8-5.22: error: MATRIX: The operands of > must have the same
-dimensions or one must be a scalar.
- 5 | PRINT ({1, 2} > {1; 2}).
- | ^~~~~~~~~~~~~~~
-
-matrix.sps:5.8-5.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 5 | PRINT ({1, 2} > {1; 2}).
- | ^~~~~~
-
-matrix.sps:5.17-5.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 5 | PRINT ({1, 2} > {1; 2}).
- | ^~~~~~
-
-({1, 1; 2, 2} < {1, 2; 1, 2})
- 0 1
- 0 0
-
-({1, 1; 2, 2} < 2)
- 1 1
- 0 0
-
-(1 < {1, 2; 1, 2})
- 0 1
- 0 1
-
-matrix.sps:10.8-10.22: error: MATRIX: The operands of < must have the same
-dimensions or one must be a scalar.
- 10 | PRINT ({1, 2} < {1; 2}).
- | ^~~~~~~~~~~~~~~
-
-matrix.sps:10.8-10.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 10 | PRINT ({1, 2} < {1; 2}).
- | ^~~~~~
-
-matrix.sps:10.17-10.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 10 | PRINT ({1, 2} < {1; 2}).
- | ^~~~~~
-
-({1, 1; 2, 2} <> {1, 2; 1, 2})
- 0 1
- 1 0
-
-({1, 1; 2, 2} <> 2)
- 1 1
- 0 0
-
-(1 <> {1, 2; 1, 2})
- 0 1
- 0 1
-
-matrix.sps:15.8-15.23: error: MATRIX: The operands of <> must have the same
-dimensions or one must be a scalar.
- 15 | PRINT ({1, 2} <> {1; 2}).
- | ^~~~~~~~~~~~~~~~
-
-matrix.sps:15.8-15.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 15 | PRINT ({1, 2} <> {1; 2}).
- | ^~~~~~
-
-matrix.sps:15.18-15.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 15 | PRINT ({1, 2} <> {1; 2}).
- | ^~~~~~
-
-({1, 1; 2, 2} >= {1, 2; 1, 2})
- 1 0
- 1 1
-
-({1, 1; 2, 2} >= 2)
- 0 0
- 1 1
-
-(1 >= {1, 2; 1, 2})
- 1 0
- 1 0
-
-matrix.sps:20.8-20.23: error: MATRIX: The operands of >= must have the same
-dimensions or one must be a scalar.
- 20 | PRINT ({1, 2} >= {1; 2}).
- | ^~~~~~~~~~~~~~~~
-
-matrix.sps:20.8-20.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 20 | PRINT ({1, 2} >= {1; 2}).
- | ^~~~~~
-
-matrix.sps:20.18-20.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 20 | PRINT ({1, 2} >= {1; 2}).
- | ^~~~~~
-
-({1, 1; 2, 2} <= {1, 2; 1, 2})
- 1 1
- 0 1
-
-({1, 1; 2, 2} <= 2)
- 1 1
- 1 1
-
-(1 <= {1, 2; 1, 2})
- 1 1
- 1 1
-
-matrix.sps:25.8-25.23: error: MATRIX: The operands of <= must have the same
-dimensions or one must be a scalar.
- 25 | PRINT ({1, 2} <= {1; 2}).
- | ^~~~~~~~~~~~~~~~
-
-matrix.sps:25.8-25.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 25 | PRINT ({1, 2} <= {1; 2}).
- | ^~~~~~
-
-matrix.sps:25.18-25.23: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 25 | PRINT ({1, 2} <= {1; 2}).
- | ^~~~~~
-
-({1, 1; 2, 2} = {1, 2; 1, 2})
- 1 0
- 0 1
-
-({1, 1; 2, 2} = 2)
- 0 0
- 1 1
-
-(1 = {1, 2; 1, 2})
- 1 0
- 1 0
-
-matrix.sps:30.8-30.22: error: MATRIX: The operands of = must have the same
-dimensions or one must be a scalar.
- 30 | PRINT ({1, 2} = {1; 2}).
- | ^~~~~~~~~~~~~~~
-
-matrix.sps:30.8-30.13: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 30 | PRINT ({1, 2} = {1; 2}).
- | ^~~~~~
-
-matrix.sps:30.17-30.22: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 30 | PRINT ({1, 2} = {1; 2}).
- | ^~~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - logical operators])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT (NOT {-1, 0, 1}).
-
-PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
-PRINT ({-1, 0, 1} AND -1).
-PRINT ({-1, 0, 1} AND 0).
-PRINT ({-1, 0, 1} AND 1).
-PRINT ({-1, 0} AND {2; 3}).
-
-PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
-PRINT ({-1, 0, 1} OR -1).
-PRINT ({-1, 0, 1} OR 0).
-PRINT ({-1, 0, 1} OR 1).
-PRINT ({-1, 0} OR {2; 3}).
-
-PRINT ({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1}).
-PRINT ({-1, 0, 1} XOR -1).
-PRINT ({-1, 0, 1} XOR 0).
-PRINT ({-1, 0, 1} XOR 1).
-PRINT ({-1, 0} XOR {2; 3}).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-(NOT {-1, 0, 1})
- 1 1 0
-
-({-1, 0, 1; -1, 0, 1; -1, 0, 1} AND {-1, -1, -1; 0, 0, 0; 1, 1, 1})
- 0 0 0
- 0 0 0
- 0 0 1
-
-({-1, 0, 1} AND -1)
- 0 0 0
-
-({-1, 0, 1} AND 0)
- 0 0 0
-
-({-1, 0, 1} AND 1)
- 0 0 1
-
-matrix.sps:8.8-8.25: error: MATRIX: The operands of AND must have the same
-dimensions or one must be a scalar.
- 8 | PRINT ({-1, 0} AND {2; 3}).
- | ^~~~~~~~~~~~~~~~~~
-
-matrix.sps:8.8-8.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 8 | PRINT ({-1, 0} AND {2; 3}).
- | ^~~~~~~
-
-matrix.sps:8.20-8.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 8 | PRINT ({-1, 0} AND {2; 3}).
- | ^~~~~~
-
-({-1, 0, 1; -1, 0, 1; -1, 0, 1} OR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
- 0 0 1
- 0 0 1
- 1 1 1
-
-({-1, 0, 1} OR -1)
- 0 0 1
-
-({-1, 0, 1} OR 0)
- 0 0 1
-
-({-1, 0, 1} OR 1)
- 1 1 1
-
-matrix.sps:14.8-14.24: error: MATRIX: The operands of OR must have the same
-dimensions or one must be a scalar.
- 14 | PRINT ({-1, 0} OR {2; 3}).
- | ^~~~~~~~~~~~~~~~~
-
-matrix.sps:14.8-14.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 14 | PRINT ({-1, 0} OR {2; 3}).
- | ^~~~~~~
-
-matrix.sps:14.19-14.24: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 14 | PRINT ({-1, 0} OR {2; 3}).
- | ^~~~~~
-
-({-1, 0, 1; -1, 0, 1; -1, 0, 1} XOR {-1, -1, -1; 0, 0, 0; 1, 1, 1})
- 0 0 1
- 0 0 1
- 1 1 0
-
-({-1, 0, 1} XOR -1)
- 0 0 1
-
-({-1, 0, 1} XOR 0)
- 0 0 1
-
-({-1, 0, 1} XOR 1)
- 1 1 0
-
-matrix.sps:20.8-20.25: error: MATRIX: The operands of XOR must have the same
-dimensions or one must be a scalar.
- 20 | PRINT ({-1, 0} XOR {2; 3}).
- | ^~~~~~~~~~~~~~~~~~
-
-matrix.sps:20.8-20.14: note: MATRIX: The left-hand operand is a 1×2 matrix.
- 20 | PRINT ({-1, 0} XOR {2; 3}).
- | ^~~~~~~
-
-matrix.sps:20.20-20.25: note: MATRIX: The right-hand operand is a 2×1 matrix.
- 20 | PRINT ({-1, 0} XOR {2; 3}).
- | ^~~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - matrix operators])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT ({0, 1; 0, 0} * {0, 0; 1, 0}).
-PRINT ({0, 0; 1, 0} * {0, 1; 0, 0}).
-PRINT ({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12}).
-PRINT ({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3}).
-COMPUTE m = {0, 1, 0, 0; 1, 0, 1, 0; 0, 1, 0, 1; 0, 0, 1, 0}.
-PRINT m**-2.
-PRINT m**-1.
-PRINT m**0.
-PRINT m**1.
-PRINT m**2.
-PRINT m**3.
-PRINT m**5.
-PRINT {3, 3.5; 3.2, 3.6}**-1/FORMAT F6.2.
-
-PRINT ({1, 2, 3} * {1, 2}).
-PRINT {1, 2, 3}**2.
-PRINT m**{1, 2}.
-PRINT m**1.5.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-({0, 1; 0, 0} * {0, 0; 1, 0})
- 1 0
- 0 0
-
-({0, 0; 1, 0} * {0, 1; 0, 0})
- 0 0
- 0 1
-
-({1, 2, 3; 4, 5, 6} * {7, 8; 9, 10; 11, 12})
- 58 64
- 139 154
-
-({3, 4, 2} * {13, 9, 7, 15; 8, 7, 4, 6; 6, 4, 0, 3})
- 83 63 37 75
-
-m**-2
- 2 0 -1 0
- 0 1 0 -1
- -1 0 1 0
- 0 -1 0 2
-
-m**-1
- 0 1 0 -1
- 1 0 0 0
- 0 0 0 1
- -1 0 1 0
-
-m**0
- 1 0 0 0
- 0 1 0 0
- 0 0 1 0
- 0 0 0 1
-
-m**1
- 0 1 0 0
- 1 0 1 0
- 0 1 0 1
- 0 0 1 0
-
-m**2
- 1 0 1 0
- 0 2 0 1
- 1 0 2 0
- 0 1 0 1
-
-m**3
- 0 2 0 1
- 2 0 3 0
- 0 3 0 2
- 1 0 2 0
-
-m**5
- 0 5 0 3
- 5 0 8 0
- 0 8 0 5
- 3 0 5 0
-
-{3, 3.5; 3.2, 3.6}**-1
- -9.00 8.75
- 8.00 -7.50
-
-matrix.sps:16.8-16.25: error: MATRIX: Matrices not conformable for
-multiplication.
- 16 | PRINT ({1, 2, 3} * {1, 2}).
- | ^~~~~~~~~~~~~~~~~~
-
-matrix.sps:16.8-16.16: note: MATRIX: The left-hand operand is a 1×3 matrix.
- 16 | PRINT ({1, 2, 3} * {1, 2}).
- | ^~~~~~~~~
-
-matrix.sps:16.20-16.25: note: MATRIX: The right-hand operand is a 1×2 matrix.
- 16 | PRINT ({1, 2, 3} * {1, 2}).
- | ^~~~~~
-
-matrix.sps:17.7-17.15: error: MATRIX: Matrix exponentation with ** requires a
-square matrix on the left-hand size, not one with dimensions 1×3.
- 17 | PRINT {1, 2, 3}**2.
- | ^~~~~~~~~
-
-matrix.sps:18.10-18.15: error: MATRIX: Matrix exponentiation with ** requires a
-scalar on the right-hand side, not a matrix with dimensions 1×2.
- 18 | PRINT m**{1, 2}.
- | ^~~~~~
-
-matrix.sps:19.10-19.12: error: MATRIX: Exponent 1.5 in matrix exponentiation is
-non-integer or outside the valid range.
- 19 | PRINT m**1.5.
- | ^~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - sequences and construction])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT {1:3:-1}.
-PRINT {1:3}.
-PRINT {1:10:2}.
-PRINT {1:11:2}.
-
-PRINT {-1:-3}.
-PRINT {-1:-3:-1}.
-PRINT {-1:-10:-2}.
-PRINT {-1:-11:-2}.
-
-PRINT {1:1}.
-PRINT {1:1:-1}.
-
-PRINT {1:3:0}.
-PRINT {-1:-3:0}.
-
-PRINT {1, 2; 3}.
-PRINT {{2; 5}, 3}.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-{1:3:-1}
-
-{1:3}
- 1 2 3
-
-{1:10:2}
- 1 3 5 7 9
-
-{1:11:2}
- 1 3 5 7 9 11
-
-{-1:-3}
-
-{-1:-3:-1}
- -1 -2 -3
-
-{-1:-10:-2}
- -1 -3 -5 -7 -9
-
-{-1:-11:-2}
- -1 -3 -5 -7 -9 -11
-
-{1:1}
- 1
-
-{1:1:-1}
- 1
-
-matrix.sps:15.12: error: MATRIX: The increment operand to : must be nonzero.
- 15 | PRINT {1:3:0}.
- | ^
-
-matrix.sps:16.14: error: MATRIX: The increment operand to : must be nonzero.
- 16 | PRINT {-1:-3:0}.
- | ^
-
-matrix.sps:18.7-18.15: error: MATRIX: This expression tries to vertically join
-matrices with differing numbers of columns.
- 18 | PRINT {1, 2; 3}.
- | ^~~~~~~~~
-
-matrix.sps:18.8-18.11: note: MATRIX: This operand is a 1×2 matrix.
- 18 | PRINT {1, 2; 3}.
- | ^~~~
-
-matrix.sps:18.14: note: MATRIX: This operand is a 1×1 matrix.
- 18 | PRINT {1, 2; 3}.
- | ^
-
-matrix.sps:19.7-19.17: error: MATRIX: This expression tries to horizontally
-join matrices with differing numbers of rows.
- 19 | PRINT {{2; 5}, 3}.
- | ^~~~~~~~~~~
-
-matrix.sps:19.8-19.13: note: MATRIX: This operand is a 2×1 matrix.
- 19 | PRINT {{2; 5}, 3}.
- | ^~~~~~
-
-matrix.sps:19.16: note: MATRIX: This operand is a 1×1 matrix.
- 19 | PRINT {{2; 5}, 3}.
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - comments])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-* Comment one.
-PRINT (1+2).
-COMMENT Comment two.
-PRINT (3+4).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-(1+2)
- 3
-
-(3+4)
- 7
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - string matrices])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE m={'This is', 'a string', 'matrix', 'including', 'some', 'long strings'}.
-PRINT m/FORMAT=A8.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-m
- This is a string matrix includin some long str
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - ABS ALL ANY ARSIN ARTAN])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT ABS({-1, 0, 1}).
-
-PRINT ALL({0, 0, 0}).
-PRINT ALL({-1, 1}).
-PRINT ALL({-1, 0, 1}).
-
-PRINT ANY({0, 0, 0}).
-PRINT ANY({-1, 1}).
-PRINT ANY({-1, 0, 1}).
-
-PRINT ARSIN({-1, 0, 1})/FORMAT=F5.2.
-
-PRINT ARTAN({-5, -1, 0, 1, 5})/FORMAT=F5.2.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-ABS({-1, 0, 1})
- 1 0 1
-
-ALL({0, 0, 0})
- 0
-
-ALL({-1, 1})
- 1
-
-ALL({-1, 0, 1})
- 0
-
-ANY({0, 0, 0})
- 0
-
-ANY({-1, 1})
- 1
-
-ANY({-1, 0, 1})
- 1
-
-ARSIN({-1, 0, 1})
- -1.57 .00 1.57
-
-ARTAN({-5, -1, 0, 1, 5})
- -1.37 -.79 .00 .79 1.37
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - BLOCK CHOL CMAX CMIN COS])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11}).
-
-COMPUTE b=CHOL({4, 12, -16; 12, 37, -43; -16, -43, 98}).
-PRINT b.
-PRINT (T(b)*b).
-
-PRINT CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11}).
-
-PRINT CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11}).
-
-PRINT COS({0.785, 1.57; 3.14, 1.57 + 3.14}) /FORMAT=F5.2.
-
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-BLOCK({1, 2; 3, 4}, 5, {7; 8; 9}, {10, 11})
- 1 2 0 0 0 0
- 3 4 0 0 0 0
- 0 0 5 0 0 0
- 0 0 0 7 0 0
- 0 0 0 8 0 0
- 0 0 0 9 0 0
- 0 0 0 0 10 11
-
-b
- 2 6 -8
- 0 1 5
- 0 0 3
-
-(T(b)*b)
- 4 12 -16
- 12 37 -43
- -16 -43 98
-
-CMAX({9, 3, 4; 5, 8, 6; 7, 4, 11})
- 9 8 11
-
-CMIN({9, 3, 4; 5, 8, 6; 7, 4, 11})
- 5 3 4
-
-COS({0.785, 1.57; 3.14, 1.57 + 3.14})
- .71 .00
- -1.00 .00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - CSSQ CSUM DESIGN DET DIAG])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
-PRINT CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
-PRINT DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1}).
-PRINT DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1}).
-PRINT DET({1, 2, 3; 4, 5, 6; 7, 8, 9}) /FORMAT F4.1.
-PRINT DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10}).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-CSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
- 66 93 126
-
-CSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
- 12 15 18
-
-DESIGN({1, 2, 0; 2, 1, 0; 3, 0, 1})
- 1 0 0 0 0 1 1 0
- 0 1 0 0 1 0 1 0
- 0 0 1 1 0 0 0 1
-
-warning: Column 2 in DESIGN argument has constant value.
-
-DESIGN({1, 2, 0; 2, 2, 0; 3, 2, 1})
- 1 0 0 1 0
- 0 1 0 1 0
- 0 0 1 0 1
-
-DET({1, 2, 3; 4, 5, 6; 7, 8, 9})
- .0
-
-DIAG({1, 2, 3, 4; 4, 5, 6, 7; 7, 8, 9, 10})
- 1
- 5
- 9
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - EVAL EXP GINV GRADE GSCH])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})/FORMAT=F5.2.
-
-PRINT EXP({2, 3; 4, 5})/FORMAT F5.2.
-
-PRINT GINV({1, 2})/FORMAT F5.2.
-COMPUTE a={1, 2, 3; 4, 5, 6; 7, 8, 9}.
-COMPUTE g=GINV(a).
-PRINT (a*g*a)/FORMAT F5.2.
-
-PRINT GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5}).
-COMPUTE x={26, 690, 323, 208, 671, 818, 732, 711, 585, 792}.
-COMPUTE asort=x.
-COMPUTE asort(GRADE(asort))=asort.
-PRINT asort.
-COMPUTE dsort=x.
-COMPUTE dsort(GRADE(-dsort))=dsort.
-PRINT dsort.
-
-PRINT (GSCH({3, 2; 1, 2}) * SQRT(10))/FORMAT F5.2.
-PRINT (GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))/FORMAT F5.2.
-PRINT GSCH({0; 0}).
-PRINT GSCH({0, 0, 0; 0, 0, 0}).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-EVAL({2, 0, 0; 0, 3, 4; 0, 4, 9})
- 11.00
- 2.00
- 1.00
-
-EXP({2, 3; 4, 5})
- 7.39 20.09
- 54.60 148.4
-
-GINV({1, 2})
- .20
- .40
-
-(a*g*a)
- 1.00 2.00 3.00
- 4.00 5.00 6.00
- 7.00 8.00 9.00
-
-GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5})
- 3 1 6
- 7 4 5
- 8 2 9
-
-asort
- 26 208 323 585 671 690 711 732 792 818
-
-dsort
- 818 792 732 711 690 671 585 323 208 26
-
-(GSCH({3, 2; 1, 2}) * SQRT(10))
- 3.00 -1.00
- 1.00 3.00
-
-(GSCH({0, 3, 6, 2; 0, 1, 2, 2}) * SQRT(10))
- 3.00 -1.00
- 1.00 3.00
-
-matrix.sps:22.12-22.17: error: MATRIX: GSCH requires its argument to have at
-least as many columns as rows, but it has dimensions 2×1.
- 22 | PRINT GSCH({0; 0}).
- | ^~~~~~
-
-matrix.sps:23.12-23.29: error: MATRIX: 2×3 argument to GSCH contains only 0
-linearly independent columns.
- 23 | PRINT GSCH({0, 0, 0; 0, 0, 0}).
- | ^~~~~~~~~~~~~~~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - IDENT INV KRONEKER LG10 LN])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT IDENT(1).
-PRINT IDENT(2).
-PRINT IDENT(3,5).
-PRINT IDENT(5,3).
-
-PRINT INV({3, 3.5; 3.2, 3.6})/FORMAT F8.2.
-PRINT INV({4, 7; 2, 6})/FORMAT F8.2.
-PRINT (INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)/FORMAT F8.2.
-
-PRINT KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7}).
-
-PRINT LG10({1, 10, 100, 1000}).
-
-PRINT LN({1, 2; 3, 4})/FORMAT F5.2.
-PRINT LN(0).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-IDENT(1)
- 1
-
-IDENT(2)
- 1 0
- 0 1
-
-IDENT(3,5)
- 1 0 0 0 0
- 0 1 0 0 0
- 0 0 1 0 0
-
-IDENT(5,3)
- 1 0 0
- 0 1 0
- 0 0 1
- 0 0 0
- 0 0 0
-
-INV({3, 3.5; 3.2, 3.6})
- -9.00 8.75
- 8.00 -7.50
-
-INV({4, 7; 2, 6})
- .60 -.70
- -.20 .40
-
-(INV({4, -2, 1; 5, 0, 3; -1, 2, 6})*52)
- -6.00 14.00 -6.00
- -33.00 25.00 -7.00
- 10.00 -6.00 10.00
-
-KRONEKER({1, 2; 3, 4}, {0, 5; 6, 7})
- 0 5 0 10
- 6 7 12 14
- 0 15 0 20
- 18 21 24 28
-
-LG10({1, 10, 100, 1000})
- 0 1 2 3
-
-LN({1, 2; 3, 4})
- .00 .69
- 1.10 1.39
-
-matrix.sps:16.7-16.11: error: MATRIX: Argument 1 to matrix function LN must be
-greater than 0.
- 16 | PRINT LN(0).
- | ^~~~~
-
-matrix.sps:16.10: note: MATRIX: Argument 1 is 0.
- 16 | PRINT LN(0).
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MAGIC])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-
-LOOP n=3 to 10.
- COMPUTE m=MAGIC(n).
- COMPUTE total=n*(n**2 + 1) / 2.
- COMPUTE tb={MSUM(DIAG(T(m))), CSUM(m), MSUM(DIAG(m))} - total.
- COMPUTE lr=RSUM(m) - total.
- PRINT {tb; lr, m, lr; tb}/FORMAT F4.0.
-END LOOP.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-{tb; lr, m, lr; tb}
- 0 0 0 0 0
- 0 8 1 6 0
- 0 3 5 7 0
- 0 4 9 2 0
- 0 0 0 0 0
-{tb; lr, m, lr; tb}
- 0 0 0 0 0 0
- 0 1 5 12 16 0
- 0 15 11 6 2 0
- 0 14 8 9 3 0
- 0 4 10 7 13 0
- 0 0 0 0 0 0
-{tb; lr, m, lr; tb}
- 0 0 0 0 0 0 0
- 0 17 24 1 8 15 0
- 0 23 5 7 14 16 0
- 0 4 6 13 20 22 0
- 0 10 12 19 21 3 0
- 0 11 18 25 2 9 0
- 0 0 0 0 0 0 0
-{tb; lr, m, lr; tb}
- 0 0 0 0 0 0 0 0
- 0 1 5 9 28 32 36 0
- 0 35 30 27 10 7 2 0
- 0 24 14 22 18 17 16 0
- 0 13 23 15 19 20 21 0
- 0 34 31 26 11 6 3 0
- 0 4 8 12 25 29 33 0
- 0 0 0 0 0 0 0 0
-{tb; lr, m, lr; tb}
- 0 0 0 0 0 0 0 0 0
- 0 30 39 48 1 10 19 28 0
- 0 38 47 7 9 18 27 29 0
- 0 46 6 8 17 26 35 37 0
- 0 5 14 16 25 34 36 45 0
- 0 13 15 24 33 42 44 4 0
- 0 21 23 32 41 43 3 12 0
- 0 22 31 40 49 2 11 20 0
- 0 0 0 0 0 0 0 0 0
-{tb; lr, m, lr; tb}
- 0 0 0 0 0 0 0 0 0 0
- 0 1 9 17 25 40 48 56 64 0
- 0 63 55 47 39 26 18 10 2 0
- 0 3 11 19 27 38 46 54 62 0
- 0 61 53 45 37 28 20 12 4 0
- 0 60 52 44 32 33 21 13 5 0
- 0 6 14 22 30 35 43 51 59 0
- 0 58 50 42 34 31 23 15 7 0
- 0 8 16 24 36 29 41 49 57 0
- 0 0 0 0 0 0 0 0 0 0
-{tb; lr, m, lr; tb}
- 0 0 0 0 0 0 0 0 0 0 0
- 0 47 58 69 80 1 12 23 34 45 0
- 0 57 68 79 9 11 22 33 44 46 0
- 0 67 78 8 10 21 32 43 54 56 0
- 0 77 7 18 20 31 42 53 55 66 0
- 0 6 17 19 30 41 52 63 65 76 0
- 0 16 27 29 40 51 62 64 75 5 0
- 0 26 28 39 50 61 72 74 4 15 0
- 0 36 38 49 60 71 73 3 14 25 0
- 0 37 48 59 70 81 2 13 24 35 0
- 0 0 0 0 0 0 0 0 0 0 0
-{tb; lr, m, lr; tb}
- 0 0 0 0 0 0 0 0 0 0 0 0
- 0 1 9 17 25 33 68 76 84 92 100 0
- 0 99 91 83 75 67 34 26 18 10 2 0
- 0 3 11 19 27 35 66 74 82 90 98 0
- 0 97 89 81 72 65 36 29 20 12 4 0
- 0 60 42 58 44 56 50 49 53 47 46 0
- 0 41 59 43 57 45 51 52 48 54 55 0
- 0 96 88 80 73 64 37 28 21 13 5 0
- 0 6 14 22 30 38 63 71 79 87 95 0
- 0 94 86 78 70 62 39 31 23 15 7 0
- 0 8 16 24 32 40 61 69 77 85 93 0
- 0 0 0 0 0 0 0 0 0 0 0 0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MAKE MDIAG MMAX MMIN MOD])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT MAKE(1, 2, 3).
-PRINT MAKE(2, 1, 4).
-PRINT MAKE(2, 3, 5).
-
-PRINT MDIAG({1, 2, 3, 4}).
-PRINT MDIAG({1; 2; 3; 4}).
-PRINT MDIAG({1, 2; 3, 4}).
-
-PRINT MMAX({55, 44; 66, 11}).
-
-PRINT MMIN({55, 44; 66, 11}).
-
-PRINT MOD({5, 4, 3, 2, 1, 0}, 3).
-PRINT MOD({5, 4, 3, 2, 1, 0}, -3).
-PRINT MOD({-5, -4, -3, -2, -1, 0}, 3).
-PRINT MOD({-5, -4, -3, -2, -1, 0}, -3).
-PRINT MOD({5, 4, 3, 2, 1, 0}, 1.5) /FORMAT F5.1.
-PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-MAKE(1, 2, 3)
- 3 3
-
-MAKE(2, 1, 4)
- 4
- 4
-
-MAKE(2, 3, 5)
- 5 5 5
- 5 5 5
-
-MDIAG({1, 2, 3, 4})
- 1 0 0 0
- 0 2 0 0
- 0 0 3 0
- 0 0 0 4
-
-MDIAG({1; 2; 3; 4})
- 1 0 0 0
- 0 2 0 0
- 0 0 3 0
- 0 0 0 4
-
-matrix.sps:8.13-8.24: error: MATRIX: Function MDIAG argument 1 must be a
-vector, not a 2×2 matrix.
- 8 | PRINT MDIAG({1, 2; 3, 4}).
- | ^~~~~~~~~~~~
-
-MMAX({55, 44; 66, 11})
- 66
-
-MMIN({55, 44; 66, 11})
- 11
-
-MOD({5, 4, 3, 2, 1, 0}, 3)
- 2 1 0 2 1 0
-
-MOD({5, 4, 3, 2, 1, 0}, -3)
- 2 1 0 2 1 0
-
-MOD({-5, -4, -3, -2, -1, 0}, 3)
- -2 -1 0 -2 -1 0
-
-MOD({-5, -4, -3, -2, -1, 0}, -3)
- -2 -1 0 -2 -1 0
-
-MOD({5, 4, 3, 2, 1, 0}, 1.5)
- .5 1.0 .0 .5 1.0 .0
-
-matrix.sps:19.7-19.32: error: MATRIX: Argument 2 to matrix function MOD must
-not be equal to 0.
- 19 | PRINT MOD({5, 4, 3, 2, 1, 0}, 0).
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MSSQ MSUM NCOL NROW RANK])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0}).
-
-PRINT MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0}).
-
-PRINT NCOL({1, 0; -2, -3; 3, 3}).
-
-PRINT NROW({1, 0; -2, -3; 3, 3}).
-
-PRINT RANK({1, 0, 1; -2, -3, 1; 3, 3, 0}).
-PRINT RANK({1, 1, 0, 2; -1, -1, 0, -2}).
-PRINT RANK({1, -1; 1, -1; 0, 0; 2, -2}).
-PRINT RANK({1, 2, 1; -2, -3, 1; 3, 5, 0}).
-PRINT RANK({1, 0, 2; 2, 1, 0; 3, 2, 1}).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-MSSQ({1, 0, 1; -2, -3, 1; 3, 3, 0})
- 34
-
-MSUM({1, 0, 1; -2, -3, 1; 3, 3, 0})
- 4
-
-NCOL({1, 0; -2, -3; 3, 3})
- 2
-
-NROW({1, 0; -2, -3; 3, 3})
- 3
-
-RANK({1, 0, 1; -2, -3, 1; 3, 3, 0})
- 2
-
-RANK({1, 1, 0, 2; -1, -1, 0, -2})
- 1
-
-RANK({1, -1; 1, -1; 0, 0; 2, -2})
- 1
-
-RANK({1, 2, 1; -2, -3, 1; 3, 5, 0})
- 2
-
-RANK({1, 0, 2; 2, 1, 0; 3, 2, 1})
- 3
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - RESHAPE RMAX RMIN RND RNKORDER])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT RESHAPE(1:12, 1, 12).
-PRINT RESHAPE(1:12, 2, 6).
-PRINT RESHAPE(1:12, 3, 4).
-PRINT RESHAPE(1:12, 4, 3).
-PRINT RESHAPE(1:12, 6, 2).
-PRINT RESHAPE(1:12, 12, 1).
-
-PRINT RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0}).
-
-PRINT RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0}).
-
-PRINT RND({-1.6, -1.5, -1.4;
- -.6, -.5, -.4;
- .4, .5, .6;
- 1.4, 1.5, 1.6})/FORMAT F5.1.
-
-PRINT RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5}) /FORMAT F5.1.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-RESHAPE(1:12, 1, 12)
- 1 2 3 4 5 6 7 8 9 10 11 12
-
-RESHAPE(1:12, 2, 6)
- 1 2 3 4 5 6
- 7 8 9 10 11 12
-
-RESHAPE(1:12, 3, 4)
- 1 2 3 4
- 5 6 7 8
- 9 10 11 12
-
-RESHAPE(1:12, 4, 3)
- 1 2 3
- 4 5 6
- 7 8 9
- 10 11 12
-
-RESHAPE(1:12, 6, 2)
- 1 2
- 3 4
- 5 6
- 7 8
- 9 10
- 11 12
-
-RESHAPE(1:12, 12, 1)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-
-RMAX({1, 0, 1; -2, -3, 1; 3, 3, 0})
- 1
- 1
- 3
-
-RMIN({1, 0, 1; -2, -3, 1; 3, 3, 0})
- 0
- -3
- 0
-
-RND({-1.6, -1.5, -1.4;
- -.6, -.5, -.4;
- .4, .5, .6;
- 1.4, 1.5, 1.6})
- -2.0 -2.0 -1.0
- -1.0 .0 .0
- .0 .0 1.0
- 1.0 2.0 2.0
-
-RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5})
- 3.5 1.5 7.0
- 7.0 3.5 5.0
- 7.0 1.5 9.0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - RSSQ RSUM SIN SOLVE SQRT])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9}).
-PRINT RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9}).
-
-PRINT SIN({0, .78, 1.57, 2.35, 3.14}) /FORMAT F5.2.
-
-PRINT SOLVE({2, 3; 4, 9}, {6, 2; 15, 5}) /FORMAT=F6.2.
-PRINT SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8}) /FORMAT=F6.2.
-PRINT SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3}) /FORMAT=F6.2.
-PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
-
-PRINT SQRT({0, 1, 2, 3, 4, 9, 81}) /FORMAT=F5.2.
-PRINT SQRT(-1).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-RSSQ({1, 2, 3; 4, 5, 6; 7, 8, 9})
- 14
- 77
- 194
-
-RSUM({1, 2, 3; 4, 5, 6; 7, 8, 9})
- 6
- 15
- 24
-
-SIN({0, .78, 1.57, 2.35, 3.14})
- .00 .70 1.00 .71 .00
-
-SOLVE({2, 3; 4, 9}, {6, 2; 15, 5})
- 1.50 .50
- 1.00 .33
-
-SOLVE({1, 3, -2; 3, 5, 6; 2, 4, 3}, {5; 7; 8})
- -15.00
- 8.00
- 2.00
-
-SOLVE({2, 1, -1; -3, -1, 2; -2, 1, 2}, {8; -11; -3})
- 2.00
- 3.00
- -1.00
-
-matrix.sps:10.7-10.33: error: MATRIX: SOLVE arguments must have the same number
-of rows.
- 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-matrix.sps:10.13-10.24: note: MATRIX: Argument 1 has dimensions 2×2.
- 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
- | ^~~~~~~~~~~~
-
-matrix.sps:10.27-10.32: note: MATRIX: Argument 2 has dimensions 1×2.
- 10 | PRINT SOLVE({1, 2; 3, 4}, {1, 2}).
- | ^~~~~~
-
-SQRT({0, 1, 2, 3, 4, 9, 81})
- .00 1.00 1.41 1.73 2.00 3.00 9.00
-
-matrix.sps:13.7-13.14: error: MATRIX: Argument 1 to matrix function SQRT must
-be greater than or equal to 0.
- 13 | PRINT SQRT(-1).
- | ^~~~~~~~
-
-matrix.sps:13.12-13.13: note: MATRIX: Argument 1 is -1.
- 13 | PRINT SQRT(-1).
- | ^~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - SSCP SVAL SWEEP TRACE TRANSPOS TRUNC])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE m={1, 2, 3; 4, 5, 6}
-COMPUTE sscp1=SSCP(m).
-COMPUTE sscp2=T(m)*m.
-PRINT sscp1.
-PRINT (sscp1 <> sscp2).
-
-PRINT SVAL({1, 1; 0, 0})/FORMAT F5.2.
-PRINT SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})/FORMAT F5.2.
-PRINT SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
- /FORMAT F5.2.
-PRINT SVAL({2, 4; 1, 3; 0, 0; 0, 0})/FORMAT F5.2.
-
-COMPUTE s0 = {6, 12, 0, 12; 12, 28, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
-PRINT SWEEP(s0, 1)/FORMAT F5.2.
-PRINT SWEEP(SWEEP(s0, 1), 2)/FORMAT F5.2.
-PRINT SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)/FORMAT F5.2.
-
-COMPUTE s1 = {6, 12, 0, 12; 12, 0, 0, 25; 0, 0, 6, 2; 12, 25, 2, 28}.
-PRINT SWEEP(s1, 2).
-
-COMPUTE s2 = {0, 1, 2; 3, 4, 5; 6, 7, 8}.
-PRINT SWEEP(s2, 1).
-PRINT SWEEP(s2, 2).
-PRINT SWEEP(s2, 3).
-
-PRINT TRACE(s0).
-
-PRINT T(s0).
-PRINT TRANSPOS(s0).
-PRINT ALL(T(T(s0)) = s0).
-
-PRINT TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
-PRINT TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0})).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-sscp1
- 17 22 27
- 22 29 36
- 27 36 45
-
-(sscp1 <> sscp2)
- 0 0 0
- 0 0 0
- 0 0 0
-
-SVAL({1, 1; 0, 0})
- 1.41
- .00
-
-SVAL({1, 0, 1; 0, 1, 1; 0, 0, 0})
- 1.73
- 1.00
- .00
-
-SVAL({1, 0, 0, 0, 2; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 2, 0, 0, 0})
- 3.00
- 2.24
- 2.00
- .00
-
-SVAL({2, 4; 1, 3; 0, 0; 0, 0})
- 5.46
- .37
-
-SWEEP(s0, 1)
- .17 2.00 .00 2.00
- -2.00 4.00 .00 1.00
- .00 .00 6.00 2.00
- -2.00 1.00 2.00 4.00
-
-SWEEP(SWEEP(s0, 1), 2)
- 1.17 -.50 .00 1.50
- -.50 .25 .00 .25
- .00 .00 6.00 2.00
- -1.50 -.25 2.00 3.75
-
-SWEEP(SWEEP(SWEEP(s0, 1), 2), 3)
- 1.17 -.50 .00 1.50
- -.50 .25 .00 .25
- .00 .00 .17 .33
- -1.50 -.25 -.33 3.08
-
-SWEEP(s1, 2)
- 6 0 0 12
- 0 0 0 0
- 0 0 6 2
- 12 0 2 28
-
-SWEEP(s2, 1)
- 0 0 0
- 0 4 5
- 0 7 8
-
-SWEEP(s2, 2)
- -.7500000000 -.2500000000 .7500000000
- .7500000000 .2500000000 1.2500000000
- .7500000000 -1.7500000000 -.7500000000
-
-SWEEP(s2, 3)
- -1.5000000000 -.7500000000 -.2500000000
- -.7500000000 -.3750000000 -.6250000000
- .7500000000 .8750000000 .1250000000
-
-TRACE(s0)
- 68
-
-T(s0)
- 6 12 0 12
- 12 28 0 25
- 0 0 6 2
- 12 25 2 28
-
-TRANSPOS(s0)
- 6 12 0 12
- 12 28 0 25
- 0 0 6 2
- 12 25 2 28
-
-ALL(T(T(s0)) = s0)
- 1
-
-TRUNC(SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
- 5
- 0
-
-TRUNC(-SVAL({2, 4; 1, 3; 0, 0; 0, 0}))
- -5
- 0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - UNIFORM])
-AT_DATA([matrix.sps], [dnl
-SET SEED=10.
-MATRIX.
-PRINT (UNIFORM(4, 5)*10)/FORMAT F5.2.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-(UNIFORM(4, 5)*10)
- 7.71 2.99 .21 4.95 6.34
- 4.43 7.49 8.32 4.99 5.83
- 2.25 .25 1.98 7.09 7.61
- 2.66 1.69 2.64 .88 1.50
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - invalid function arguments])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE x=MOD({1,2,3},{4,5,6}).
-COMPUTE x=MDIAG({1, 2; 3, 4}).
-COMPUTE x=ARSIN(2).
-COMPUTE x=ARSIN({1, 1; -1, 2}).
-COMPUTE x=CDF.UNIFORM(2,1,1).
-COMPUTE x=CDF.UNIFORM(1,2,1).
-COMPUTE x=CDF.UNIFORM({1,2},1,1).
-COMPUTE x=MAGIC(2).
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.23-2.29: error: MATRIX: Function MOD argument 2 must be a scalar,
-not a 1×3 matrix.
- 2 | COMPUTE x=MOD({1,2,3},{4,5,6}).
- | ^~~~~~~
-
-matrix.sps:3.17-3.28: error: MATRIX: Function MDIAG argument 1 must be a
-vector, not a 2×2 matrix.
- 3 | COMPUTE x=MDIAG({1, 2; 3, 4}).
- | ^~~~~~~~~~~~
-
-matrix.sps:4.17: error: MATRIX: Argument 1 to matrix function ARSIN is 2, which
-is outside the valid range [[-1,1]].
- 4 | COMPUTE x=ARSIN(2).
- | ^
-
-matrix.sps:5.17-5.29: error: MATRIX: Row 2, column 2 of argument 1 to matrix
-function ARSIN is 2, which is outside the valid range [[-1,1]].
- 5 | COMPUTE x=ARSIN({1, 1; -1, 2}).
- | ^~~~~~~~~~~~~
-
-error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
-argument 3.
-
-matrix.sps:6.23: note: MATRIX: Argument 1 is 2.
- 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
- | ^
-
-matrix.sps:6.27: note: MATRIX: Argument 3 is 1.
- 6 | COMPUTE x=CDF.UNIFORM(2,1,1).
- | ^
-
-error: Argument 2 to matrix function CDF.UNIFORM must be less than or equal to
-argument 3.
-
-matrix.sps:7.25: note: MATRIX: Argument 2 is 2.
- 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
- | ^
-
-matrix.sps:7.27: note: MATRIX: Argument 3 is 1.
- 7 | COMPUTE x=CDF.UNIFORM(1,2,1).
- | ^
-
-error: Argument 1 to matrix function CDF.UNIFORM must be less than or equal to
-argument 3.
-
-matrix.sps:8.23-8.27: note: MATRIX: Row 1, column 2 of argument 1 is 2.
- 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
- | ^~~~~
-
-matrix.sps:8.31: note: MATRIX: Argument 3 is 1.
- 8 | COMPUTE x=CDF.UNIFORM({1,2},1,1).
- | ^
-
-matrix.sps:9.11-9.18: error: MATRIX: Argument 1 to matrix function MAGIC must
-be greater than or equal to 3.
- 9 | COMPUTE x=MAGIC(2).
- | ^~~~~~~~
-
-matrix.sps:9.17: note: MATRIX: Argument 1 is 2.
- 9 | COMPUTE x=MAGIC(2).
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - invalid number function arguments])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE x=ABS().
-COMPUTE x=ABS(1,2).
-COMPUTE x=KRONEKER(1,2,3).
-COMPUTE x=IDENT().
-COMPUTE x=IDENT(1,2,3).
-COMPUTE x=BLOCK().
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2: error: COMPUTE: Matrix function ABS requires 1 argument.
-
-matrix.sps:3: error: COMPUTE: Matrix function ABS requires 1 argument.
-
-matrix.sps:4: error: COMPUTE: Matrix function KRONEKER requires 2 arguments.
-
-matrix.sps:5: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
-but 0 were provided.
-
-matrix.sps:6: error: COMPUTE: Matrix function IDENT requires 1 or 2 arguments,
-but 3 were provided.
-
-matrix.sps:7: error: COMPUTE: Matrix function BLOCK requires at least one
-argument.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - CALL SETDIAG])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE x={1, 2, 3; 4, 5, 6; 7, 8, 9}.
-
-COMPUTE x1=x.
-CALL SETDIAG(x1, 10).
-PRINT x1.
-
-COMPUTE x2=x.
-CALL SETDIAG(x2, {10, 11}).
-PRINT x2.
-
-COMPUTE x3=x.
-CALL SETDIAG(x3, {10, 11, 12}).
-PRINT x3.
-
-COMPUTE x4=x.
-CALL SETDIAG(x4, {10, 11, 12, 13}).
-PRINT x4.
-
-COMPUTE x5=x.
-CALL SETDIAG(x5, {10, 11; 12, 13}).
-PRINT x5.
-
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-x1
- 10 2 3
- 4 10 6
- 7 8 10
-
-x2
- 10 2 3
- 4 11 6
- 7 8 9
-
-x3
- 10 2 3
- 4 11 6
- 7 8 12
-
-x4
- 10 2 3
- 4 11 6
- 7 8 12
-
-matrix.sps:21.18-21.33: error: MATRIX: SETDIAG argument 2 must be a scalar or a
-vector, not a 2×2 matrix.
- 21 | CALL SETDIAG(x5, {10, 11; 12, 13}).
- | ^~~~~~~~~~~~~~~~
-
-x5
- 1 2 3
- 4 5 6
- 7 8 9
-])
-AT_CLEANUP
-
-dnl I have some doubts about the correctness of the results below.
-AT_SETUP([MATRIX - CALL EIGEN])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-CALL EIGEN({1, 0; 0, 1}, evec, eval).
-PRINT evec.
-PRINT eval.
-
-CALL EIGEN({3, 2, 4; 2, 0, 2; 4, 2, 3}, evec2, eval2).
-PRINT evec2.
-PRINT eval2.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-evec
- 1 0
- 0 1
-
-eval
- 1
- 1
-
-evec2
- -.6666666667 .0000000000 .7453559925
- -.3333333333 -.8944271910 -.2981423970
- -.6666666667 .4472135955 -.5962847940
-
-eval2
- 8.0000000000
- -1.0000000000
- -1.0000000000
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - CALL SVD])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-CALL SVD({3, 2, 2; 2, 3, -2}, u, s, v).
-PRINT (u * s * T(v))/FORMAT F5.1.
-
-CALL SVD({2, 4; 1, 3; 0, 0; 0, 0}, u, s, v).
-PRINT (u*s*T(v))/FORMAT F5.1.
-
-CALL SVD({-3, 1; 6, -2; 6, -2}, u, s, v).
-PRINT (u*s*T(v))/FORMAT F5.1.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-(u * s * T(v))
- 3.0 2.0 2.0
- 2.0 3.0 -2.0
-
-(u*s*T(v))
- 2.0 4.0
- 1.0 3.0
- .0 .0
- .0 .0
-
-(u*s*T(v))
- -3.0 1.0
- 6.0 -2.0
- 6.0 -2.0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - PRINT])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-PRINT/TITLE="title 1".
-PRINT/SPACE=2/TITLE="title 2".
-
-COMPUTE m={1, 2, 3; 3, 4, 5; 6, 7, 8}.
-PRINT m/RLABELS=123, a b c, long name.
-PRINT m/RNAMES={'123', 'a b c', 'long name'}.
-PRINT m/CLABELS=col1, col2, long column name.
-PRINT m/CNAMES={'col1', 'col2', 'long column name'}.
-PRINT m/RLABELS=123, a b c, long name
- /CLABELS=col1, col2, long column name.
-PRINT m/RNAMES={'123', 'a b c', 'long name'}
- /CNAMES={'col1', 'col2', 'long column name'}.
-PRINT {123e10, 456e10, 500}.
-END MATRIX.
-])
-
-AT_DATA([matrix-tables.sps], [dnl
-SET MDISPLAY=TABLES.
-INCLUDE 'matrix.sps'.
-])
-
-AT_CHECK([pspp matrix.sps], [0], [dnl
-title 1
-
-
-
-title 2
-
-m
-123 1 2 3
-a b c 3 4 5
-long nam 6 7 8
-
-m
-123 1 2 3
-a b c 3 4 5
-long nam 6 7 8
-
-m
- col1 col2 long col
- 1 2 3
- 3 4 5
- 6 7 8
-
-m
- col1 col2 long col
- 1 2 3
- 3 4 5
- 6 7 8
-
-m
- col1 col2 long col
-123 1 2 3
-a b c 3 4 5
-long nam 6 7 8
-
-m
- col1 col2 long col
-123 1 2 3
-a b c 3 4 5
-long nam 6 7 8
-
-{123e10, 456e10, 500}
- 10 ** 12 X
- 1.2300000000 4.5600000000 .0000000005
-])
-
-AT_CHECK([pspp matrix-tables.sps], [0], [dnl
-title 1
-
-
-
-title 2
-
- m
-+---------+-----+
-|123 |1 2 3|
-|a b c |3 4 5|
-|long name|6 7 8|
-+---------+-----+
-
- m
-+--------+-----+
-|123 |1 2 3|
-|a b c |3 4 5|
-|long nam|6 7 8|
-+--------+-----+
-
- m
-+----+----+----------------+
-|col1|col2|long column name|
-+----+----+----------------+
-| 1| 2| 3|
-| 3| 4| 5|
-| 6| 7| 8|
-+----+----+----------------+
-
- m
-+----+----+--------+
-|col1|col2|long col|
-+----+----+--------+
-| 1| 2| 3|
-| 3| 4| 5|
-| 6| 7| 8|
-+----+----+--------+
-
- m
-+---------+----+----+----------------+
-| |col1|col2|long column name|
-+---------+----+----+----------------+
-|123 | 1| 2| 3|
-|a b c | 3| 4| 5|
-|long name| 6| 7| 8|
-+---------+----+----+----------------+
-
- m
-+--------+----+----+--------+
-| |col1|col2|long col|
-+--------+----+----+--------+
-|123 | 1| 2| 3|
-|a b c | 3| 4| 5|
-|long nam| 6| 7| 8|
-+--------+----+----+--------+
-
- {123e10, 456e10, 500}
-+----------------------------------------------+
-|1.2300000000[[a]] 4.5600000000[[a]] .0000000005[[a]]|
-+----------------------------------------------+
-a. × 10**12
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - DO IF])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-DO IF 1.
-PRINT/TITLE '1'.
-END IF.
-
-DO IF 0.
-PRINT/TITLE '2'.
-ELSE IF 1.
-PRINT/TITLE '3'.
-END IF.
-
-DO IF -1.
-PRINT/TITLE '4'.
-ELSE IF 0.
-PRINT/TITLE '5'.
-ELSE.
-PRINT/TITLE '6'.
-END IF.
-
-DO IF {1, 2}.
-END IF.
-
-DO IF 0.
-ELSE IF {}.
-END IF.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-1
-
-3
-
-6
-
-matrix.sps:20.7-20.12: error: MATRIX: Expression for DO IF must evaluate to
-scalar, not a 1×2 matrix.
- 20 | DO IF {1, 2}.
- | ^~~~~~
-
-matrix.sps:24.9-24.10: error: MATRIX: Expression for ELSE IF must evaluate to
-scalar, not a 0×0 matrix.
- 24 | ELSE IF {}.
- | ^~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - unbounded LOOP])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-* Truly unbounded loop.
-COMPUTE x=0.
-COMPUTE y={}.
-LOOP.
-COMPUTE x=x+1.
-COMPUTE y={y, x}.
-END LOOP.
-PRINT x.
-PRINT y.
-
-* Unbounded loop terminates with BREAK.
-COMPUTE x=0.
-COMPUTE y={}.
-LOOP.
-COMPUTE x=x+1.
-COMPUTE y={y, x}.
-DO IF x >= 20.
- BREAK.
-END IF.
-END LOOP.
-PRINT x.
-PRINT y.
-
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-x
- 40
-
-y
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
-40
-
-x
- 20
-
-y
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-20
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - indexed or conditional LOOP])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-* Indexed loop terminates based on index.
-COMPUTE y={}.
-LOOP x=1 TO 20.
-COMPUTE y={y, x}.
-END LOOP.
-PRINT x.
-PRINT y.
-
-* Indexed loop terminates based on MXLOOPS.
-COMPUTE y={}.
-LOOP x=1 TO 50.
-COMPUTE y={y, x}.
-END LOOP.
-PRINT x.
-PRINT y.
-
-* Indexed loop terminates with BREAK.
-COMPUTE y={}.
-LOOP x=1 TO 50.
-COMPUTE y={y, x}.
-DO IF x >= 20.
- BREAK.
-END IF.
-END LOOP.
-PRINT x.
-PRINT y.
-
-* Indexed loop terminates with top IF.
-COMPUTE y={}.
-LOOP x=1 TO 50 IF NCOL(y) < 15.
-COMPUTE y={y, x}.
-END LOOP.
-PRINT x.
-PRINT y.
-
-* Indexed loop terminates with bottom IF.
-COMPUTE y={}.
-LOOP x=1 TO 50.
-COMPUTE y={y, x}.
-END LOOP IF NCOL(y) >= 22.
-PRINT x.
-PRINT y.
-
-* Index behavior.
-COMPUTE indexing={
- 1, 10, 1;
- 1, 10, 2;
- 1, 10, 3;
- 1, 10, -1;
- 1, 10, 0;
- 10, 1, -1;
- 10, 1, -2;
- 10, 1, -3;
- 10, 1, 1;
- 10, 1, 0
-}.
-LOOP i=1 TO NROW(indexing).
- COMPUTE y={}.
- LOOP j=indexing(i, 1) TO indexing(i, 2) BY indexing(i, 3).
- COMPUTE y={y, j}.
- END LOOP.
- PRINT {indexing(i, :), y}.
-END LOOP.
-
-LOOP i={} TO 5.
-END LOOP.
-
-LOOP i=5 TO {}.
-END LOOP.
-
-LOOP i=5 TO 8 BY {}.
-END LOOP.
-
-LOOP IF {}.
-END LOOP.
-
-LOOP.
-END LOOP IF {}.
-
-LOOP i=1e100 to 1e200.
-END LOOP.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-x
- 20
-
-y
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-20
-
-x
- 40
-
-y
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
-40
-
-x
- 20
-
-y
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-20
-
-x
- 16
-
-y
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-
-x
- 22
-
-y
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-20 21 22
-
-{indexing(i, :), y}
- 1 10 1 1 2 3 4 5 6 7 8 9 10
-{indexing(i, :), y}
- 1 10 2 1 3 5 7 9
-{indexing(i, :), y}
- 1 10 3 1 4 7 10
-{indexing(i, :), y}
- 1 10 -1
-{indexing(i, :), y}
- 1 10 0
-{indexing(i, :), y}
- 10 1 -1 10 9 8 7 6 5 4 3 2 1
-{indexing(i, :), y}
- 10 1 -2 10 8 6 4 2
-{indexing(i, :), y}
- 10 1 -3 10 7 4 1
-{indexing(i, :), y}
- 10 1 1
-{indexing(i, :), y}
- 10 1 0
-
-matrix.sps:66.8-66.9: error: MATRIX: Expression for LOOP must evaluate to
-scalar, not a 0×0 matrix.
- 66 | LOOP i={} TO 5.
- | ^~
-
-matrix.sps:69.13-69.14: error: MATRIX: Expression for TO must evaluate to
-scalar, not a 0×0 matrix.
- 69 | LOOP i=5 TO {}.
- | ^~
-
-matrix.sps:72.18-72.19: error: MATRIX: Expression for BY must evaluate to
-scalar, not a 0×0 matrix.
- 72 | LOOP i=5 TO 8 BY {}.
- | ^~
-
-matrix.sps:75.9-75.10: error: MATRIX: Expression for LOOP IF must evaluate to
-scalar, not a 0×0 matrix.
- 75 | LOOP IF {}.
- | ^~
-
-matrix.sps:79.13-79.14: error: MATRIX: Expression for END LOOP IF must evaluate
-to scalar, not a 0×0 matrix.
- 79 | END LOOP IF {}.
- | ^~
-
-matrix.sps:81.8-81.12: error: MATRIX: Expression for LOOP is outside the
-integer range.
- 81 | LOOP i=1e100 to 1e200.
- | ^~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - BREAK outside LOOP])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-BREAK.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.1-2.5: error: BREAK: BREAK not inside LOOP.
- 2 | BREAK.
- | ^~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - READ])
-AT_DATA([matrix.txt], [dnl
-9
-8
-7
-6
-1 2 3
-4 5 6
-7 8 9
-10 11 12,13
-14, 15 ,16 , 17
-18
-19
-20 21 22 23
- 12 34
-5 6
- 78 89
-10 11
-$1 $2 3
-4 $5 6
-$1 $2 $3 4
- $5$6 $78
-1% 2% 3% 4
- 56% 7%8
-abcdefghijkl
-ABCDEFGHIJKL
-])
-AT_DATA([matrix2.txt], [dnl
-2, 3, 5, 7
-11, 13, 17, 19
-23, 29, 31, 37
-41, 43, 47, 53
-])
-AT_DATA([matrix3.txt], [dnl
-1 5
-3 1 2 3
-5 6 -1 2 5 1
-2 8 9
-3 1 3 2
-])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-READ x/FILE='matrix.txt'/SIZE=4/FIELD=1 TO 1.
-PRINT x.
-READ x/FILE='matrix.txt'/SIZE={3,3}/FIELD=1 TO 80.
-PRINT x.
-READ x/SIZE={2,4}/FIELD=1 TO 80.
-PRINT x.
-READ x(:,2)/FILE='matrix.txt'/FIELD=1 TO 80.
-PRINT x.
-READ x(1,:)/SIZE={1,4}/FIELD=1 TO 80.
-PRINT x.
-
-READ x/SIZE={2,6}/FIELD=1 TO 20 BY 5.
-PRINT x.
-READ x/SIZE={2,3}/FIELD=1 TO 20/FORMAT=DOLLAR.
-PRINT x.
-READ x/SIZE={2,4}/FIELD=1 TO 20/FORMAT=DOLLAR5.1.
-PRINT x.
-READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4PCT'.
-PRINT x.
-READ x/SIZE={2,4}/FIELD=1 TO 12/FORMAT='4A'.
-PRINT x/FORMAT=A3.
-
-COMPUTE y={}.
-LOOP IF NOT EOF('matrix2.txt').
-READ x/FILE='matrix2.txt'/SIZE={1,4}/FIELD=1 TO 80.
-COMPUTE y={y; x}.
-END LOOP.
-PRINT y.
-
-COMPUTE m = MAKE(5, 5, 0).
-LOOP i = 1 TO 5.
-READ count /FILE='matrix3.txt' /FIELD=1 TO 1 /SIZE=1.
-READ m(i, 1:count) /FIELD=3 TO 100 /REREAD.
-END LOOP.
-PRINT m.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [0], [dnl
-x
- 9
- 8
- 7
- 6
-
-x
- 1 2 3
- 4 5 6
- 7 8 9
-
-x
- 10 11 12 13
- 14 15 16 17
-
-x
- 10 18 12 13
- 14 19 16 17
-
-x
- 20 21 22 23
- 14 19 16 17
-
-x
- 1 2 3 4 5 6
- 7 8 8 9 10 11
-
-x
- 1 2 3
- 4 5 6
-
-x
- 1 2 3 4
- 5 6 7 8
-
-x
- 1 2 3 4
- 5 6 7 8
-
-x
- abc def ghi jkl
- ABC DEF GHI JKL
-
-y
- 2 3 5 7
- 11 13 17 19
- 23 29 31 37
- 41 43 47 53
-
-m
- 5 0 0 0 0
- 1 2 3 0 0
- 6 -1 2 5 1
- 8 9 0 0 0
- 1 3 2 0 0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - READ - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-READ !.
-READ x/FILE=!.
-READ x/ENCODING=!.
-READ x/FIELD=!.
-READ x/FIELD=1 !.
-READ x/FIELD=1 TO !.
-READ x/FIELD=1 TO 0.
-READ x/FIELD=1 TO 10 BY !.
-READ x/FIELD=1 TO 10 BY 6.
-READ x/SIZE=!.
-READ x/MODE=!.
-READ x/FORMAT=!.
-READ x/FORMAT=F8.2/FORMAT=F8.2.
-READ x/FORMAT='5XYZZY'.
-READ x/FORMAT=XYZZY.
-READ x/!.
-READ x.
-READ x/FIELD=1 TO 10.
-READ x/FIELD=1 TO 10/SIZE={1,2}.
-READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
-READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
-READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
-READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
-READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
-READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
-COMPUTE x={1,2,3}.
-READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
-READ x/FIELD=1 TO 10/SIZE={1,3}/FILE='matrix.txt'/MODE=SYMMETRIC.
-READ x/FIELD=1 TO 10/SIZE=2/FILE='matrix.txt'.
-END MATRIX.
-])
-AT_DATA([matrix.txt], [dnl
-xyzzy
-.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.6: error: READ: Syntax error expecting identifier.
- 2 | READ !.
- | ^
-
-matrix.sps:3.13: error: READ: Syntax error expecting a file name or handle
-name.
- 3 | READ x/FILE=!.
- | ^
-
-matrix.sps:4.17: error: READ: Syntax error expecting string.
- 4 | READ x/ENCODING=!.
- | ^
-
-matrix.sps:5.14: error: READ: Syntax error expecting positive integer for
-FIELD.
- 5 | READ x/FIELD=!.
- | ^
-
-matrix.sps:6.16: error: READ: Syntax error expecting `TO'.
- 6 | READ x/FIELD=1 !.
- | ^
-
-matrix.sps:7.19: error: READ: Syntax error expecting positive integer for TO.
- 7 | READ x/FIELD=1 TO !.
- | ^
-
-matrix.sps:8.19: error: READ: Syntax error expecting positive integer for TO.
- 8 | READ x/FIELD=1 TO 0.
- | ^
-
-matrix.sps:9.25: error: READ: Syntax error expecting integer between 1 and 10
-for BY.
- 9 | READ x/FIELD=1 TO 10 BY !.
- | ^
-
-matrix.sps:10.14-10.25: error: READ: Field width 6 does not evenly divide
-record width 10.
- 10 | READ x/FIELD=1 TO 10 BY 6.
- | ^~~~~~~~~~~~
-
-matrix.sps:10.14-10.20: note: READ: This syntax designates the record width.
- 10 | READ x/FIELD=1 TO 10 BY 6.
- | ^~~~~~~
-
-matrix.sps:10.25: note: READ: This syntax specifies the field width.
- 10 | READ x/FIELD=1 TO 10 BY 6.
- | ^
-
-matrix.sps:11.13: error: READ: Syntax error expecting matrix expression.
- 11 | READ x/SIZE=!.
- | ^
-
-matrix.sps:12.13: error: READ: Syntax error expecting RECTANGULAR or SYMMETRIC.
- 12 | READ x/MODE=!.
- | ^
-
-matrix.sps:13.15: error: READ: Syntax error expecting identifier.
- 13 | READ x/FORMAT=!.
- | ^
-
-matrix.sps:14.20-14.25: error: READ: Subcommand FORMAT may only be specified
-once.
- 14 | READ x/FORMAT=F8.2/FORMAT=F8.2.
- | ^~~~~~
-
-matrix.sps:15.15-15.22: error: READ: Unknown format XYZZY.
- 15 | READ x/FORMAT='5XYZZY'.
- | ^~~~~~~~
-
-matrix.sps:16.15-16.19: error: READ: Unknown format type `XYZZY'.
- 16 | READ x/FORMAT=XYZZY.
- | ^~~~~
-
-matrix.sps:17.8: error: READ: Syntax error expecting FILE, FIELD, MODE, REREAD,
-or FORMAT.
- 17 | READ x/!.
- | ^
-
-matrix.sps:18.1-18.7: error: READ: Required subcommand FIELD was not specified.
- 18 | READ x.
- | ^~~~~~~
-
-matrix.sps:19: error: READ: SIZE is required for reading data into a full
-matrix (as opposed to a submatrix).
-
-matrix.sps:19.6: note: READ: This expression designates a full matrix.
- 19 | READ x/FIELD=1 TO 10.
- | ^
-
-matrix.sps:20.1-20.32: error: READ: Required subcommand FILE was not specified.
- 20 | READ x/FIELD=1 TO 10/SIZE={1,2}.
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-matrix.sps:21: error: READ: 15 repetitions cannot fit in record width 10.
-
-matrix.sps:21.57-21.61: note: READ: This syntax designates the number of
-repetitions.
- 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
- | ^~~~~
-
-matrix.sps:21.14-21.20: note: READ: This syntax designates the record width.
- 21 | READ x/FIELD=1 TO 10/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='15F'.
- | ^~~~~~~
-
-matrix.sps:22: error: READ: This command specifies two different field widths.
-
-matrix.sps:22.62-22.63: note: READ: This syntax specifies field width 5.
- 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
- | ^~
-
-matrix.sps:22.25: note: READ: This syntax specifies field width 2.
- 22 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT=F5.
- | ^
-
-matrix.sps:23: error: READ: This command specifies two different field widths.
-
-matrix.sps:23.62-23.65: note: READ: This syntax specifies 2 repetitions.
- 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
- | ^~~~
-
-matrix.sps:23.14-23.20: note: READ: This syntax designates record width 10,
-which divided by 2 repetitions implies field width 5.
- 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
- | ^~~~~~~
-
-matrix.sps:23.25: note: READ: This syntax specifies field width 2.
- 23 | READ x/FIELD=1 TO 10 BY 2/SIZE={1,2}/FILE='xyzzy.txt'/FORMAT='2F'.
- | ^
-
-matrix.sps:24.27-24.35: error: MATRIX: SIZE must evaluate to a scalar or a 2-
-element vector, not a 2×2 matrix.
- 24 | READ x/FIELD=1 TO 10/SIZE={1,2;3,4}/FILE='matrix.txt'.
- | ^~~~~~~~~
-
-matrix.sps:25.27-25.33: error: MATRIX: SIZE must evaluate to a scalar or a 2-
-element vector, not a 1×3 matrix.
- 25 | READ x/FIELD=1 TO 10/SIZE={1,2,3}/FILE='matrix.txt'.
- | ^~~~~~~
-
-matrix.sps:26.28-26.29: error: MATRIX: Matrix dimensions -1×1 specified on SIZE
-are outside valid range.
- 26 | READ x/FIELD=1 TO 10/SIZE={-1}/FILE='matrix.txt'.
- | ^~
-
-matrix.sps:28: error: MATRIX: Dimensions specified on SIZE differ from
-dimensions of destination submatrix.
-
-matrix.sps:28.32-28.36: note: MATRIX: SIZE specifies dimensions 2×2.
- 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
- | ^~~~~
-
-matrix.sps:28.6-28.11: note: MATRIX: Destination submatrix has dimensions 1×3.
- 28 | READ x(:,:)/FIELD=1 TO 10/SIZE={2,2}/FILE='matrix.txt'.
- | ^~~~~~
-
-matrix.sps:29: error: MATRIX: Cannot read non-square 1×3 matrix using READ with
-MODE=SYMMETRIC.
-
-matrix.txt:1.1-1.5: warning: Error reading "xyzzy" as format F for matrix row
-1, column 1: Field contents are not numeric.
-
-matrix.txt:2.1: warning: Error reading "." as format F for matrix row 2, column
-1: Matrix data may not contain missing value.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - WRITE])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 80.
-WRITE {1.5, 2; 3, 4.12345}/OUTFILE='matrix.txt'/FIELD=1 TO 5.
-WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80 BY 5.
-WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=F8.2.
-WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=E.
-WRITE {1, 2; 3, 4}/OUTFILE='matrix.txt'/FIELD=1 TO 10 BY 10/FORMAT=E.
-WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A8.
-WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=A4.
-WRITE "abcdefhi"/OUTFILE='matrix.txt'/FIELD=1 TO 80/FORMAT=AHEX12.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps])
-AT_CHECK([cat matrix.txt], [0], [dnl
- 1.5 2
- 3 4.12345
- 1.5 2
- 3
- 4.12345
- 1 2
- 3 4
- 1.00 2.00
- 3.00 4.00
- 1 2
- 3 4
- 1.E+000
- 2.E+000
- 3.E+000
- 4.E+000
- abcdefhi
- abcd
- 616263646566
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - WRITE - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-WRITE !.
-WRITE 1/OUTFILE=!.
-WRITE 1/ENCODING=!.
-WRITE 1/FIELD=!.
-WRITE 1/FIELD=1 !.
-WRITE 1/FIELD=1 TO 0.
-WRITE 1/FIELD=1 TO 10 BY 20.
-WRITE 1/FIELD=1 TO 10 BY 6.
-WRITE 1/MODE=TRAPEZOIDAL.
-WRITE 1/FORMAT=F5/FORMAT=F5.
-WRITE 1/FORMAT='5ASDF'.
-WRITE 1/FORMAT=ASDF5.
-WRITE 1/!.
-WRITE 1.
-WRITE 1/FIELD=1 TO 10.
-WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
-WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
-WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
-WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
-WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.7: error: WRITE: Syntax error expecting matrix expression.
- 2 | WRITE !.
- | ^
-
-matrix.sps:3.17: error: WRITE: Syntax error expecting a file name or handle
-name.
- 3 | WRITE 1/OUTFILE=!.
- | ^
-
-matrix.sps:4.18: error: WRITE: Syntax error expecting string.
- 4 | WRITE 1/ENCODING=!.
- | ^
-
-matrix.sps:5.15: error: WRITE: Syntax error expecting positive integer for
-FIELD.
- 5 | WRITE 1/FIELD=!.
- | ^
-
-matrix.sps:6.17: error: WRITE: Syntax error expecting `TO'.
- 6 | WRITE 1/FIELD=1 !.
- | ^
-
-matrix.sps:7.20: error: WRITE: Syntax error expecting positive integer for TO.
- 7 | WRITE 1/FIELD=1 TO 0.
- | ^
-
-matrix.sps:8.26-8.27: error: WRITE: Syntax error expecting integer between 1
-and 10 for BY.
- 8 | WRITE 1/FIELD=1 TO 10 BY 20.
- | ^~
-
-matrix.sps:9.15-9.26: error: WRITE: Field width 6 does not evenly divide record
-width 10.
- 9 | WRITE 1/FIELD=1 TO 10 BY 6.
- | ^~~~~~~~~~~~
-
-matrix.sps:9.15-9.21: note: WRITE: This syntax designates the record width.
- 9 | WRITE 1/FIELD=1 TO 10 BY 6.
- | ^~~~~~~
-
-matrix.sps:9.26: note: WRITE: This syntax specifies the field width.
- 9 | WRITE 1/FIELD=1 TO 10 BY 6.
- | ^
-
-matrix.sps:10.14-10.24: error: WRITE: Syntax error expecting RECTANGULAR or
-TRIANGULAR.
- 10 | WRITE 1/MODE=TRAPEZOIDAL.
- | ^~~~~~~~~~~
-
-matrix.sps:11.19-11.24: error: WRITE: Subcommand FORMAT may only be specified
-once.
- 11 | WRITE 1/FORMAT=F5/FORMAT=F5.
- | ^~~~~~
-
-matrix.sps:12.16-12.22: error: WRITE: Unknown format ASDF.
- 12 | WRITE 1/FORMAT='5ASDF'.
- | ^~~~~~~
-
-matrix.sps:13.16-13.20: error: WRITE: Unknown format type `ASDF'.
- 13 | WRITE 1/FORMAT=ASDF5.
- | ^~~~~
-
-matrix.sps:14.9: error: WRITE: Syntax error expecting OUTFILE, FIELD, MODE,
-HOLD, or FORMAT.
- 14 | WRITE 1/!.
- | ^
-
-matrix.sps:15.1-15.8: error: WRITE: Required subcommand FIELD was not
-specified.
- 15 | WRITE 1.
- | ^~~~~~~~
-
-matrix.sps:16.1-16.22: error: WRITE: Required subcommand OUTFILE was not
-specified.
- 16 | WRITE 1/FIELD=1 TO 10.
- | ^~~~~~~~~~~~~~~~~~~~~~
-
-matrix.sps:17.51-17.55: note: WRITE: This syntax designates the number of
-repetitions.
- 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
- | ^~~~~
-
-matrix.sps:17.15-17.21: note: WRITE: This syntax designates the record width.
- 17 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT='15F'.
- | ^~~~~~~
-
-matrix.sps:18: error: WRITE: This command specifies two different field widths.
-
-matrix.sps:18.56-18.59: note: WRITE: This syntax specifies 5 repetitions.
- 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
- | ^~~~
-
-matrix.sps:18.15-18.21: note: WRITE: This syntax designates record width 10,
-which divided by 5 repetitions implies field width 2.
- 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
- | ^~~~~~~
-
-matrix.sps:18.26: note: WRITE: This syntax specifies field width 5.
- 18 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT='5F'.
- | ^
-
-matrix.sps:19: error: WRITE: Output format E5.0 specifies width 5, but E
-requires a width between 6 and 40.
-
-matrix.sps:19.56: note: WRITE: This syntax specifies format E.
- 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
- | ^
-
-matrix.sps:19.26: note: WRITE: This syntax specifies field width 5.
- 19 | WRITE 1/FIELD=1 TO 10 BY 5/OUTFILE='matrix.txt'/FORMAT=E.
- | ^
-
-matrix.sps:20.51-20.52: error: WRITE: Format A9 is too wide for 8-byte matrix
-elements.
- 20 | WRITE 1/FIELD=1 TO 10/OUTFILE='matrix.txt'/FORMAT=A9.
- | ^~
-
-matrix.sps:21.7-21.11: error: MATRIX: WRITE with MODE=TRIANGULAR requires a
-square matrix but the matrix to be written has dimensions 1×2.
- 21 | WRITE {1,2}/FIELD=1 TO 10/OUTFILE='matrix.txt'/MODE=TRIANGULAR.
- | ^~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - GET])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /a b c.
-MISSING VALUES a(1) b(5).
-BEGIN DATA.
-0 0 0
-1 2 3
-4 5 6
-7 8 .
-END DATA.
-
-MATRIX.
-GET x0 /NAMES=names0.
-PRINT x0.
-PRINT names0/FORMAT=A8.
-END MATRIX.
-
-MATRIX.
-GET x1 /VARIABLES=a b c /NAMES=names1 /MISSING=OMIT.
-PRINT x1.
-PRINT names1/FORMAT=A8.
-END MATRIX.
-
-MATRIX.
-GET x2 /VARIABLES=a b /NAMES=names2 /MISSING=OMIT.
-PRINT x2.
-PRINT names2/FORMAT=A8.
-END MATRIX.
-
-MATRIX.
-GET x3 /FILE=* /VARIABLES=a b c /NAMES=names3 /MISSING=5.
-PRINT x3.
-PRINT names3/FORMAT=A8.
-END MATRIX.
-
-MATRIX.
-GET x4 /FILE=* /VARIABLES=a b /NAMES=names4 /MISSING=5.
-PRINT x4.
-PRINT names4/FORMAT=A8.
-END MATRIX.
-
-SAVE OUTFILE='matrix.sav'.
-NEW FILE.
-
-MATRIX.
-GET x5 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names5 /MISSING=ACCEPT.
-PRINT x5.
-PRINT names5/FORMAT=A8.
-END MATRIX.
-
-MATRIX.
-GET x6 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names6 /MISSING=ACCEPT /SYSMIS=9.
-PRINT x6.
-PRINT names6/FORMAT=A8.
-END MATRIX.
-
-MATRIX.
-GET x7 /FILE='matrix.sav' /VARIABLES=a b c /NAMES=names7 /MISSING=ACCEPT /SYSMIS=OMIT.
-PRINT x7.
-PRINT names7/FORMAT=A8.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:11: error: MATRIX: Variable a in case 2 has user-missing value 1.
-
-matrix.sps:12.7-12.8: error: MATRIX: Uninitialized variable x0 used in
-expression.
- 12 | PRINT x0.
- | ^~
-
-names0
- a
- b
- c
-
-matrix.sps:17: error: MATRIX: Variable c in case 4 is system-missing.
-
-matrix.sps:18.7-18.8: error: MATRIX: Uninitialized variable x1 used in
-expression.
- 18 | PRINT x1.
- | ^~
-
-names1
- a
- b
- c
-
-x2
- 0 0
- 7 8
-
-names2
- a
- b
-
-matrix.sps:29: error: MATRIX: Variable c in case 4 is system-missing.
-
-matrix.sps:30.7-30.8: error: MATRIX: Uninitialized variable x3 used in
-expression.
- 30 | PRINT x3.
- | ^~
-
-names3
- a
- b
- c
-
-x4
- 0 0
- 5 2
- 4 5
- 7 8
-
-names4
- a
- b
-
-matrix.sps:44: error: MATRIX: Variable c in case 4 is system-missing.
-
-matrix.sps:45.7-45.8: error: MATRIX: Uninitialized variable x5 used in
-expression.
- 45 | PRINT x5.
- | ^~
-
-names5
- a
- b
- c
-
-x6
- 0 0 0
- 1 2 3
- 4 5 6
- 7 8 9
-
-names6
- a
- b
- c
-
-x7
- 0 0 0
- 1 2 3
- 4 5 6
-
-names7
- a
- b
- c
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - GET - negative])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /a b c * d(a1).
-MISSING VALUES a(1) b(5).
-BEGIN DATA.
-0 0 0 a
-1 2 3 b
-4 5 6 b
-7 8 . d
-END DATA.
-SAVE OUTFILE='matrix.sav'.
-
-MATRIX.
-GET !.
-GET x/VARIABLES=!.
-GET x/FILE=!.
-GET x/ENCODING=!.
-GET x/NAMES=!.
-GET x/MISSING=!.
-GET x/SYSMIS=!.
-GET x/!.
-GET x/VARIABLES=!.
-GET x/VARIABLES=x TO !.
-GET x/VARIABLES=x.
-GET x/VARIABLES=c TO a.
-GET x/VARIABLES=d.
-GET x.
-END MATRIX.
-
-NEW FILE.
-MATRIX.
-GET x/VARIABLES=a.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:12.5: error: GET: Syntax error expecting identifier.
- 12 | GET !.
- | ^
-
-matrix.sps:13.17: error: GET: Syntax error expecting variable name.
- 13 | GET x/VARIABLES=!.
- | ^
-
-matrix.sps:14.12: error: GET: Syntax error expecting a file name or handle
-name.
- 14 | GET x/FILE=!.
- | ^
-
-matrix.sps:15.16: error: GET: Syntax error expecting string.
- 15 | GET x/ENCODING=!.
- | ^
-
-matrix.sps:16.13: error: GET: Syntax error expecting identifier.
- 16 | GET x/NAMES=!.
- | ^
-
-matrix.sps:17.15: error: GET: Syntax error expecting ACCEPT or OMIT or a number
-for MISSING.
- 17 | GET x/MISSING=!.
- | ^
-
-matrix.sps:18.14: error: GET: Syntax error expecting OMIT or a number for
-SYSMIS.
- 18 | GET x/SYSMIS=!.
- | ^
-
-matrix.sps:19.7: error: GET: Syntax error expecting FILE, VARIABLES, NAMES,
-MISSING, or SYSMIS.
- 19 | GET x/!.
- | ^
-
-matrix.sps:20.17: error: GET: Syntax error expecting variable name.
- 20 | GET x/VARIABLES=!.
- | ^
-
-matrix.sps:21.22: error: GET: Syntax error expecting variable name.
- 21 | GET x/VARIABLES=x TO !.
- | ^
-
-matrix.sps:22.17: error: MATRIX: x is not a variable name.
- 22 | GET x/VARIABLES=x.
- | ^
-
-matrix.sps:23.17-23.22: error: MATRIX: c TO a is not valid syntax since c
-precedes a in the dictionary.
- 23 | GET x/VARIABLES=c TO a.
- | ^~~~~~
-
-matrix.sps:24.17: error: MATRIX: d is not a numeric variable.
- 24 | GET x/VARIABLES=d.
- | ^
-
-matrix.sps:25: error: MATRIX: Variable d is not numeric.
-
-matrix.sps:30: error: MATRIX: The GET command cannot read an empty active file.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - SAVE])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-SAVE {1,2,3; 4,5,6}/OUTFILE='matrix.sav'.
-SAVE {7,8,9}/VARIABLES=a b c d.
-
-SAVE {1,2,3}/OUTFILE='matrix2.sav'/VARIABLES=v01 TO v03.
-SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
-
-SAVE {1,'abcd',3}/OUTFILE='matrix3.sav'/NAMES={'a', 'b', 'c'}/STRINGS=b.
-SAVE {4,'xyzw',6}/STRINGS=a, b.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps])
-AT_CHECK([pspp-convert matrix.sav matrix.csv && cat matrix.csv], [0], [dnl
-COL1,COL2,COL3
-1,2,3
-4,5,6
-7,8,9
-])
-AT_CHECK([pspp-convert matrix2.sav matrix2.csv && cat matrix2.csv], [0], [dnl
-v01,v02,v03
-1,2,3
-4,5,6
-])
-AT_CHECK([pspp-convert matrix3.sav matrix3.csv && cat matrix3.csv], [0], [dnl
-a,b,c
-1,abcd,3
-4,xyzw,6
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - SAVE - inline])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-SAVE {1,2,3; 4,5,6}/OUTFILE=*.
-SAVE {7,8,9}/VARIABLES=a b c d.
-END MATRIX.
-LIST.
-
-MATRIX.
-SAVE {1,2,3}/OUTFILE=*/VARIABLES=v01 TO v03.
-SAVE {4,5,6}/NAMES={'x', 'y', 'z', 'w'}.
-END MATRIX.
-LIST.
-
-MATRIX.
-SAVE {1,'abcd',3}/OUTFILE=*/NAMES={'a', 'b', 'c'}/STRINGS=b.
-SAVE {4,'xyzw',6}/STRINGS=a, b.
-END MATRIX.
-LIST.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Data List
-COL1,COL2,COL3
-1.00,2.00,3.00
-4.00,5.00,6.00
-7.00,8.00,9.00
-
-Table: Data List
-v01,v02,v03
-1.00,2.00,3.00
-4.00,5.00,6.00
-
-Table: Data List
-a,b,c
-1.00,abcd,3.00
-4.00,xyzw,6.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - SAVE - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-SAVE !.
-SAVE 1/OUTFILE=!.
-SAVE 1/VARIABLES=!.
-SAVE 1/NAMES=!.
-SAVE 1/!.
-SAVE 1.
-SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
-SAVE 1/OUTFILE='matrix2.sav'.
-SAVE {1,2}/OUTFILE='matrix2.sav'.
-SAVE {1,2}/OUTFILE='matrix3.sav'/NAMES={'a', 'a'}.
-SAVE {1,2}/OUTFILE='matrix4.sav'/STRINGS=a.
-SAVE {1,2}/OUTFILE='matrix5.sav'/STRINGS=a, b.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.6: error: SAVE: Syntax error expecting matrix expression.
- 2 | SAVE !.
- | ^
-
-matrix.sps:3.16: error: SAVE: Syntax error expecting a file name or handle
-name.
- 3 | SAVE 1/OUTFILE=!.
- | ^
-
-matrix.sps:4.18: error: SAVE: Syntax error expecting variable name.
- 4 | SAVE 1/VARIABLES=!.
- | ^
-
-matrix.sps:5.14: error: SAVE: Syntax error expecting matrix expression.
- 5 | SAVE 1/NAMES=!.
- | ^
-
-matrix.sps:6.8: error: SAVE: Syntax error expecting OUTFILE, VARIABLES, NAMES,
-or STRINGS.
- 6 | SAVE 1/!.
- | ^
-
-matrix.sps:7.1-7.7: error: SAVE: Required subcommand OUTFILE was not specified.
- 7 | SAVE 1.
- | ^~~~~~~
-
-matrix.sps:8.35-8.39: warning: SAVE: Ignoring NAMES because VARIABLES was also
-specified.
- 8 | SAVE 1/OUTFILE='matrix.sav'/NAMES={'a'}/VARIABLES=a.
- | ^~~~~
-
-matrix.sps:10: error: MATRIX: Cannot save 1×2 matrix to `matrix2.sav' because
-the first SAVE to `matrix2.sav' in this matrix program wrote a 1-column matrix.
-
-matrix.sps:9: error: MATRIX: This is the location of the first SAVE to
-`matrix2.sav'.
-
-error: Duplicate variable name a in SAVE statement.
-
-error: The SAVE command STRINGS subcommand specifies an unknown variable a.
-
-error: The SAVE command STRINGS subcommand specifies 2 unknown variables,
-including a.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET])
-AT_DATA([matrix.sps], [dnl
-MATRIX DATA
- VARIABLES=ROWTYPE_ var01 TO var08.
-BEGIN DATA.
-MEAN 24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
-SD 5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
-N 92 92 92 92 92 92 92 92
-CORR 1.00
-CORR .18 1.00
-CORR -.22 -.17 1.00
-CORR .36 .31 -.14 1.00
-CORR .27 .16 -.12 .22 1.00
-CORR .33 .15 -.17 .24 .21 1.00
-CORR .50 .29 -.20 .32 .12 .38 1.00
-CORR .17 .29 -.05 .20 .27 .20 .04 1.00
-END DATA.
-
-MATRIX.
-MGET.
-PRINT MN/FORMAT=F5.1.
-PRINT SD/FORMAT=F5.1.
-PRINT NC/FORMAT=F5.0.
-PRINT CR/FORMAT=F5.2.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Matrix Variables Created by MGET
-,Dimensions,
-,Rows,Columns
-MN,1,8
-SD,1,8
-NC,1,8
-CR,8,8
-
-MN
-24.3 5.4 69.7 20.1 13.4 2.7 27.9 3.7
-
-SD
-5.7 1.5 23.5 5.8 2.8 4.5 5.4 1.5
-
-NC
-92 92 92 92 92 92 92 92
-
-CR
-1.00 .18 -.22 .36 .27 .33 .50 .17
-.18 1.00 -.17 .31 .16 .15 .29 .29
--.22 -.17 1.00 -.14 -.12 -.17 -.20 -.05
-.36 .31 -.14 1.00 .22 .24 .32 .20
-.27 .16 -.12 .22 1.00 .21 .12 .27
-.33 .15 -.17 .24 .21 1.00 .38 .20
-.50 .29 -.20 .32 .12 .38 1.00 .04
-.17 .29 -.05 .20 .27 .20 .04 1.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET with split variables])
-AT_DATA([matrix.sps], [dnl
-matrix data
- variables = s1 s2 rowtype_ var01 var02 var03
- /split=s1 s2.
-
-begin data
-8 0 mean 21.4 5.0 72.9
-8 0 sd 6.5 1.6 22.8
-8 0 n 106 106 106
-8 0 corr 1
-8 0 corr .41 1
-8 0 corr -.16 -.22 1
-8 1 mean 11.4 1.0 52.9
-8 1 sd 9.5 8.6 12.8
-8 1 n 10 11 12
-8 1 corr 1
-8 1 corr .51 1
-8 1 corr .36 -.41 1
-end data.
-
-MATRIX.
-MGET.
-PRINT MNS1/FORMAT=F5.1.
-PRINT SDS1/FORMAT=F5.1.
-PRINT NCS1/FORMAT=F5.0.
-PRINT CRS1/FORMAT=F5.2.
-PRINT MNS2/FORMAT=F5.1.
-PRINT SDS2/FORMAT=F5.1.
-PRINT NCS2/FORMAT=F5.0.
-PRINT CRS2/FORMAT=F5.2.
-END MATRIX.
-])
-AT_CHECK([pspp -O format=csv matrix.sps], [0], [dnl
-Table: Matrix Variables Created by MGET
-,Split Values,,Dimensions,
-,s1,s2,Rows,Columns
-MNS1,8,0,1,3
-SDS1,8,0,1,3
-NCS1,8,0,1,3
-CRS1,8,0,3,3
-MNS2,8,1,1,3
-SDS2,8,1,1,3
-NCS2,8,1,1,3
-CRS2,8,1,3,3
-
-MNS1
-21.4 5.0 72.9
-
-SDS1
-6.5 1.6 22.8
-
-NCS1
-106 106 106
-
-CRS1
-1.00 .41 -.16
-.41 1.00 -.22
--.16 -.22 1.00
-
-MNS2
-11.4 1.0 52.9
-
-SDS2
-9.5 8.6 12.8
-
-NCS2
-10 11 12
-
-CRS2
-1.00 .51 .36
-.51 1.00 -.41
-.36 -.41 1.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET with factor variables])
-AT_DATA([matrix.sps], [dnl
-MATRIX DATA
- VARIABLES=ROWTYPE_ f1 var01 TO var04
- /FACTOR=f1.
-BEGIN DATA.
-MEAN 0 34 35 36 37
-SD 0 22 11 55 66
-N 0 99 98 99 92
-MEAN 1 44 45 34 39
-SD 1 23 15 51 46
-N 1 98 34 87 23
-CORR . 1
-CORR . .9 1
-CORR . .8 .6 1
-CORR . .7 .5 .4 1
-END DATA.
-FORMATS var01 TO var04(F5.1).
-SAVE OUTFILE='matrix.sav'.
-])
-AT_DATA([matrix2.sps], [dnl
-MATRIX.
-MGET FILE='matrix.sav'.
-PRINT MNF1/FORMAT=F2.0.
-PRINT SDF1/FORMAT=F2.0.
-PRINT NCF1/FORMAT=F2.0.
-PRINT MNF2/FORMAT=F2.0.
-PRINT SDF2/FORMAT=F2.0.
-PRINT NCF2/FORMAT=F2.0.
-PRINT CR/FORMAT=F3.1.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps])
-AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
-Table: Matrix Variables Created by MGET
-,Factors,Dimensions,
-,f1,Rows,Columns
-MNF1,0,1,4
-SDF1,0,1,4
-NCF1,0,1,4
-MNF2,1,1,4
-SDF2,1,1,4
-NCF2,1,1,4
-CR,.,4,4
-
-MNF1
-34 35 36 37
-
-SDF1
-22 11 55 66
-
-NCF1
-99 98 99 92
-
-MNF2
-44 45 34 39
-
-SDF2
-23 15 51 46
-
-NCF2
-98 34 87 23
-
-CR
-1.0 .9 .8 .7
-.9 1.0 .6 .5
-.8 .6 1.0 .4
-.7 .5 .4 1.0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET with factor and split variables])
-AT_DATA([matrix.sps], [dnl
-matrix data
- variables = s f rowtype_ var01 var02 var03
- /split=s
- /factor=f.
-
-begin data
-8 0 mean 21.4 5.0 72.9
-8 0 sd 6.5 1.6 22.8
-8 0 n 106 106 106
-8 . corr 1
-8 . corr .41 1
-8 . corr -.16 -.22 1
-9 1 mean 11.4 1.0 52.9
-9 1 sd 9.5 8.6 12.8
-9 1 n 10 11 12
-9 . corr 1
-9 . corr .51 1
-9 . corr .36 -.41 1
-end data.
-
-MATRIX.
-MGET.
-PRINT MNF1S1/FORMAT=F5.1.
-PRINT SDF1S1/FORMAT=F5.1.
-PRINT NCF1S1/FORMAT=F5.0.
-PRINT CRS1/FORMAT=F5.2.
-PRINT MNF1S2/FORMAT=F5.1.
-PRINT SDF1S2/FORMAT=F5.1.
-PRINT NCF1S2/FORMAT=F5.0.
-PRINT CRS2/FORMAT=F5.2.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Matrix Variables Created by MGET
-,Split Values,Factors,Dimensions,
-,s,f,Rows,Columns
-MNF1S1,8,0,1,3
-SDF1S1,8,0,1,3
-NCF1S1,8,0,1,3
-CRS1,8,.,3,3
-MNF1S2,9,1,1,3
-SDF1S2,9,1,1,3
-NCF1S2,9,1,1,3
-CRS2,9,.,3,3
-
-MNF1S1
-21.4 5.0 72.9
-
-SDF1S1
-6.5 1.6 22.8
-
-NCF1S1
-106 106 106
-
-CRS1
-1.00 .41 -.16
-.41 1.00 -.22
--.16 -.22 1.00
-
-MNF1S2
-11.4 1.0 52.9
-
-SDF1S2
-9.5 8.6 12.8
-
-NCF1S2
-10 11 12
-
-CRS2
-1.00 .51 .36
-.51 1.00 -.41
-.36 -.41 1.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET with TYPE])
-AT_DATA([matrix.sps], [dnl
-MATRIX DATA
- VARIABLES=ROWTYPE_ f1 var01 TO var04
- /FACTOR=f1.
-BEGIN DATA.
-MEAN 0 34 35 36 37
-SD 0 22 11 55 66
-N 0 99 98 99 92
-MEAN 1 44 45 34 39
-SD 1 23 15 51 46
-N 1 98 34 87 23
-CORR . 1
-CORR . .9 1
-CORR . .8 .6 1
-CORR . .7 .5 .4 1
-END DATA.
-FORMATS var01 TO var04(F5.1).
-SAVE OUTFILE='matrix.sav'.
-])
-AT_DATA([matrix2.sps], [dnl
-MATRIX.
-MGET/FILE='matrix.sav'/TYPE=CORR.
-PRINT CR/FORMAT=F3.1.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps])
-AT_CHECK([pspp -O format=csv matrix2.sps], [0], [dnl
-Table: Matrix Variables Created by MGET
-,Factors,Dimensions,
-,f1,Rows,Columns
-CR,.,4,4
-
-CR
-1.0 .9 .8 .7
-.9 1.0 .6 .5
-.8 .6 1.0 .4
-.7 .5 .4 1.0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - negative - parsing])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-MGET !.
-MGET FILE=!.
-MGET ENCODING=!.
-MGET TYPE=!.
-MGET TYPE=CORR !.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.6: error: MGET: Syntax error expecting FILE or TYPE.
- 2 | MGET !.
- | ^
-
-matrix.sps:3.11: error: MGET: Syntax error expecting a file name or handle
-name.
- 3 | MGET FILE=!.
- | ^
-
-matrix.sps:4.15: error: MGET: Syntax error expecting string.
- 4 | MGET ENCODING=!.
- | ^
-
-matrix.sps:5.11: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
-N, or COUNT.
- 5 | MGET TYPE=!.
- | ^
-
-matrix.sps:6.16: error: MGET: Syntax error expecting COV, CORR, MEAN, STDDEV,
-N, or COUNT.
- 6 | MGET TYPE=CORR !.
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - missing VARNAME_ and ROWTYPE_])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /x.
-BEGIN DATA.
-1
-END DATA.
-
-MATRIX.
-MGET.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:7: error: MATRIX: Matrix data file lacks ROWTYPE_ variable.
-
-matrix.sps:7: error: MATRIX: Matrix data file lacks VARNAME_ variable.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - wrong format for VARNAME_ and ROWTYPE_])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /VARNAME_ * ROWTYPE_ (A7).
-BEGIN DATA.
-1 asdf
-END DATA.
-
-MATRIX.
-MGET.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:7: error: MATRIX: ROWTYPE_ variable in matrix data file must be 8-
-byte string, but it has width 7.
-
-matrix.sps:7: error: MATRIX: VARNAME_ variable in matrix data file must be 8-
-byte string, but it has width 0.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - wrong order for VARNAME_ and ROWTYPE_])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /VARNAME_ ROWTYPE_ (A8).
-BEGIN DATA.
-asdf jkl;
-END DATA.
-
-MATRIX.
-MGET.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:7: error: MATRIX: ROWTYPE_ must precede VARNAME_ in matrix data
-file.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - no continuous variables])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8).
-BEGIN DATA.
-asdf jkl;
-END DATA.
-
-MATRIX.
-MGET.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:7: error: MATRIX: Matrix data file contains no continuous variables.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - unexpected string variables])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ cvar1 (A8).
-BEGIN DATA.
-asdf jkl; zxcv
-END DATA.
-
-MATRIX.
-MGET.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:7: error: MATRIX: Matrix data file contains unexpected string
-variable cvar1.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - unknown ROWTYPE_])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
-BEGIN DATA.
-asdf jkl; 1
-END DATA.
-
-MATRIX.
-MGET.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
-"matrix.sps:7: error: MATRIX: Matrix data file contains unknown ROWTYPE_ ""asdf""."
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - duplicate matrix variable name])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /ROWTYPE_ VARNAME_ (A8) cvar1.
-BEGIN DATA.
-corr jkl; 1
-END DATA.
-
-MATRIX.
-MGET.
-MGET.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Matrix Variables Created by MGET
-,Dimensions,
-,Rows,Columns
-CR,1,1
-
-matrix.sps:8: warning: MATRIX: Matrix data file contains variable with existing name CR.
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MGET - missing values in input])
-AT_DATA([matrix.sps], [dnl
-DATA LIST LIST NOTABLE /s1 * ROWTYPE_ VARNAME_ (A8) cvar1 cvar2.
-BEGIN DATA.
-1 n "" 1 .
-2 n "" . .
-END DATA.
-
-MATRIX.
-MGET.
-PRINT ncs1/FORMAT=F5.
-PRINT ncs2/FORMAT=F5.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [1], [dnl
-"matrix.sps:8: error: MATRIX: Matrix data file variable NCS1 contains a missing value, which was treated as zero."
-
-"matrix.sps:8: error: MATRIX: Matrix data file variable NCS2 contains 2 missing values, which were treated as zero."
-
-Table: Matrix Variables Created by MGET
-,Split Values,Dimensions,
-,s1,Rows,Columns
-NCS1,1.00,1,2
-NCS2,2.00,1,2
-
-ncs1
-1 0
-
-ncs2
-0 0
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MSAVE])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-MSAVE {1, 2; 3, 4}/TYPE=CORR/VARIABLES=X,Y/OUTFILE='matrix.sav'.
-MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV/VARIABLES=X,Y.
-MSAVE {11, 12}/TYPE=MEAN.
-MSAVE {13, 14}/TYPE=STDDEV.
-MSAVE {15, 16}/TYPE=N.
-MSAVE {17, 18}/TYPE=COUNT.
-END MATRIX.
-GET 'matrix.sav'.
-LIST.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Data List
-ROWTYPE_,VARNAME_,X,Y
-CORR,X,1.00,2.00
-CORR,Y,3.00,4.00
-COV,X,5.00,6.00
-COV,Y,7.00,8.00
-COV,,9.00,10.00
-MEAN,,11.00,12.00
-STDDEV,,13.00,14.00
-N,,15.00,16.00
-COUNT,,17.00,18.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MSAVE with factor variables])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={1,1}/FNAMES=X,Y/OUTFILE='matrix.sav'.
-MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
-MSAVE {11, 12}/TYPE=MEAN.
-MSAVE {13, 14}/FACTOR={2,1}/TYPE=STDDEV.
-MSAVE {15, 16}/TYPE=N.
-MSAVE {17, 18}/FACTOR={1,2}/TYPE=COUNT.
-END MATRIX.
-GET 'matrix.sav'.
-LIST.
-
-MATRIX.
-MSAVE {1, 2; 3, 4}/TYPE=CORR/FACTOR={5,6,7,8}/OUTFILE='matrix2.sav'.
-END MATRIX.
-GET 'matrix2.sav'.
-LIST.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Data List
-ROWTYPE_,X,Y,VARNAME_,COL1,COL2
-CORR,1.00,1.00,COL1,1.00,2.00
-CORR,1.00,1.00,COL2,3.00,4.00
-COV,1.00,1.00,COL1,5.00,6.00
-COV,1.00,1.00,COL2,7.00,8.00
-COV,1.00,1.00,,9.00,10.00
-MEAN,1.00,1.00,,11.00,12.00
-STDDEV,2.00,1.00,,13.00,14.00
-N,2.00,1.00,,15.00,16.00
-COUNT,1.00,2.00,,17.00,18.00
-
-Table: Data List
-ROWTYPE_,FAC1,FAC2,FAC3,FAC4,VARNAME_,COL1,COL2
-CORR,5.00,6.00,7.00,8.00,COL1,1.00,2.00
-CORR,5.00,6.00,7.00,8.00,COL2,3.00,4.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MSAVE with split variables])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={1,1}/SNAMES=X,Y/OUTFILE='matrix.sav'.
-MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
-MSAVE {11, 12}/TYPE=MEAN.
-MSAVE {13, 14}/SPLIT={2,1}/TYPE=STDDEV.
-MSAVE {15, 16}/TYPE=N.
-MSAVE {17, 18}/SPLIT={1,2}/TYPE=COUNT.
-END MATRIX.
-GET 'matrix.sav'.
-LIST.
-
-MATRIX.
-MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT={5,6,7,8}/OUTFILE='matrix2.sav'.
-END MATRIX.
-GET 'matrix2.sav'.
-LIST.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Data List
-X,Y,ROWTYPE_,VARNAME_,COL1,COL2
-1.00,1.00,CORR,COL1,1.00,2.00
-1.00,1.00,CORR,COL2,3.00,4.00
-1.00,1.00,COV,COL1,5.00,6.00
-1.00,1.00,COV,COL2,7.00,8.00
-1.00,1.00,COV,,9.00,10.00
-1.00,1.00,MEAN,,11.00,12.00
-2.00,1.00,STDDEV,,13.00,14.00
-2.00,1.00,N,,15.00,16.00
-1.00,2.00,COUNT,,17.00,18.00
-
-Table: Data List
-SPL1,SPL2,SPL3,SPL4,ROWTYPE_,VARNAME_,COL1,COL2
-5.00,6.00,7.00,8.00,CORR,COL1,1.00,2.00
-5.00,6.00,7.00,8.00,CORR,COL2,3.00,4.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MSAVE with factor and split variables])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-MSAVE {1, 2; 3, 4}/TYPE=CORR/SPLIT=1/FACTOR=1/OUTFILE='matrix.sav'.
-MSAVE {5, 6; 7, 8; 9, 10}/TYPE=COV.
-MSAVE {11, 12}/FACTOR=2/TYPE=MEAN.
-MSAVE {13, 14}/FACTOR=1/SPLIT=2/TYPE=STDDEV.
-MSAVE {15, 16}/TYPE=N.
-MSAVE {17, 18}/FACTOR=2/TYPE=COUNT.
-END MATRIX.
-GET 'matrix.sav'.
-LIST.
-])
-AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Data List
-SPL1,ROWTYPE_,FAC1,VARNAME_,COL1,COL2
-1.00,CORR,1.00,COL1,1.00,2.00
-1.00,CORR,1.00,COL2,3.00,4.00
-1.00,COV,1.00,COL1,5.00,6.00
-1.00,COV,1.00,COL2,7.00,8.00
-1.00,COV,1.00,,9.00,10.00
-1.00,MEAN,2.00,,11.00,12.00
-2.00,STDDEV,1.00,,13.00,14.00
-2.00,N,1.00,,15.00,16.00
-2.00,COUNT,2.00,,17.00,18.00
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - MSAVE - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-MSAVE !.
-MSAVE 1/TYPE=!.
-MSAVE 1/OUTFILE=!.
-MSAVE 1/VARIABLES=!.
-MSAVE 1/FNAMES=!.
-MSAVE 1/SNAMES=!.
-MSAVE 1/SPLIT=!.
-MSAVE 1/FACTOR=!.
-MSAVE 1/!.
-MSAVE 1.
-MSAVE 1/TYPE=COV/FNAMES=x.
-MSAVE 1/TYPE=COV/SNAMES=x.
-MSAVE 1/TYPE=COV.
-
-MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
- /FACTOR=1 /FNAMES=y
- /SPLIT=2 /SNAMES=z
- /VARIABLES=w.
-MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
-MSAVE 1/TYPE=COV/VARIABLES=x.
-MSAVE 1/TYPE=COV/FNAMES=x.
-MSAVE 1/TYPE=COV/SNAMES=x.
-END MATRIX.
-
-MATRIX.
-MSAVE 1/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
-MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/SPLIT=2.
-MSAVE {1,2;3}/TYPE=COV.
-MSAVE 0/TYPE=COV/FACTOR={1,2}.
-MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
-END MATRIX.
-
-MATRIX.
-MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
-END MATRIX.
-
-MATRIX.
-MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/FACTOR=1.
-END MATRIX.
-
-MATRIX.
-MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
-END MATRIX.
-
-MATRIX.
-MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
-END MATRIX.
-
-MATRIX.
-MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
-MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
-MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
-MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
-MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
-MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.7: error: MSAVE: Syntax error expecting matrix expression.
- 2 | MSAVE !.
- | ^
-
-matrix.sps:3.14: error: MSAVE: Syntax error expecting COV, CORR, MEAN, STDDEV,
-N, or COUNT.
- 3 | MSAVE 1/TYPE=!.
- | ^
-
-matrix.sps:4.17: error: MSAVE: Syntax error expecting a file name or handle
-name.
- 4 | MSAVE 1/OUTFILE=!.
- | ^
-
-matrix.sps:5.19: error: MSAVE: Syntax error expecting variable name.
- 5 | MSAVE 1/VARIABLES=!.
- | ^
-
-matrix.sps:6.16: error: MSAVE: Syntax error expecting variable name.
- 6 | MSAVE 1/FNAMES=!.
- | ^
-
-matrix.sps:7.16: error: MSAVE: Syntax error expecting variable name.
- 7 | MSAVE 1/SNAMES=!.
- | ^
-
-matrix.sps:8.15: error: MSAVE: Syntax error expecting matrix expression.
- 8 | MSAVE 1/SPLIT=!.
- | ^
-
-matrix.sps:9.16: error: MSAVE: Syntax error expecting matrix expression.
- 9 | MSAVE 1/FACTOR=!.
- | ^
-
-matrix.sps:10.9: error: MSAVE: Syntax error expecting TYPE, OUTFILE, VARIABLES,
-FNAMES, SNAMES, SPLIT, or FACTOR.
- 10 | MSAVE 1/!.
- | ^
-
-matrix.sps:11.1-11.8: error: MSAVE: Required subcommand TYPE was not specified.
- 11 | MSAVE 1.
- | ^~~~~~~~
-
-matrix.sps:12.25: error: MSAVE: FNAMES requires FACTOR.
- 12 | MSAVE 1/TYPE=COV/FNAMES=x.
- | ^
-
-matrix.sps:13.25: error: MSAVE: SNAMES requires SPLIT.
- 13 | MSAVE 1/TYPE=COV/SNAMES=x.
- | ^
-
-matrix.sps:14.1-14.17: error: MSAVE: Required subcommand OUTFILE was not
-specified.
- 14 | MSAVE 1/TYPE=COV.
- | ^~~~~~~~~~~~~~~~~
-
-matrix.sps:20: error: MSAVE: OUTFILE must name the same file on each MSAVE
-within a single MATRIX command.
-
-matrix.sps:16.26-16.37: note: MSAVE: This is the OUTFILE on the first MSAVE
-command.
- 16 | MSAVE 1/TYPE=COV/OUTFILE='matrix.sav'
- | ^~~~~~~~~~~~
-
-matrix.sps:20.26-20.38: note: MSAVE: This is the OUTFILE on a later MSAVE
-command.
- 20 | MSAVE 1/TYPE=COV/OUTFILE='matrix2.sav'.
- | ^~~~~~~~~~~~~
-
-matrix.sps:21: error: MSAVE: VARIABLES must specify the same variables on each
-MSAVE within a given MATRIX.
-
-matrix.sps:19.16: error: MSAVE: This is the specification of VARIABLES on the
-first MSAVE.
- 19 | /VARIABLES=w.
- | ^
-
-matrix.sps:21.28: error: MSAVE: This is a different specification of VARIABLES
-on a later MSAVE.
- 21 | MSAVE 1/TYPE=COV/VARIABLES=x.
- | ^
-
-matrix.sps:22: error: MSAVE: FNAMES must specify the same variables on each
-MSAVE within a given MATRIX.
-
-matrix.sps:17.23: error: MSAVE: This is the specification of FNAMES on the
-first MSAVE.
- 17 | /FACTOR=1 /FNAMES=y
- | ^
-
-matrix.sps:22.25: error: MSAVE: This is a different specification of FNAMES on
-a later MSAVE.
- 22 | MSAVE 1/TYPE=COV/FNAMES=x.
- | ^
-
-matrix.sps:23: error: MSAVE: SNAMES must specify the same variables on each
-MSAVE within a given MATRIX.
-
-matrix.sps:18.22: error: MSAVE: This is the specification of SNAMES on the
-first MSAVE.
- 18 | /SPLIT=2 /SNAMES=z
- | ^
-
-matrix.sps:23.25: error: MSAVE: This is a different specification of SNAMES on
-a later MSAVE.
- 23 | MSAVE 1/TYPE=COV/SNAMES=x.
- | ^
-
-matrix.sps:28.7-28.11: error: MATRIX: Matrix on MSAVE has 2 columns but there
-are 1 variables.
- 28 | MSAVE {1,2}/TYPE=COV/VARIABLES=x/OUTFILE='matrix3.sav'/FACTOR=1/
-SPLIT=2.
- | ^~~~~
-
-matrix.sps:29.7-29.13: error: MATRIX: This expression tries to vertically join
-matrices with differing numbers of columns.
- 29 | MSAVE {1,2;3}/TYPE=COV.
- | ^~~~~~~
-
-matrix.sps:29.8-29.10: note: MATRIX: This operand is a 1×2 matrix.
- 29 | MSAVE {1,2;3}/TYPE=COV.
- | ^~~
-
-matrix.sps:29.12: note: MATRIX: This operand is a 1×1 matrix.
- 29 | MSAVE {1,2;3}/TYPE=COV.
- | ^
-
-matrix.sps:30.25-30.29: error: MATRIX: There are 1 factor variables, but 2
-factor values were supplied.
- 30 | MSAVE 0/TYPE=COV/FACTOR={1,2}.
- | ^~~~~
-
-matrix.sps:31.33-31.37: error: MATRIX: There are 1 split variables, but 2 split
-values were supplied.
- 31 | MSAVE 0/TYPE=COV/FACTOR=1/SPLIT={1;2}.
- | ^~~~~
-
-matrix.sps:35.49: error: MSAVE: Variable x appears twice in variable list.
- 35 | MSAVE 1/TYPE=COV/OUTFILE='matrix4.sav'/SNAMES=x,x/SPLIT=1.
- | ^
-
-matrix.sps:39.56: error: MATRIX: Duplicate or invalid FACTOR variable name x.
- 39 | MSAVE 1/TYPE=COV/OUTFILE='matrix5.sav'/SNAMES=x/FNAMES=x/SPLIT=1/
-FACTOR=1.
- | ^
-
-matrix.sps:43.50: error: MATRIX: Duplicate or invalid variable name x.
- 43 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/FNAMES=x/FACTOR=1.
- | ^
-
-matrix.sps:47.50: error: MATRIX: Duplicate or invalid variable name x.
- 47 | MSAVE 1/TYPE=COV/OUTFILE='matrix6.sav'/VARIABLES=x/SNAMES=x/SPLIT=1.
- | ^
-
-matrix.sps:51.47-51.54: error: MSAVE: Variable name VARNAME_ is reserved.
- 51 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=VARNAME_.
- | ^~~~~~~~
-
-matrix.sps:52.47-52.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
- 52 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/SNAMES=ROWTYPE_.
- | ^~~~~~~~
-
-matrix.sps:53.47-53.54: error: MSAVE: Variable name VARNAME_ is reserved.
- 53 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=VARNAME_.
- | ^~~~~~~~
-
-matrix.sps:54.47-54.54: error: MSAVE: Variable name ROWTYPE_ is reserved.
- 54 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/FNAMES=ROWTYPE_.
- | ^~~~~~~~
-
-matrix.sps:55.50-55.57: error: MSAVE: Variable name VARNAME_ is reserved.
- 55 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=VARNAME_.
- | ^~~~~~~~
-
-matrix.sps:56.50-56.57: error: MSAVE: Variable name ROWTYPE_ is reserved.
- 56 | MSAVE 1/TYPE=COV/OUTFILE='matrix7.sav'/VARIABLES=ROWTYPE_.
- | ^~~~~~~~
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - DISPLAY])
-AT_DATA([matrix-template.sps], [dnl
-MATRIX.
-COMPUTE a={1,2,3}.
-COMPUTE b={1;2;3}.
-COMPUTE c={T(b),a}.
-COMPUTE d={T(a),b}.
-command.
-END MATRIX.
-])
-for command in 'DISPLAY' 'DISPLAY DICTIONARY' 'DISPLAY STATUS'; do
- sed "s/command/$command/" < matrix-template.sps > matrix.sps
- AT_CHECK([pspp matrix.sps -O format=csv], [0], [dnl
-Table: Matrix Variables
-,Dimension,,Size (kB)
-,Rows,Columns,
-a,1,3,0
-b,3,1,0
-c,1,6,0
-d,3,2,0
-])
-done
-AT_CLEANUP
-
-AT_SETUP([MATRIX - DISPLAY - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-DISPLAY !.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.9: error: DISPLAY: Syntax error expecting DICTIONARY or STATUS.
- 2 | DISPLAY !.
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - RELEASE])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-COMPUTE x=1.
-PRINT x.
-RELEASE X.
-PRINT x.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-x
- 1
-
-matrix.sps:5.7: error: MATRIX: Uninitialized variable x used in expression.
- 5 | PRINT x.
- | ^
-])
-AT_CLEANUP
-
-AT_SETUP([MATRIX - RELEASE - negative])
-AT_DATA([matrix.sps], [dnl
-MATRIX.
-RELEASE !.
-RELEASE x.
-COMPUTE x=1.
-RELEASE x, !.
-COMPUTE x=1.
-RELEASE x y.
-COMPUTE x=1.
-RELEASE x.
-RELEASE x.
-END MATRIX.
-])
-AT_CHECK([pspp matrix.sps], [1], [dnl
-matrix.sps:2.9: error: RELEASE: Syntax error expecting end of command.
- 2 | RELEASE !.
- | ^
-
-matrix.sps:3.9: error: RELEASE: Syntax error expecting variable name.
- 3 | RELEASE x.
- | ^
-
-matrix.sps:5.12: error: RELEASE: Syntax error expecting end of command.
- 5 | RELEASE x, !.
- | ^
-
-matrix.sps:7.11: error: RELEASE: Syntax error expecting end of command.
- 7 | RELEASE x y.
- | ^
-])
-AT_CLEANUP
\ No newline at end of file