Add multipass procedures. Add two-pass moments calculation. Rewrite
[pspp-builds.git] / tests / stats / moments.sh
1 #! /bin/sh
2
3 # Tests calculation of moments.
4
5 TEMPDIR=/tmp/pspp-tst-$$
6
7 here=`pwd`;
8
9 # ensure that top_srcdir is absolute
10 cd $top_srcdir; top_srcdir=`pwd`
11
12 export STAT_CONFIG_PATH=$top_srcdir/config
13
14
15 cleanup()
16 {
17      rm -rf $TEMPDIR
18      :
19 }
20
21
22 fail()
23 {
24     echo $activity
25     echo FAILED
26     cleanup;
27     exit 1;
28 }
29
30
31 no_result()
32 {
33     echo $activity
34     echo NO RESULT;
35     cleanup;
36     exit 2;
37 }
38
39 pass()
40 {
41     cleanup;
42     exit 0;
43 }
44
45 mkdir -p $TEMPDIR
46
47 cd $TEMPDIR
48 activity="create one-pass moments list"
49 sed -ne 's/#.*//;/^[    ]*$/!p' > $TEMPDIR/moments-list-1p <<'EOF'
50 # Both the one-pass and two-pass algorithms should be 
51 # able to cope properly with these.
52 1 2 3 4 => W=4.000 M1=2.500 M2=1.667 M3=0.000 M4=-1.200
53 1*5 2*5 3*5 4*5 => W=20.000 M1=2.500 M2=1.316 M3=0.000 M4=-1.401
54 1*1 2*2 3*3 4*4 => W=10.000 M1=3.000 M2=1.111 M3=-0.712 M4=-0.450
55 1*0 => W=0.000 M1=sysmis M2=sysmis M3=sysmis M4=sysmis
56 1*1 => W=1.000 M1=1.000 M2=sysmis M3=sysmis M4=sysmis
57 1*2 => W=2.000 M1=1.000 M2=0.000 M3=sysmis M4=sysmis
58 1*3 => W=3.000 M1=1.000 M2=0.000 M3=sysmis M4=sysmis
59 1*2 3 => W=3.000 M1=1.667 M2=1.333 M3=1.732 M4=sysmis
60 1 1.00000001 => W=2.000 M1=1.000 M2=0.000 M3=sysmis M4=sysmis
61 EOF
62 if [ $? -ne 0 ] ; then no_result ; fi
63
64 cp $TEMPDIR/moments-list-1p $TEMPDIR/moments-list-2p
65 sed -ne 's/#.*//;/^[    ]*$/!p' >> $TEMPDIR/moments-list-2p <<'EOF'
66 # Only the two-pass algorithm can be expected to produce
67 # proper third and fourth moments here.
68 1000001 1000002 1000003 1000004 => W=4.000 M1=1000002.500 M2=1.667 M3=0.000 M4=-1.200
69 EOF
70
71 activity="create two-pass input file"
72 sed < $TEMPDIR/moments-list-2p >> $TEMPDIR/moments-2p.stat \
73         -e 's#^\(.*\) => \(.*\)$#DEBUG MOMENTS/\1.#'
74 if [ $? -ne 0 ] ; then no_result ; fi
75
76 activity="run program"
77 $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii \
78          $TEMPDIR/moments-2p.stat >$TEMPDIR/moments-2p.err 2> $TEMPDIR/moments-2p.out
79
80 activity="compare output"
81 diff -B -b $TEMPDIR/moments-list-2p $TEMPDIR/moments-2p.out
82 if [ $? -ne 0 ] ; then fail ; fi
83
84 activity="create input file"
85 sed < $TEMPDIR/moments-list-1p >> $TEMPDIR/moments-1p.stat \
86         -e 's#^\(.*\) => \(.*\)$#DEBUG MOMENTS ONEPASS/\1.#'
87 if [ $? -ne 0 ] ; then no_result ; fi
88
89 activity="run program"
90 $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii \
91          $TEMPDIR/moments-1p.stat >$TEMPDIR/moments-1p.err 2> $TEMPDIR/moments-1p.out
92
93 activity="compare output"
94 diff -B -b $TEMPDIR/moments-list-1p $TEMPDIR/moments-1p.out
95 if [ $? -ne 0 ] ; then fail ; fi
96
97 pass