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