Allow value labels for non integer values.
[pspp-builds.git] / tests / stats / percentiles-enhanced.sh
1 #! /bin/sh
2
3 # Tests calculation of percentiles with the 
4 # ENHANCED algorithm set.
5
6 TEMPDIR=/tmp/pspp-tst-$$
7
8 # ensure that top_builddir  are absolute
9 if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
10 if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
11 top_builddir=`cd $top_builddir; pwd`
12 PSPP=$top_builddir/src/ui/terminal/pspp
13
14 # ensure that top_srcdir is absolute
15 top_srcdir=`cd $top_srcdir; pwd`
16
17 STAT_CONFIG_PATH=$top_srcdir/config
18 export STAT_CONFIG_PATH
19
20 LANG=C
21 export LANG
22
23
24 cleanup()
25 {
26      if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
27         echo "NOT cleaning $TEMPDIR" 
28         return ; 
29      fi
30      cd /
31      rm -rf $TEMPDIR
32 }
33
34
35 fail()
36 {
37     echo $activity
38     echo FAILED
39     cleanup;
40     exit 1;
41 }
42
43
44 no_result()
45 {
46     echo $activity
47     echo NO RESULT;
48     cleanup;
49     exit 2;
50 }
51
52 pass()
53 {
54     cleanup;
55     exit 0;
56 }
57
58 mkdir -p $TEMPDIR
59
60 cd $TEMPDIR
61
62
63 i=1;
64
65 activity="create program $i"
66 cat > $TEMPDIR/prog.sps <<EOF
67 DATA LIST LIST notable /X * .
68 BEGIN DATA.
69
70
71
72
73 5
74 END DATA.
75
76 FREQUENCIES 
77         VAR=x
78         /PERCENTILES = 0 25 50 75 100
79
80 EOF
81 if [ $? -ne 0 ] ; then no_result; fi
82
83 activity="run program $i"
84 $SUPERVISOR $PSPP --testing-mode $TEMPDIR/prog.sps
85 if [ $? -ne 0 ] ; then no_result ; fi
86
87 activity="compare output $i"
88 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
89 diff  -b $TEMPDIR/pspp.list - <<EOF
90 1.1 FREQUENCIES.  X 
91 +-----------+--------+---------+--------+--------+--------+
92 |           |        |         |        |  Valid |   Cum  |
93 |Value Label|  Value |Frequency| Percent| Percent| Percent|
94 #===========#========#=========#========#========#========#
95 |           |    1.00|        1|    20.0|    20.0|    20.0|
96 |           |    2.00|        1|    20.0|    20.0|    40.0|
97 |           |    3.00|        1|    20.0|    20.0|    60.0|
98 |           |    4.00|        1|    20.0|    20.0|    80.0|
99 |           |    5.00|        1|    20.0|    20.0|   100.0|
100 #===========#========#=========#========#========#========#
101 |               Total|        5|   100.0|   100.0|        |
102 +--------------------+---------+--------+--------+--------+
103 +-----------------------+-----+
104 |N           Valid      |    5|
105 |            Missing    |    0|
106 |Mean                   |3.000|
107 |Std Dev                |1.581|
108 |Minimum                |1.000|
109 |Maximum                |5.000|
110 |Percentiles 0          |1.000|
111 |            25         |2.000|
112 |            50 (Median)|3.000|
113 |            75         |4.000|
114 |            100        |5.000|
115 +-----------------------+-----+
116 EOF
117 if [ $? -ne 0 ] ; then fail ; fi
118
119
120
121 i=$[$i+1];
122
123 activity="create program $i"
124 cat > $TEMPDIR/prog.sps <<EOF
125 DATA LIST LIST notable /X * F *.
126 BEGIN DATA.
127 1 2
128 2 2
129 3 2
130 4 1
131 4 1
132 5 1
133 5 1
134 END DATA.
135
136 WEIGHT BY f.
137
138 FREQUENCIES 
139         VAR=x
140         /PERCENTILES = 0 25 50 75 100
141
142 EOF
143 if [ $? -ne 0 ] ; then no_result; fi
144
145
146 activity="run program $i"
147 $SUPERVISOR $PSPP --testing-mode $TEMPDIR/prog.sps
148 if [ $? -ne 0 ] ; then no_result ; fi
149
150 activity="compare output $i"
151 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
152 diff  -b $TEMPDIR/pspp.list - <<EOF
153 1.1 FREQUENCIES.  X 
154 +-----------+--------+---------+--------+--------+--------+
155 |           |        |         |        |  Valid |   Cum  |
156 |Value Label|  Value |Frequency| Percent| Percent| Percent|
157 #===========#========#=========#========#========#========#
158 |           |    1.00|        2|    20.0|    20.0|    20.0|
159 |           |    2.00|        2|    20.0|    20.0|    40.0|
160 |           |    3.00|        2|    20.0|    20.0|    60.0|
161 |           |    4.00|        2|    20.0|    20.0|    80.0|
162 |           |    5.00|        2|    20.0|    20.0|   100.0|
163 #===========#========#=========#========#========#========#
164 |               Total|       10|   100.0|   100.0|        |
165 +--------------------+---------+--------+--------+--------+
166 +-----------------------+-----+
167 |N           Valid      |   10|
168 |            Missing    |    0|
169 |Mean                   |3.000|
170 |Std Dev                |1.491|
171 |Minimum                |1.000|
172 |Maximum                |5.000|
173 |Percentiles 0          |1.000|
174 |            25         |2.000|
175 |            50 (Median)|3.000|
176 |            75         |4.000|
177 |            100        |5.000|
178 +-----------------------+-----+
179 EOF
180 if [ $? -ne 0 ] ; then fail ; fi
181
182
183
184 i=$[$i+1];
185
186 activity="create program $i"
187 cat > $TEMPDIR/prog.sps <<EOF
188 DATA LIST LIST notable /X * F *.
189 BEGIN DATA.
190 1 1
191 3 2
192 4 1
193 5 1
194 5 1
195 END DATA.
196
197 WEIGHT BY f.
198
199 FREQUENCIES 
200         VAR=x
201         /PERCENTILES = 0 25 50 75 100
202
203 EOF
204 if [ $? -ne 0 ] ; then no_result; fi
205
206
207 activity="run program $i"
208 $SUPERVISOR $PSPP --testing-mode $TEMPDIR/prog.sps
209 if [ $? -ne 0 ] ; then no_result ; fi
210
211 activity="compare output $i"
212 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
213 diff  -b $TEMPDIR/pspp.list - <<EOF
214 1.1 FREQUENCIES.  X 
215 +-----------+--------+---------+--------+--------+--------+
216 |           |        |         |        |  Valid |   Cum  |
217 |Value Label|  Value |Frequency| Percent| Percent| Percent|
218 #===========#========#=========#========#========#========#
219 |           |    1.00|        1|    16.7|    16.7|    16.7|
220 |           |    3.00|        2|    33.3|    33.3|    50.0|
221 |           |    4.00|        1|    16.7|    16.7|    66.7|
222 |           |    5.00|        2|    33.3|    33.3|   100.0|
223 #===========#========#=========#========#========#========#
224 |               Total|        6|   100.0|   100.0|        |
225 +--------------------+---------+--------+--------+--------+
226 +-----------------------+-----+
227 |N           Valid      |    6|
228 |            Missing    |    0|
229 |Mean                   |3.500|
230 |Std Dev                |1.517|
231 |Minimum                |1.000|
232 |Maximum                |5.000|
233 |Percentiles 0          |1.000|
234 |            25         |3.000|
235 |            50 (Median)|3.500|
236 |            75         |4.750|
237 |            100        |5.000|
238 +-----------------------+-----+
239 EOF
240 if [ $? -ne 0 ] ; then fail ; fi
241
242 i=$[$i+1];
243
244 activity="create program $i"
245 cat > $TEMPDIR/prog.sps <<EOF
246 DATA LIST LIST notable /X * F *.
247 BEGIN DATA.
248 1 1
249 3 2
250 4 1
251 5 1
252 5 1
253 99 4
254 END DATA.
255
256 MISSING VALUE x (99.0) .
257 WEIGHT BY f.
258
259 FREQUENCIES 
260         VAR=x
261         /PERCENTILES = 0 25 50 75 100
262
263 EOF
264 if [ $? -ne 0 ] ; then no_result; fi
265
266
267 activity="run program $i"
268 $SUPERVISOR $PSPP --testing-mode $TEMPDIR/prog.sps
269 if [ $? -ne 0 ] ; then no_result ; fi
270
271 activity="compare output $i"
272 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
273 diff -b $TEMPDIR/pspp.list - <<EOF
274 1.1 FREQUENCIES.  X 
275 +-----------+--------+---------+--------+--------+--------+
276 |           |        |         |        |  Valid |   Cum  |
277 |Value Label|  Value |Frequency| Percent| Percent| Percent|
278 #===========#========#=========#========#========#========#
279 |           |    1.00|        1|    10.0|    16.7|    16.7|
280 |           |    3.00|        2|    20.0|    33.3|    50.0|
281 |           |    4.00|        1|    10.0|    16.7|    66.7|
282 |           |    5.00|        2|    20.0|    33.3|   100.0|
283 |           |   99.00|        4|    40.0| Missing|        |
284 #===========#========#=========#========#========#========#
285 |               Total|       10|   100.0|   100.0|        |
286 +--------------------+---------+--------+--------+--------+
287 +-----------------------+-----+
288 |N           Valid      |    6|
289 |            Missing    |    4|
290 |Mean                   |3.500|
291 |Std Dev                |1.517|
292 |Minimum                |1.000|
293 |Maximum                |5.000|
294 |Percentiles 0          |1.000|
295 |            25         |3.000|
296 |            50 (Median)|3.500|
297 |            75         |4.750|
298 |            100        |5.000|
299 +-----------------------+-----+
300 EOF
301 if [ $? -ne 0 ] ; then fail ; fi
302
303 pass;