dc75a4ed2dc7ce1e165a2c18e3a77b17943397be
[SXSI/xpathcomp.git] / tests / non_regression_tests / test.sh
1 #!/bin/bash
2 I=1
3
4 function cecho() {
5   case "$1" in
6       green)
7           START="\033[0;32m"
8           END="\033[0m"
9           ;;
10       yellow)
11           START="\033[1;33m"
12           END="\033[0m"
13           ;;
14       red)
15           START="\033[0;31m"
16           END="\033[0m"
17           ;;
18       *)
19           START=""
20           END=""
21           ;;
22   esac
23   echo -n -e "${START}${2}${END}"
24 }
25
26 function lessthan() {
27     echo '5k 1 st 0 sf' "$2" "$1" '<t ' "$2" "$1" '!<f p' | dc
28 }
29
30
31 if [ "$1" = "fast" ]
32 then
33     repeat_monet=1
34     repeat_sxsi=1
35 else
36     repeat_monet=5
37     repeat_sxsi=3
38 fi
39
40
41 for TESTDOC in "xmark_10.xml"  #"medline.xml" "xmark_01.04.xml"
42 do
43 echo
44 echo "$TESTDOC"
45 echo
46
47 MLOG="$TESTDOC"_monet.log
48 SLOG="$TESTDOC"_sxsi.log
49 QLOG="$TESTDOC"_qizx.log
50 rm -f "$MLOG" "$SLOG" "$QLOG"
51 cat "$TESTDOC".queries | grep -v '^#' | while read line
52 do
53     query=`echo "$line" | cut -f 1 -d "%"`
54     query_qizx=`echo "$line" | cut -f 2 -d "%"`
55     echo Test $I "... "
56     echo "$query" | sed -e 's|/descendant::|//|g' | sed -e 's|child::||g'
57     echo -n Running SXSI
58     {
59         read sxsi_count_time
60         read sxsi_mat_time
61         read sxsi_print_time
62         read sxsi_count
63     } < <(`pwd`/sxsi.sh "$query" "$TESTDOC" "$repeat_sxsi")
64
65     echo " ok"
66     echo -n Running MonetBD/XQuery
67
68     if [ "$query" = '/descendant::people[ descendant::person[not(child::address)] and descendant::person[not(child::watches)]]/child::person[child::watches]' ]
69     then
70         #Quick work around since MonetBD fails on q11
71         monet_count_time=1000000
72         monet_mat_time=1000000
73         monet_print_time=1000000
74         monet_count="$sxsi_count"
75     else
76     {
77         read monet_count_time
78         read monet_mat_time
79         read monet_print_time
80         read monet_count
81     } < <(`pwd`/monet.sh "$query" "$TESTDOC" "$repeat_monet")
82
83     fi
84     echo " ok"
85
86 # echo -n Running Qizx/XQuery
87 # {
88 #       read qizx_count_time
89 #       read qizx_mat_time
90 #       read qizx_print_time
91 #       read qizx_count
92 #   } < <(`pwd`/qizx.sh "$query_qizx" "$TESTDOC")
93 #
94 #   echo " ok"
95
96     if [ "$monet_count" = "" ]
97     then
98         monet_count="$sxsi_count"
99     fi
100     if [ "$sxsi_count" = "" ]
101     then
102         sxsi_count="$monet_count"
103     fi
104     for v in sxsi_count_time sxsi_mat_time sxsi_print_time \
105         monet_count_time monet_mat_time monet_print_time \
106         qizx_count_time qizx_mat_time qizx_print_time
107     do
108         if [ "${!v}" = "" ]
109         then
110             { read "$v"; } < <( echo 7200000 )
111         fi
112     done
113
114
115
116     echo "$I,$sxsi_count,$sxsi_count_time,$sxsi_mat_time,$sxsi_print_time" >> "$SLOG"
117     echo "$I,$monet_count,$monet_count_time,$monet_mat_time,$monet_print_time" >>"$MLOG"
118     echo "$I,$qizx_count,$qizx_count_time,$qizx_mat_time,$qizx_print_time" >>"$QLOG"
119     echo -n "Correctness: "
120     if [ "$monet_count" = "$sxsi_count" ]
121     then
122         cecho green "count ok ($monet_count) "
123     else
124         cecho red "count error (monetdb: $monet_count, sxsi: $sxsi_count) "
125     fi
126     echo
127     echo -n "Timing: "
128     CTIME="SXSI: $sxsi_count_time
129 MONET: $monet_count_time
130 QIZX: $qizx_count_time"
131     SORTED_CTIME=`echo "$CTIME" | sort --key=2 -g`
132     STR_CTIME=`echo "$SORTED_CTIME" | xargs echo -n`
133     first=`echo "$STR_CTIME" | cut -f1 -d':'`
134     if [ "$first" = "SXSI" ]
135     then
136         cecho green "$STR_CTIME"
137     else
138         cecho yellow "$STR_CTIME"
139     fi
140     I=$(( $I + 1))
141     echo
142 done
143 done