Do cleanup before exit.
[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 here=`pwd`;
10
11 # ensure that top_srcdir is absolute
12 cd $top_srcdir; top_srcdir=`pwd`
13
14
15 export STAT_CONFIG_PATH=$top_srcdir/config
16
17 cleanup()
18 {
19      rm -rf $TEMPDIR
20 }
21
22
23 fail()
24 {
25     echo $activity
26     echo FAILED
27     cleanup;
28     exit 1;
29 }
30
31
32 no_result()
33 {
34     echo $activity
35     echo NO RESULT;
36     cleanup;
37     exit 2;
38 }
39
40 pass()
41 {
42     cleanup;
43     exit 0;
44 }
45
46 mkdir -p $TEMPDIR
47
48 cd $TEMPDIR
49
50 activity="data create"
51 cat > aggregate.data <<EOF
52 2 42
53 1001
54 4 41
55 3112
56 1112
57 2661
58 1221
59 2771
60 1331
61 1441
62 2881
63 1551
64 EOF
65 if [ $? -ne 0 ] ; then no_result ; fi
66
67 activity="command skeleton create"
68 cat > agg-skel.pspp <<EOF
69         /document
70         /break=g
71         /n = n
72         /ni = n./
73         nu = nu
74         /nui = nu./
75         nfgt2 = fgt(n, 2)
76         /nfgt2i = fgt.(n, 2)
77         /sfgt2 = fgt(s, '2')
78         /sfgt2i = fgt.(s, '2')
79         /nfin23 = fin(n, 2, 3)
80         /nfin23i = fin.(n, 2, 3)
81         /sfin23 = fin(s, '2', '3')
82         /sfin23i = fin.(s, '2', '3')
83         /nflt2 = flt(n, 2)
84         /nflt2i = flt.(n, 2)
85         /sflt2 = flt(s, '2')
86         /sflt2i = flt.(s, '2')
87         /nfirst = first(n)
88         /nfirsti = first.(n)
89         /sfirst = first(s)
90         /sfirsti = first.(s)
91         /nfout23 = fout(n, 3, 2)
92         /nfout23i = fout.(n, 3, 2)
93         /sfout23 = fout(s, '3', '2')
94         /sfout23i = fout.(s, '3', '2')
95         /nlast = last(n)
96         /nlasti = last.(n)
97         /slast = last(s)
98         /slasti = last.(s)
99         /nmax = max(n)
100         /nmaxi = max.(n)
101         /smax = max(s)
102         /smaxi = max.(s)
103         /nmean = mean(n)
104         /nmeani = mean.(n)
105         /nmin = min(n)
106         /nmini = min.(n)
107         /smin = min(s)
108         /smini = min.(s)
109         /nn = n(n)
110         /nni = n.(n)
111         /sn = n(s)
112         /sni = n.(s)
113         /nnmiss = nmiss(n)
114         /nnmissi = nmiss.(n)
115         /snmiss = nmiss(s)
116         /snmissi = nmiss.(s)
117         /nnu = nu(n)
118         /nnui = nu.(n)
119         /snu = nu(s)
120         /snui = nu.(s)
121         /nnumiss = numiss(n)
122         /nnumissi = numiss.(n)
123         /snumiss = numiss(s)
124         /snumissi = numiss.(s)
125         /npgt2 = pgt(n, 2)
126         /npgt2i = pgt.(n, 2)
127         /spgt2 = pgt(s, '2')
128         /spgt2i = pgt.(s, '2')
129         /npin23 = pin(n, 2, 3)
130         /npin23i = pin.(n, 2, 3)
131         /spin23 = pin(s, '2', '3')
132         /spin23i = pin.(s, '2', '3')
133         /nplt2 = plt(n, 2)
134         /nplt2i = plt.(n, 2)
135         /splt2 = plt(s, '2')
136         /splt2i = plt.(s, '2')
137         /npout23 = pout(n, 2, 3)
138         /npout23i = pout.(n, 2, 3)
139         /spout23 = pout(s, '2', '3')
140         /spout23i = pout.(s, '2', '3')
141         /nsd = sd(n)
142         /nsdi = sd.(n)
143         /nsum = sum(n)
144         /nsumi = sum.(n).
145 EOF
146
147 activity="expected output (itemwise missing) create"
148 cat > agg-itemwise.out <<EOF
149 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
150 - -------- -------- ------- ------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------ ------- ------ ------- ------- -------- ------- -------- ----- ------ ----- ------ ---- ----- ---- ----- -------- -------- ---- ----- ---- ----- -------- -------- -------- -------- -------- -------- -------- -------- ------- ------- ------- ------- ------- -------- ------- -------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------- -------- ------- -------- -------- -------- -------- --------
151 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 
152 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 
153 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 
154 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      .        .        .        .   
155 EOF
156
157 activity="expected output (columnwise missing) create"
158 cat > agg-columnwise.out <<EOF
159 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
160 - -------- -------- ------- ------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------ ------- ------ ------- ------- -------- ------- -------- ----- ------ ----- ------ ---- ----- ---- ----- -------- -------- ---- ----- ---- ----- -------- -------- -------- -------- -------- -------- -------- -------- ------- ------- ------- ------- ------- -------- ------- -------- ----- ------ ----- ------ ------ ------- ------ ------- ----- ------ ----- ------ ------- -------- ------- -------- -------- -------- -------- --------
161 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 
162 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      .        .        .        .   
163 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 
164 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      .        .        .        .   
165 EOF
166
167 for outfile in active external; do
168     for sort in presorted unsorted; do
169         for missing in itemwise columnwise; do
170             name=$outfile-$sort-$missing
171
172             activity="create $name.pspp"
173             {
174                 echo "data list notable file='aggregate.data' /g n 1-2 s 3(a) w 4."
175                 echo "weight by w."
176                 echo "missing values n(4) s('4')."
177                 if [ "$sort" = "presorted" ]; then
178                     echo "sort cases by g."
179                 fi
180                 echo "aggregate"
181                 if [ "$outfile" = "active" ]; then
182                     echo "      outfile=*"
183                 else
184                     echo "      outfile='aggregate.sys'"
185                 fi
186                 if [ "$sort" = "presorted" ]; then
187                     echo "      /presorted"
188                 fi
189                 if [ "$missing" = "columnwise" ]; then
190                     echo "      /missing=columnwise"
191                 fi
192                 cat agg-skel.pspp
193                 if [ "$outfile" = "external" ]; then
194                     echo "get file='aggregate.sys'."
195                 fi
196                 echo "list."
197             } > $name.pspp
198             if [ $? -ne 0 ] ; then no_result ; fi
199             
200             activity="run $name.pspp"
201             $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii $name.pspp >/dev/null 2>&1
202             if [ $? -ne 0 ] ; then no_result ; fi
203
204             activity="check $name output"
205             diff -b -w -B pspp.list agg-$missing.out
206             if [ $? -ne 0 ] ; then fail ; fi
207         done
208     done
209 done
210
211 pass;