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