534c93b4cc275b22bc6fdab0561b30a3bc8de753
[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 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                 else
186                     echo "      outfile='aggregate.sys'"
187                 fi
188                 if [ "$sort" = "presorted" ]; then
189                     echo "      /presorted"
190                 fi
191                 if [ "$missing" = "columnwise" ]; then
192                     echo "      /missing=columnwise"
193                 fi
194                 cat agg-skel.pspp
195                 if [ "$outfile" = "external" ]; then
196                     echo "get file='aggregate.sys'."
197                 fi
198                 echo "list."
199             } > $name.pspp
200             if [ $? -ne 0 ] ; then no_result ; fi
201             
202             activity="run $name.pspp"
203             $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii $name.pspp >/dev/null 2>&1
204             if [ $? -ne 0 ] ; then no_result ; fi
205
206             activity="check $name output"
207             perl -pi -e 's/^\s*$//g' pspp.list agg-$missing.out
208             diff -b -w pspp.list agg-$missing.out
209             if [ $? -ne 0 ] ; then fail ; fi
210         done
211     done
212 done
213
214 pass;