-8,0,mean ,,21.4000,5.0000,72.9000
-8,0,STDDEV ,,6.5000,1.6000,22.8000
-8,0,n ,,106.0000,106.0000,106.0000
-8,0,corr ,var01,1.0000,.4100,-.1600
-8,0,corr ,var02,.4100,1.0000,-.2200
-8,0,corr ,var03,-.1600,-.2200,1.0000
-8,1,mean ,,11.4000,1.0000,52.9000
-8,1,STDDEV ,,9.5000,8.6000,12.8000
-8,1,n ,,10.0000,11.0000,12.0000
-8,1,corr ,var01,1.0000,.5100,.3600
-8,1,corr ,var02,.5100,1.0000,-.4100
-8,1,corr ,var03,.3600,-.4100,1.0000
+8,0,mean,,21.4000,5.0000,72.9000
+8,0,STDDEV,,6.5000,1.6000,22.8000
+8,0,n,,106.0000,106.0000,106.0000
+8,0,corr,var01,1.0000,.4100,-.1600
+8,0,corr,var02,.4100,1.0000,-.2200
+8,0,corr,var03,-.1600,-.2200,1.0000
+8,1,mean,,11.4000,1.0000,52.9000
+8,1,STDDEV,,9.5000,8.6000,12.8000
+8,1,n,,10.0000,11.0000,12.0000
+8,1,corr,var01,1.0000,.5100,.3600
+8,1,corr,var02,.5100,1.0000,-.4100
+8,1,corr,var03,.3600,-.4100,1.0000
+])
+
+AT_CLEANUP
+
+
+
+
+AT_SETUP([Matrix data duplicate variable])
+
+dnl Negative test to check for sane behaviour in the face of bad syntax
+AT_DATA([matrix-data.pspp], [dnl
+set decimal = dot .
+matrix data
+ variables = s1 s1 rowtype_ var01 var02 var03
+ /split=s1.
+
+begin data
+0 mean 21.4 5.0 72.9
+0 sd 6.5 1.6 22.8
+0 n 106 106 106
+0 corr 1
+0 corr .41 1
+0 corr -.16 -.22 1
+end data .
+
+list.
+])
+
+
+AT_CHECK([pspp -O format=csv matrix-data.pspp], [1], [dnl
+matrix-data.pspp:3: error: MATRIX DATA: Variable s1 appears twice in variable list.
+
+matrix-data.pspp:6: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+
+AT_CLEANUP
+
+
+
+AT_SETUP([Matrix data - long variable names])
+
+AT_DATA([matrix-data.pspp], [dnl
+matrix data
+ variables = rowtype_ var01 var_two variable_number_three variableFour
+ /format = upper diagonal.
+
+begin data
+mean 34 35 36 37
+sd 22 11 55 66
+n_vector 100 101 102 103
+corr 1 9 8 7
+corr 1 6 5
+corr 1 4
+corr 1
+end data.
+
+list.
+])
+
+AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
+Table: Data List
+ROWTYPE_,VARNAME_,var01,var_two,variable_number_three,variableFour
+mean,,34.0000,35.0000,36.0000,37.0000
+STDDEV,,22.0000,11.0000,55.0000,66.0000
+N,,100.0000,101.0000,102.0000,103.0000
+corr,var01,1.0000,9.0000,8.0000,7.0000
+corr,var_two,9.0000,1.0000,6.0000,5.0000
+corr,variable_number_three,8.0000,6.0000,1.0000,4.0000
+corr,variableFour,7.0000,5.0000,4.0000,1.0000
+])
+
+AT_CLEANUP
+
+
+
+AT_SETUP([Matrix reader - read integrity])
+
+dnl Check that matrices presented are read correctly.
+dnl The example below is an unlikely one since all
+dnl covariance/correlation matrices must be symmetrical
+dnl but it serves a purpose for this test.
+AT_DATA([matrix-reader.pspp], [dnl
+matrix data
+ variables = rowtype_ var01 to var9
+ /format = full.
+
+begin data
+n 1 2 3 4 5 6 7 8 9
+sd 100 200 300 400 500 600 700 800 900
+corr 11 12 13 14 15 16 17 18 19
+corr 21 22 23 24 25 26 27 28 29
+corr 31 32 33 34 35 36 37 38 39
+corr 41 42 43 44 45 46 47 48 49
+corr 51 52 53 54 55 56 57 58 59
+corr 61 62 63 64 65 66 67 68 69
+corr 71 72 73 74 75 76 77 78 79
+corr 81 82 83 84 85 86 87 88 89
+corr 91 92 93 94 95 96 97 98 99
+end data.
+
+factor /matrix = in (corr = *)
+ /analysis var02 var04 var06
+ /method = correlation
+ /rotation = norotate
+ /print correlation.
+])
+
+AT_CHECK([pspp -O format=csv matrix-reader.pspp], [0], [dnl
+Table: Correlation Matrix
+,,var02,var04,var06
+Correlation,var02,22.000,24.000,26.000
+,var04,42.000,44.000,46.000
+,var06,62.000,64.000,66.000
+
+Table: Component Matrix
+,Component,
+,1,2
+var02,6.73,-2.23
+var04,6.95,2.15
+var06,9.22,.01
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([Matrix data - too many rows])
+
+dnl Test for a crash which occurred when the matrix had more rows declared
+dnl than variables to hold them.
+AT_DATA([matrix-data.pspp], [dnl
+matrix data
+ variables = rowtype_
+ var01 var02 var03 var04
+ / format = upper diagonal .
+begin data
+ mean 21.4 5.0 72.9 17.4
+ sd 6.5 1.6 22.8 5.7
+ n 106 106 106 106
+ corr 1.00 .32 .48 .28
+ corr 1.00 .72 .54 .44
+ corr 1.00 .50 .59 .64
+ corr 1.00 .62 .49 -.30
+ corr 1.00 .56 -.38 .52
+ corr 1.00 -.73 .91 .80
+ corr 1.00 -.65 -.60
+ corr 1.00 .70
+ corr 1.00
+end data .
+
+execute.
+])
+
+
+AT_CHECK([pspp -O format=csv matrix-data.pspp], [1], [dnl
+matrix-data.pspp:13: error: MATRIX DATA: There are 4 variable declared but the data has at least 5 matrix rows.
+
+matrix-data.pspp:20: error: EXECUTE: EXECUTE is allowed only after the active dataset has been defined.
+])
+
+
+AT_CLEANUP
+
+
+
+
+AT_SETUP([Matrix data (badly formed)])
+
+AT_DATA([data.pspp], [dnl
+data list list /ROWTYPE_ (a8) VARNAME_(a4) v1 v2 v3 v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx.
+begin data
+mean "" 1 2 3 4
+sd "" 5 6 7 8
+n "" 2 3 4 5
+corr v1 11 22 33 44
+corr v2 55 66 77 88
+corr v3 111 222 333 444
+corr v4 4 3 21 1
+end data.
+
+list.
+
+factor matrix=in(corr = *)
+ .
+])
+
+AT_CHECK([pspp -O format=csv data.pspp], [1], [ignore])
+
+AT_CLEANUP
+
+
+
+
+AT_SETUP([Matrix data (N subcommand)])
+
+AT_DATA([matrix-data.pspp], [dnl
+matrix data
+ variables = rowtype_ var01 var02 var03 var04
+ /n = 99
+ /format = upper nodiagonal.
+begin data
+mean 34 35 36 37
+sd 22 11 55 66
+n_vector 1 2 3 4
+corr 9 8 7
+corr 6 5
+corr 4
+end data.
+
+list.
+])
+
+AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
+"matrix-data.pspp:12: warning: MATRIX DATA: The N subcommand was specified, but a N record was also found in the data. The N record will be ignored."
+
+Table: Data List
+ROWTYPE_,VARNAME_,var01,var02,var03,var04
+N,,99.0000,99.0000,99.0000,99.0000
+mean,,34.0000,35.0000,36.0000,37.0000
+STDDEV,,22.0000,11.0000,55.0000,66.0000
+corr,var01,1.0000,9.0000,8.0000,7.0000
+corr,var02,9.0000,1.0000,6.0000,5.0000
+corr,var03,8.0000,6.0000,1.0000,4.0000
+corr,var04,7.0000,5.0000,4.0000,1.0000