+AT_BANNER([CROSSTABS procedure])
+
+AT_SETUP([CROSSTABS integer mode crash])
+AT_DATA([crosstabs.sps],
+ [DATA LIST LIST /A * B * X * Y * .
+BEGIN DATA.
+2 3 4 5
+END DATA.
+
+CROSSTABS VARIABLES X (1,7) Y (1,7) /TABLES X BY Y.
+])
+AT_CHECK([pspp -O format=csv crosstabs.sps], [0],
+ [[Table: Reading free-form data from INLINE.
+Variable,Format
+A,F8.0
+B,F8.0
+X,F8.0
+Y,F8.0
+
+Table: Summary.
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X * Y,1,100.0%,0,0.0%,1,100.0%
+
+Table: X * Y [count].
+,Y,,,,,,,
+X,1.00,2.00,3.00,4.00,5.00,6.00,7.00,Total
+1.00,.0,.0,.0,.0,.0,.0,.0,.0
+2.00,.0,.0,.0,.0,.0,.0,.0,.0
+3.00,.0,.0,.0,.0,.0,.0,.0,.0
+4.00,.0,.0,.0,.0,1.0,.0,.0,1.0
+5.00,.0,.0,.0,.0,.0,.0,.0,.0
+6.00,.0,.0,.0,.0,.0,.0,.0,.0
+7.00,.0,.0,.0,.0,.0,.0,.0,.0
+Total,.0,.0,.0,.0,1.0,.0,.0,1.0
+]])
+AT_CLEANUP
+
+# Bug #22037.
+AT_SETUP([CROSSTABS long string crash])
+AT_DATA([crosstabs.sps],
+ [data list list /x * y (a18).
+
+begin data.
+
+ 1. 'zero none'
+
+1 'one unity'
+2 'two duality'
+3 'three lots'
+end data.
+
+CROSSTABS /TABLES = x BY y.
+])
+AT_CHECK([pspp -o - -O format=csv crosstabs.sps], [0],
+ [[Table: Reading free-form data from INLINE.
+Variable,Format
+x,F8.0
+y,A18
+
+"crosstabs.sps:4: warning: BEGIN DATA: Missing value(s) for all variables from x onward. These will be filled with the system-missing value or blanks, as appropriate."
+
+"crosstabs.sps:6: warning: BEGIN DATA: Missing value(s) for all variables from x onward. These will be filled with the system-missing value or blanks, as appropriate."
+
+Table: Summary.
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+x * y,4,66.7%,2,33.3%,6,100.0%
+
+Table: x * y [count].
+,y,,,,
+x,one unity ,three lots ,two duality ,zero none ,Total
+1.00,1.0,.0,.0,1.0,2.0
+2.00,.0,.0,1.0,.0,1.0
+3.00,.0,1.0,.0,.0,1.0
+Total,1.0,1.0,1.0,1.0,4.0
+]])
+AT_CLEANUP
+
+AT_SETUP([CROSSTABS crash])
+AT_DATA([crosstabs.sps],
+ [[DATA LIST FIXED
+ / x 1-2
+ y 3
+ z 4.
+
+BEGIN DATA.
+0111
+0222
+0311
+0412
+0521
+0612
+0711
+0811
+0912
+END DATA.
+
+LIST.
+
+
+CROSSTABS TABLES y by z.
+]])
+AT_CHECK([pspp -O format=csv crosstabs.sps], [0],
+ [[Table: Reading 1 record from INLINE.
+Variable,Record,Columns,Format
+x,1,1- 2,F2.0
+y,1,3- 3,F1.0
+z,1,4- 4,F1.0
+
+Table: Data List
+x,y,z
+1,1,1
+2,2,2
+3,1,1
+4,1,2
+5,2,1
+6,1,2
+7,1,1
+8,1,1
+9,1,2
+
+Table: Summary.
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+y * z,9,100.0%,0,0.0%,9,100.0%
+
+Table: y * z [count].
+,z,,
+y,1,2,Total
+1,4.0,3.0,7.0
+2,1.0,1.0,2.0
+Total,5.0,4.0,9.0
+]])
+AT_CLEANUP
+
+# Bug #26739, which caused CROSSTABS to crash or to fail to output
+# chi-square results.
+AT_SETUP([CROSSTABS chi-square crash])
+AT_DATA([crosstabs.sps],
+ [[DATA LIST LIST /x * y *.
+BEGIN DATA.
+2 2
+3 1
+4 2
+4 1
+END DATA.
+
+CROSSTABS
+ /TABLES= x BY y
+ /STATISTICS=CHISQ.
+]])
+AT_CHECK([pspp -O format=csv crosstabs.sps], [0],
+ [[Table: Reading free-form data from INLINE.
+Variable,Format
+x,F8.0
+y,F8.0
+
+Table: Summary.
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+x * y,4,100.0%,0,0.0%,4,100.0%
+
+Table: x * y [count].
+,y,,
+x,1.00,2.00,Total
+2.00,.0,1.0,1.0
+3.00,1.0,.0,1.0
+4.00,1.0,1.0,2.0
+Total,2.0,2.0,4.0
+
+Table: Chi-square tests.
+Statistic,Value,df,Asymp. Sig. (2-sided)
+Pearson Chi-Square,2.00,2,.37
+Likelihood Ratio,2.77,2,.25
+Linear-by-Linear Association,.27,1,.60
+N of Valid Cases,4,,
+]])
+AT_CLEANUP
+
+# Bug #27883.
+AT_SETUP([CROSSTABS crash with SPLIT FILE])
+AT_DATA([crosstabs.sps],
+ [data list notable / v0 to v2 1-6 (A)
+begin data.
+a c e
+a c e
+a c e
+a d e
+a d f
+b d f
+b d f
+b c f
+b d e
+a c f
+end data.
+SORT CASES BY v0.
+SPLIT FILE SEPARATE BY v0.
+
+CROSSTABS
+ /TABLES= v1 BY v2
+ /FORMAT=AVALUE LABELS TABLES PIVOT
+ /STATISTICS=CHISQ
+ /CELLS=COUNT ROW COLUMN TOTAL.
+])
+AT_CHECK([pspp -O format=csv crosstabs.sps], [0],
+ [[Variable,Value,Label
+v0,a ,
+
+Table: Summary.
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+v1 * v2,6,100.0%,0,0.0%,6,100.0%
+
+"Table: v1 * v2 [count, row %, column %, total %]."
+,v2,,
+v1,e ,f ,Total
+c ,3.0,1.0,4.0
+,75.0%,25.0%,100.0%
+,75.0%,50.0%,66.7%
+,50.0%,16.7%,66.7%
+d ,1.0,1.0,2.0
+,50.0%,50.0%,100.0%
+,25.0%,50.0%,33.3%
+,16.7%,16.7%,33.3%
+Total,4.0,2.0,6.0
+,66.7%,33.3%,100.0%
+,100.0%,100.0%,100.0%
+,66.7%,33.3%,100.0%
+
+Table: Chi-square tests.
+Statistic,Value,df,Asymp. Sig. (2-sided),Exact Sig. (2-sided),Exact Sig. (1-sided)
+Pearson Chi-Square,.38,1,.54,,
+Likelihood Ratio,.37,1,.54,,
+Fisher's Exact Test,,,,1.00,.60
+Continuity Correction,.00,1,1.00,,
+N of Valid Cases,6,,,,
+
+Variable,Value,Label
+v0,b ,
+
+Table: Summary.
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+v1 * v2,4,100.0%,0,0.0%,4,100.0%
+
+"Table: v1 * v2 [count, row %, column %, total %]."
+,v2,,
+v1,e ,f ,Total
+c ,.0,1.0,1.0
+,.0%,100.0%,100.0%
+,.0%,33.3%,25.0%
+,.0%,25.0%,25.0%
+d ,1.0,2.0,3.0
+,33.3%,66.7%,100.0%
+,100.0%,66.7%,75.0%
+,25.0%,50.0%,75.0%
+Total,1.0,3.0,4.0
+,25.0%,75.0%,100.0%
+,100.0%,100.0%,100.0%
+,25.0%,75.0%,100.0%
+
+Table: Chi-square tests.
+Statistic,Value,df,Asymp. Sig. (2-sided),Exact Sig. (2-sided),Exact Sig. (1-sided)
+Pearson Chi-Square,.44,1,.50,,
+Likelihood Ratio,.68,1,.41,,
+Fisher's Exact Test,,,,1.00,.75
+Continuity Correction,.00,1,1.00,,
+N of Valid Cases,4,,,,
+]])
+AT_CLEANUP