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