#!/bin/sh
export RUNS=100000
BENCH_FN=strcasestr

for I in ${BENCH_FN}_*.c; do
  gcc $I -O3 -fPIC -shared -o tmp/lib$I.so
done
gcc random.c -o random -L. -l${BENCH_FN}  -lm -g
gcc aaab.c -o aaab  -L. -l${BENCH_FN}  -lm -g
gcc planted.c -o planted  -L. -l${BENCH_FN}  -lm -g

gcc ts_avg.c -lm -o ts_avg
./ts_avg

comp(){
  echo $1 > tmp/result_$1
  ln -s -f tmp/lib$I.so lib${BENCH_FN}.so
  LD_LIBRARY_PATH=. ./$2 $3 $4 $5>> tmp/result_$1 2> tmp/output_$1
  cp plot.dat  data/${1}_$GNAME.dat
  cp plot_r.dat data/${1}_$GNAME_r.dat
  cp plot_rng.dat data/${1}_${GNAME}_rng.dat

  if [ -e tmp/output ] ; then
    diff -u tmp/output_$1 tmp/output
  fi
  cp tmp/output_$1 tmp/output
}
html_a(){
  echo $* >>html/${BENCH_FN}.html
}
html_r(){
  echo $* >>html/${BENCH_FN}_r.html
}
html_rng(){
  echo $* >>html/${BENCH_FN}_rng.html
}

html(){
  html_a $*
  html_r $*
  html_rng $*
}

gnuplotfile(){
  echo reset > tmp/plot.gp
  echo set terminal png >> tmp/plot.gp
  echo set xlabel "'haystack size'" >> tmp/plot.gp
  echo set ylabel "'$2'" >> tmp/plot.gp
  echo "plot \\" >> tmp/plot.gp
  for I in ${BENCH_FN}_*.c; do
    echo "\"data/${I}_${GNAME}$1.dat\" $3 title '$I', \\" >> tmp/plot.gp
  done
  echo 0 >> tmp/plot.gp
  cat tmp/plot.gp
  gnuplot tmp/plot.gp > html/$GNAME$1.png
  chmod a+r html/$GNAME$1.png

}

draw(){
  rm -f tmp/output
  for I in ${BENCH_FN}_*.c; do
    comp $I $1 $2 $3 $4
  done 
  gnuplotfile ""     "instructions"            "using 1:2 with lines"
  gnuplotfile "_r"   "instructions per byte"   "using 1:2 with lines"
  gnuplotfile "_rng" "instructions"            "using 1:2:3 with filledcu"
}

echo "<html><body style=\"width:1000%;\"><table>" > html/${BENCH_FN}.html
chmod a+r html/${BENCH_FN}.html
echo "<html><body style=\"width:1000%;\"><table>" > html/${BENCH_FN}_r.html
chmod a+r html/${BENCH_FN}_r.html
echo "<html><body style=\"width:1000%;\"><table>" > html/${BENCH_FN}_rng.html
chmod a+r html/${BENCH_FN}_r.html

export N=1
try(){
  echo $1 $2 $3 $4
  html "<tr><td>*_$1_*_$3_$4_${ALIGNED}</td>"
  for NO in 1 10 100 1000 10000; do
    export GNAME="$1_${NO}_$3_$4_${ALIGNED}"
    export GNAME_r="$1_${NO}_$3_$4_${ALIGNED}_r"
    html_a "<td><img src='$GNAME.png'></img></td>"
    html_r "<td><img src='$GNAME_r.png'></img></td>"
    html_rng "<td><img src='${GNAME}_rng.png'></img></td>"

  done
  html "</tr>"
}

. ./benchmark

try(){
  export GNAME="$1_$2_$3_$4_${ALIGNED}"
  export GNAME_r="$1_$2_$3_$4_${ALIGNED}_r"
  echo $GNAME
  draw $1 $2 $3 $4
}
for NO in 1 10 100 1000 10000; do
  export N=$NO
  . ./benchmark
done


html "</table><pre>"
cat /proc/cpuinfo >> html/${BENCH_FN}.html
cat /proc/cpuinfo >> html/${BENCH_FN}_r.html
cat /proc/cpuinfo >> html/${BENCH_FN}_rng.html

html "</pre></body></html>" 
