87cfd0e056a217aee2888b7161a4391799517ffa
[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 STAT_CONFIG_PATH=$top_srcdir/config
13 export STAT_CONFIG_PATH
14
15
16 cleanup()
17 {
18      cd /
19      rm -rf $TEMPDIR
20      :
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 activity="create one-pass moments list"
51 sed -ne 's/#.*//;/^[    ]*$/!p' > $TEMPDIR/moments-list-1p <<'EOF'
52 # Both the one-pass and two-pass algorithms should be 
53 # able to cope properly with these.
54 1 2 3 4 => W=4.000 M1=2.500 M2=1.667 M3=0.000 M4=-1.200
55 1*5 2*5 3*5 4*5 => W=20.000 M1=2.500 M2=1.316 M3=0.000 M4=-1.401
56 1*1 2*2 3*3 4*4 => W=10.000 M1=3.000 M2=1.111 M3=-0.712 M4=-0.450
57 1*0 => W=0.000 M1=sysmis M2=sysmis M3=sysmis M4=sysmis
58 1*1 => W=1.000 M1=1.000 M2=sysmis M3=sysmis M4=sysmis
59 1*2 => W=2.000 M1=1.000 M2=0.000 M3=sysmis M4=sysmis
60 1*3 => W=3.000 M1=1.000 M2=0.000 M3=sysmis M4=sysmis
61 1*2 3 => W=3.000 M1=1.667 M2=1.333 M3=1.732 M4=sysmis
62 1 1.00000001 => W=2.000 M1=1.000 M2=0.000 M3=sysmis M4=sysmis
63 1000001 1000002 1000003 1000004 => W=4.000 M1=1000002.500 M2=1.667 M3=0.000 M4=-1.200
64 EOF
65 if [ $? -ne 0 ] ; then no_result ; fi
66
67 cp $TEMPDIR/moments-list-1p $TEMPDIR/moments-list-2p
68 sed -ne 's/#.*//;/^[    ]*$/!p' >> $TEMPDIR/moments-list-2p <<'EOF'
69 # We used to have an example for which only the two-pass algorithm
70 # produced reasonable results, but the provisional means algorithm
71 # does better, so there aren't any extra tests here.
72 EOF
73
74 activity="create two-pass input file"
75 sed < $TEMPDIR/moments-list-2p >> $TEMPDIR/moments-2p.stat \
76         -e 's#^\(.*\) => \(.*\)$#DEBUG MOMENTS/\1.#'
77 if [ $? -ne 0 ] ; then no_result ; fi
78
79 activity="run two-pass program"
80 $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii \
81          $TEMPDIR/moments-2p.stat >$TEMPDIR/moments-2p.err 2> $TEMPDIR/moments-2p.out
82
83 activity="compare two-pass output"
84 perl -pi -e 's/^\s*$//g' $TEMPDIR/moments-list-2p $TEMPDIR/moments-2p.out
85 diff -b $TEMPDIR/moments-list-2p $TEMPDIR/moments-2p.out
86 if [ $? -ne 0 ] ; then fail ; fi
87
88 activity="create input file"
89 sed < $TEMPDIR/moments-list-1p >> $TEMPDIR/moments-1p.stat \
90         -e 's#^\(.*\) => \(.*\)$#DEBUG MOMENTS ONEPASS/\1.#'
91 if [ $? -ne 0 ] ; then no_result ; fi
92
93 activity="run one-pass program"
94 $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii \
95          $TEMPDIR/moments-1p.stat >$TEMPDIR/moments-1p.err 2> $TEMPDIR/moments-1p.out
96
97 activity="compare one-pass output"
98 perl -pi -e 's/^\s*$//g' $TEMPDIR/moments-list-1p $TEMPDIR/moments-1p.out
99 diff -b $TEMPDIR/moments-list-1p $TEMPDIR/moments-1p.out
100 if [ $? -ne 0 ] ; then fail ; fi
101
102 pass