#!/usr/bin/env bash

set -e

function usage {
  cat <<EOF
USAGE

  $0  [-h] [-l language-name] [-e example-file-name] [-r repetition-count]

OPTIONS

  -h  print this message

  -l  run only the benchmarks for the given language

  -e  run only the benchmarks that parse the example file with the given name

  -r  parse each sample the given number of times (default 5)

  -g  debug

EOF
}

mode=normal

while getopts "hgl:e:r:" option; do
  case ${option} in
    h)
      usage
      exit
      ;;
    g)
      mode=debug
      ;;
    e)
      export TREE_SITTER_BENCHMARK_EXAMPLE_FILTER=${OPTARG}
      ;;
    l)
      export TREE_SITTER_BENCHMARK_LANGUAGE_FILTER=${OPTARG}
      ;;
    r)
      export TREE_SITTER_BENCHMARK_REPETITION_COUNT=${OPTARG}
      ;;
    *)
      usage
      exit 1
      ;;
  esac
done

if [[ $mode == debug ]]; then
  test_binary=$(
    cargo bench benchmark -p tree-sitter-cli --no-run --message-format=json 2> /dev/null |
    jq -rs 'map(select(.target.name == "benchmark" and .executable))[0].executable'
  )
  env | grep TREE_SITTER
  echo "$test_binary"
else
  exec cargo bench benchmark -p tree-sitter-cli
fi
