#!/bin/bash

convert=bmscripts/bmconvert.pl
rawfile=results/_benchmark.raw

while getopts :f:h opt; do
    case $opt in
        h)  echo "Usage: $(basename "$0") [-f <RAWFILE>] [<benchmarks pattern>] [<go test arguments>]"
            exit 0
            ;;
        f)  rawfile=$(pwd)/$OPTARG
            ;;
        \?) (( OPTIND-- ))
            break
            ;;
    esac
done
shift $(( OPTIND - 1 ))


bmname=${1:-.}
shift 1 &> /dev/null


[[ -f $convert  &&  -x $convert ]] || { echo "no executable $convert script. where are you?"; exit 1; }
mkdir -p "$(dirname "$rawfile")"
if ! touch "$rawfile"; then
    echo "can't create ${rawfile}"; exit 1
fi

cd "`git rev-parse --show-toplevel`"
set -o pipefail
echo "Writing to $rawfile"
go test -run '^Benchmark' -benchmem -bench "$bmname" "$@" | tee "$rawfile" && \
    exec "$convert" -b generic "$rawfile"
