fix bug 19819
[pspp] / tests / command / aggregate.sh
1 #!/bin/sh
2
3 # This program tests the aggregate procedure
4
5 TEMPDIR=/tmp/pspp-tst-$$
6 TESTFILE=$TEMPDIR/aggregate.pspp
7
8
9 # ensure that top_srcdir and top_builddir  are absolute
10 if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
11 if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
12 top_srcdir=`cd $top_srcdir; pwd`
13 top_builddir=`cd $top_builddir; pwd`
14 PSPP=$top_builddir/src/ui/terminal/pspp
15
16
17 STAT_CONFIG_PATH=$top_srcdir/config
18 export STAT_CONFIG_PATH
19
20 cleanup()
21 {
22      cd /
23      rm -rf $TEMPDIR
24 }
25
26
27 fail()
28 {
29     echo $activity
30     echo FAILED
31     cleanup;
32     exit 1;
33 }
34
35
36 no_result()
37 {
38     echo $activity
39     echo NO RESULT;
40     cleanup;
41     exit 2;
42 }
43
44 pass()
45 {
46     cleanup;
47     exit 0;
48 }
49
50 mkdir -p $TEMPDIR
51
52 cd $TEMPDIR
53
54 activity="data create"
55 cat > aggregate.data <<EOF
56 2 42
57 1001
58 4 41
59 3112
60 1112
61 2661
62 1221
63 2771
64 1331
65 1441
66 2881
67 1551
68 EOF
69 if [ $? -ne 0 ] ; then no_result ; fi
70
71 activity="command skeleton create"
72 cat > agg-skel.pspp <<EOF
73         /document
74         /break=g
75         /N = n
76         /NI = n./
77         NU = nu
78         /NUI = nu./
79         NFGT2 = fgt(n, 2)
80         /NFGT2I = fgt.(n, 2)
81         /SFGT2 = fgt(s, '2')
82         /SFGT2I = fgt.(s, '2')
83         /NFIN23 = fin(n, 2, 3)
84         /NFIN23I = fin.(n, 2, 3)
85         /SFIN23 = fin(s, '2', '3')
86         /SFIN23I = fin.(s, '2', '3')
87         /NFLT2 = flt(n, 2)
88         /NFLT2I = flt.(n, 2)
89         /SFLT2 = flt(s, '2')
90         /SFLT2I = flt.(s, '2')
91         /NFIRST = first(n)
92         /NFIRSTI = first.(n)
93         /SFIRST = first(s)
94         /SFIRSTI = first.(s)
95         /NFOUT23 = fout(n, 3, 2)
96         /NFOUT23I = fout.(n, 3, 2)
97         /SFOUT23 = fout(s, '3', '2')
98         /SFOUT23I = fout.(s, '3', '2')
99         /NLAST = last(n)
100         /NLASTI = last.(n)
101         /SLAST = last(s)
102         /SLASTI = last.(s)
103         /NMAX = max(n)
104         /NMAXI = max.(n)
105         /SMAX = max(s)
106         /SMAXI = max.(s)
107         /NMEAN = mean(n)
108         /NMEANI = mean.(n)
109         /NMIN = min(n)
110         /NMINI = min.(n)
111         /SMIN = min(s)
112         /SMINI = min.(s)
113         /NN = n(n)
114         /NNI = n.(n)
115         /SN = n(s)
116         /SNI = n.(s)
117         /NNMISS = nmiss(n)
118         /NNMISSI = nmiss.(n)
119         /SNMISS = nmiss(s)
120         /SNMISSI = nmiss.(s)
121         /NNU = nu(n)
122         /NNUI = nu.(n)
123         /SNU = nu(s)
124         /SNUI = nu.(s)
125         /NNUMISS = numiss(n)
126         /NNUMISSI = numiss.(n)
127         /SNUMISS = numiss(s)
128         /SNUMISSI = numiss.(s)
129         /NPGT2 = pgt(n, 2)
130         /NPGT2I = pgt.(n, 2)
131         /SPGT2 = pgt(s, '2')
132         /SPGT2I = pgt.(s, '2')
133         /NPIN23 = pin(n, 2, 3)
134         /NPIN23I = pin.(n, 2, 3)
135         /SPIN23 = pin(s, '2', '3')
136         /SPIN23I = pin.(s, '2', '3')
137         /NPLT2 = plt(n, 2)
138         /NPLT2I = plt.(n, 2)
139         /SPLT2 = plt(s, '2')
140         /SPLT2I = plt.(s, '2')
141         /NPOUT23 = pout(n, 2, 3)
142         /NPOUT23I = pout.(n, 2, 3)
143         /SPOUT23 = pout(s, '2', '3')
144         /SPOUT23I = pout.(s, '2', '3')
145         /NSD = sd(n)
146         /NSDI = sd.(n)
147         /NSUM = sum(n)
148         /NSUMI = sum.(n).
149 EOF
150
151 activity="expected output (itemwise missing) create"
152 cat > agg-itemwise.out <<EOF
153 G        N       NI      NU     NUI NFGT2 NFGT2I SFGT2 SFGT2I NFIN23 NFIN23I SFIN23 SFIN23I NFLT2 NFLT2I SFLT2 SFLT2I NFIRST NFIRSTI SFIRST SFIRSTI NFOUT23 NFOUT23I SFOUT23 SFOUT23I NLAST NLASTI SLAST SLASTI NMAX NMAXI SMAX SMAXI    NMEAN   NMEANI NMIN NMINI SMIN SMINI       NN      NNI       SN      SNI   NNMISS  NNMISSI   SNMISS  SNMISSI     NNU    NNUI     SNU    SNUI NNUMISS NNUMISSI SNUMISS SNUMISSI NPGT2 NPGT2I SPGT2 SPGT2I NPIN23 NPIN23I SPIN23 SPIN23I NPLT2 NPLT2I SPLT2 SPLT2I NPOUT23 NPOUT23I SPOUT23 SPOUT23I      NSD     NSDI     NSUM    NSUMI
154 - -------- -------- ------- ------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------ ------- ------ ------- ------- -------- ------- -------- ----- ------ ----- ------ ---- ----- ---- ----- -------- -------- ---- ----- ---- ----- -------- -------- -------- -------- -------- -------- -------- -------- ------- ------- ------- ------- ------- -------- ------- -------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------- -------- ------- -------- -------- -------- -------- --------
155 1     7.00     7.00       6       6  .333   .429  .333   .429   .333    .286   .333    .286  .500   .429  .500   .429      0       0      0       0    .667     .714    .667     .714     5      5     5      5    5     5    5     5     2.00     2.29    0     0    0     0     6.00     7.00     6.00     7.00     1.00      .00     1.00      .00       5       6       5       6       1        0       1        0  33.3   42.9  33.3   42.9   33.3    28.6   33.3    28.6  50.0   42.9  50.0   42.9    66.7     71.4    66.7     71.4     1.79     1.80    12.00    16.00 
156 2     5.00     5.00       4       4 1.000  1.000 1.000  1.000   .000    .000   .000    .000  .000   .000  .000   .000      6       6      6       4   1.000    1.000   1.000    1.000     8      8     8      8    8     8    8     8     7.00     7.00    6     6    6     4     3.00     3.00     3.00     5.00     2.00     2.00     2.00      .00       3       3       3       4       1        1       1        0 100.0  100.0 100.0  100.0     .0      .0     .0      .0    .0     .0    .0     .0   100.0    100.0   100.0    100.0     1.00     1.00    21.00    21.00 
157 3     2.00     2.00       1       1  .000   .000  .000   .000   .000    .000   .000    .000 1.000  1.000 1.000  1.000      1       1      1       1   1.000    1.000   1.000    1.000     1      1     1      1    1     1    1     1     1.00     1.00    1     1    1     1     2.00     2.00     2.00     2.00      .00      .00      .00      .00       1       1       1       1       0        0       0        0    .0     .0    .0     .0     .0      .0     .0      .0 100.0  100.0 100.0  100.0   100.0    100.0   100.0    100.0      .00      .00     2.00     2.00 
158 4     1.00     1.00       1       1  .      .     .     1.000   .       .      .       .000  .      .     .      .000      .       .              4    .        .       .       1.000     .      .            4    .     .          4      .        .      .     .          4      .00      .00      .00     1.00     1.00     1.00     1.00      .00       0       0       0       1       1        1       1        0    .      .     .   100.0     .       .      .       .0    .      .     .      .0      .        .       .     100.0      .        .        .        .   
159 EOF
160
161 activity="expected output (columnwise missing) create"
162 cat > agg-columnwise.out <<EOF
163 G        N       NI      NU     NUI NFGT2 NFGT2I SFGT2 SFGT2I NFIN23 NFIN23I SFIN23 SFIN23I NFLT2 NFLT2I SFLT2 SFLT2I NFIRST NFIRSTI SFIRST SFIRSTI NFOUT23 NFOUT23I SFOUT23 SFOUT23I NLAST NLASTI SLAST SLASTI NMAX NMAXI SMAX SMAXI    NMEAN   NMEANI NMIN NMINI SMIN SMINI       NN      NNI       SN      SNI   NNMISS  NNMISSI   SNMISS  SNMISSI     NNU    NNUI     SNU    SNUI NNUMISS NNUMISSI SNUMISS SNUMISSI NPGT2 NPGT2I SPGT2 SPGT2I NPIN23 NPIN23I SPIN23 SPIN23I NPLT2 NPLT2I SPLT2 SPLT2I NPOUT23 NPOUT23I SPOUT23 SPOUT23I      NSD     NSDI     NSUM    NSUMI
164 - -------- -------- ------- ------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------ ------- ------ ------- ------- -------- ------- -------- ----- ------ ----- ------ ---- ----- ---- ----- -------- -------- ---- ----- ---- ----- -------- -------- -------- -------- -------- -------- -------- -------- ------- ------- ------- ------- ------- -------- ------- -------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------- -------- ------- -------- -------- -------- -------- --------
165 1     7.00     7.00       6       6  .      .429  .      .429   .       .286   .       .286  .      .429  .      .429      .       0              0    .        .714    .        .714     .      5            5    .     5          5      .       2.29    .     0          0     6.00     7.00     6.00     7.00     1.00      .00     1.00      .00       5       6       5       6       1        0       1        0    .    42.9    .    42.9     .     28.6     .     28.6    .    42.9    .    42.9      .      71.4      .      71.4      .       1.80      .      16.00 
166 2     5.00     5.00       4       4  .      .     .     1.000   .       .      .       .000  .      .     .      .000      .       .              4    .        .       .       1.000     .      .            8    .     .          8      .        .      .     .          4     3.00     3.00     3.00     5.00     2.00     2.00     2.00      .00       3       3       3       4       1        1       1        0    .      .     .   100.0     .       .      .       .0    .      .     .      .0      .        .       .     100.0      .        .        .        .   
167 3     2.00     2.00       1       1  .000   .000  .000   .000   .000    .000   .000    .000 1.000  1.000 1.000  1.000      1       1      1       1   1.000    1.000   1.000    1.000     1      1     1      1    1     1    1     1     1.00     1.00    1     1    1     1     2.00     2.00     2.00     2.00      .00      .00      .00      .00       1       1       1       1       0        0       0        0    .0     .0    .0     .0     .0      .0     .0      .0 100.0  100.0 100.0  100.0   100.0    100.0   100.0    100.0      .00      .00     2.00     2.00 
168 4     1.00     1.00       1       1  .      .     .     1.000   .       .      .       .000  .      .     .      .000      .       .              4    .        .       .       1.000     .      .            4    .     .          4      .        .      .     .          4      .00      .00      .00     1.00     1.00     1.00     1.00      .00       0       0       0       1       1        1       1        0    .      .     .   100.0     .       .      .       .0    .      .     .      .0      .        .       .     100.0      .        .        .        .   
169 EOF
170
171 for outfile in scratch active external; do
172     for sort in presorted unsorted; do
173         for missing in itemwise columnwise; do
174             name=$outfile-$sort-$missing
175
176             activity="create $name.pspp"
177             {
178                 echo "data list notable file='aggregate.data' /G N 1-2 S 3(a) W 4."
179                 echo "weight by w."
180                 echo "missing values n(4) s('4')."
181                 if [ "$sort" = "presorted" ]; then
182                     echo "sort cases by g."
183                 fi
184                 echo "aggregate"
185                 if [ "$outfile" = "active" ]; then
186                     echo "      outfile=*"
187                 elif [ "$outfile" = "external" ]; then
188                     echo "      outfile='aggregate.sys'"
189                 else
190                     echo "      outfile=#AGGREGATE"
191                 fi
192                 if [ "$sort" = "presorted" ]; then
193                     echo "      /presorted"
194                 fi
195                 if [ "$missing" = "columnwise" ]; then
196                     echo "      /missing=columnwise"
197                 fi
198                 cat agg-skel.pspp
199                 if [ "$outfile" = "external" ]; then
200                     echo "get file='aggregate.sys'."
201                 elif [ "$outfile" = "scratch" ]; then
202                     echo "get file=#AGGREGATE."
203                 fi
204                 echo "list."
205             } > $name.pspp
206             if [ $? -ne 0 ] ; then no_result ; fi
207             
208             activity="run $name.pspp"
209             $SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $name.pspp 
210             if [ $? -ne 0 ] ; then no_result ; fi
211
212             activity="check $name output"
213             perl -pi -e 's/^\s*$//g' pspp.list agg-$missing.out
214             diff -b -w pspp.list agg-$missing.out
215             if [ $? -ne 0 ] ; then fail ; fi
216         done
217     done
218 done
219
220 pass;