1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#!/bin/sh
# verify that average empirical divergence is correct.
PATH=/bin:/usr/bin
DBACL=$TESTBIN/dbacl
prerequisite_command() {
type $2 2>&1 > /dev/null
if [ 0 -ne $? ]; then
echo "$1: $2 not found, test will be skipped"
exit 77
fi
}
prerequisite_command $0 formail
prerequisite_command $0 grep
prerequisite_command $0 awk
prerequisite_command $0 tr
DBACL_PATH="`pwd`/`basename $0 .sh`_`date +"%Y%m%dT%H%M%S"`"
export DBACL_PATH
mkdir "$DBACL_PATH"
(cat sample.spam-8 ; echo ; \
cat sample.spam-9 ; echo ; \
cat sample.spam-7 ; echo ; \
cat sample.spam-3 ) \
> "$DBACL_PATH/mbox"
cat "$DBACL_PATH/mbox" \
| $DBACL -l dummy -X -d -T email \
| grep '# shannon' \
| awk '{print $9/log(2)}' \
| tr '\n' ' ' \
> "$DBACL_PATH/out1"
cat "$DBACL_PATH/mbox" \
| formail -s $DBACL -c dummy -vX \
| awk '{d += $3; e += $5} END{print (d/4), (e/4)}' \
| tr '\n' ' ' \
> "$DBACL_PATH/out2"
echo "`cat \"$DBACL_PATH/out1\"` `cat \"$DBACL_PATH/out2\"`" \
| awk '
function abs(x) { return (x >= 0) ? x : -x }
{
# divergence error is within 15% of shannon entropy
# must invert exit value
exit !( abs($1 - $2) < (0.15/2.0) * ($3) )
}'
RESULT=$?
rm -rf "$DBACL_PATH"
exit $RESULT
|