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