d5f92dceda44355468e9d5cf79f76f9e7193c311
[c11concurrency-benchmarks.git] / cdschecker_modified_benchmarks / test.sh
1 #!/bin/bash
2
3 EXE=$1
4 TOTAL_RUN=500
5 COUNT_DATA_RACE=0
6 COUNT_TIME=0
7
8 for i in `seq 1 1 $TOTAL_RUN` ; do
9   OUTPUT="$( { time $EXE; } 2>&1 )"
10   RACE="$(echo "$OUTPUT" | grep "race")"
11   if [ -n "$RACE" ] ; then
12     ((++COUNT_DATA_RACE))
13   fi
14
15   USER_TIME="$(echo "$OUTPUT" | grep -o "user..m.\....")"
16   USER_TIME_S="$(echo $USER_TIME | cut -d 'm' -f2 | cut -d '.' -f1)"
17   USER_TIME_MS="$(echo $USER_TIME | cut -d 'm' -f2 | cut -d '.' -f2)"
18
19   SYS_TIME="$(echo "$OUTPUT" | grep -o "sys..m.\....")"
20   SYS_TIME_S="$(echo $SYS_TIME | cut -d 'm' -f2 | cut -d '.' -f1)"
21   SYS_TIME_MS="$(echo $SYS_TIME | cut -d 'm' -f2 | cut -d '.' -f2)"
22
23   TIME_EXE=$((10#$USER_TIME_S * 1000 + 10#$USER_TIME_MS + 10#$SYS_TIME_S * 1000 + 10#$SYS_TIME_MS))
24   COUNT_TIME=$((COUNT_TIME + TIME_EXE))
25 done
26
27 AVG_DATA_RACE=$(echo "${COUNT_DATA_RACE} * 100 / ${TOTAL_RUN}" | bc -l | xargs printf "%.1f")
28 AVG_TIME_INT=$(echo "${COUNT_TIME} / ${TOTAL_RUN} + 0.5" | bc -l | xargs printf "%.0f")
29
30 # -3 / log(1 - p) < n
31 #NO_99=$(echo "-3 / (l(1 - (${AVG_DATA_RACE} / 100)) / l(10)) + 0.5" | bc -l | xargs printf "%.0f")
32 #TIME_99=$(echo "${NO_99} * ${AVG_TIME_INT}" | bc -l)
33
34 echo "Runs: $TOTAL_RUN | Data races: $COUNT_DATA_RACE | Total time: ${COUNT_TIME}ms"
35 echo "Time: ${AVG_TIME_INT}ms | Race rate: ${AVG_DATA_RACE}%"
36 #echo "Time: ${AVG_TIME_INT}ms | Race rate: ${AVG_DATA_RACE}% | No. 99.9%: ${NO_99} | Time 99.9%: ${TIME_99}ms"