Fixes on queries and test scripts to handle old versions of SXSI.
[SXSI/xpathcomp.git] / tests / scripts / check_perf.sh
1 #!/bin/bash
2
3
4 function usage(){
5     echo "$0 <file.{xml, srx}>"
6
7 }
8
9 if [ -z "$1" -o ! -f "$1" ]
10 then
11     usage
12     exit 1
13 fi
14
15 DOC="$1"
16 STARTQ="$2"
17 if [ -z "$STARTQ" ]
18 then
19     STARTQ=0
20 fi
21
22
23 FILENAME=`basename "$DOC"`
24 FILENAME=`echo "$FILENAME" | sed -e 's/\.srx/\.xml/'`
25 REFERENCE=tests/perf_tests/"$FILENAME".best
26 QUERIES=tests/perf_tests/"$FILENAME".queries
27
28 function cecho() {
29   case "$1" in
30       green)
31           START="\033[0;32m"
32           END="\033[0m"
33           ;;
34       yellow)
35           START="\033[1;33m"
36           END="\033[0m"
37           ;;
38       red)
39           START="\033[0;31m"
40           END="\033[0m"
41           ;;
42       *)
43           START=""
44           END=""
45           ;;
46   esac
47   echo -n -e "${START}${2}${END}"
48 }
49
50 function getline(){
51     FILE="$1"
52     I="$2"
53     cat "$FILE" | tail -n +"$I" | head -n 1
54 }
55
56
57
58 I=1
59
60 while read Q
61 do
62 if [ $I -lt $STARTQ ]
63 then
64     I=$(($I + 1))
65     continue
66 fi
67 echo "Query $I"
68 echo "$Q"
69 REF=`getline "$REFERENCE" "$I"`
70 RCOUNT=`echo "$REF" | cut -f 2 -d ,`
71 RTCOUNT=`echo "$REF" | cut -f 3 -d ,`
72 RTMAT=`echo "$REF" | cut -f 4 -d ,`
73
74 ./main.native -c "$DOC" "$Q" > tmp 2>&1
75 TCOUNT=`cat tmp | grep 'Execution time' | grep -o '[0-9]\+\.[0-9]*' | sort -g | head -1`
76 CCOUNT=`cat tmp | grep 'Number of results' | grep -o '[0-9]\+'`
77
78 ./main.native  "$DOC" "$Q" > tmp 2>&1
79 TMAT=`cat tmp | grep 'Execution time' | grep -o '[0-9]\+\.[0-9]*' | sort -g | head -1`
80 MCOUNT=`cat tmp | grep 'Number of results' | grep -o '[0-9]\+'`
81
82 rm -f tmp
83 I=$(($I + 1))
84
85 if [ "$MCOUNT" != "$CCOUNT" ]
86 then
87     echo "Count mismatch between counting and materialization ! ($MCOUNT, $CCOUNT)"
88     echo
89     continue
90 fi
91
92 if [ "$MCOUNT" != "$RCOUNT" -a "$RCOUNT" ]
93 then
94     echo "Count mismatch between current and reference implementation!"
95     echo
96     continue
97 fi
98
99 CSPEED=`echo '5k 1 '  "$TCOUNT" "$RTCOUNT" ' / - p' | dc`
100 echo -n "Reference counting time: $RTCOUNT, Current counting time: $TCOUNT, "
101 case $CSPEED in
102     -.0*)
103         cecho yellow "slow-down: $CSPEED"
104         ;;
105     -*) cecho red "slow-down: $CSPEED"
106         ;;
107     *)
108         cecho green "speed-up: $CSPEED"
109         ;;
110 esac
111 echo
112
113 MSPEED=`echo '5k 1 ' "$TMAT" "$RTMAT"  ' / - p' | dc`
114 echo -n "Reference mat. time: $RTMAT, Current mat. time: $TMAT, "
115 case $MSPEED in
116     -.0*)
117         cecho yellow "slow-down: $MSPEED"
118         ;;
119     -*) cecho red "slow-down: $MSPEED"
120         ;;
121     *)
122         cecho green "speed-up: $MSPEED"
123         ;;
124 esac
125 echo
126 echo
127
128 done < "$QUERIES"