#!/bin/sh

vg="nice valgrind --leak-check=full --num-callers=32 \
--freelist-vol=100000000 --error-exitcode=1"

ld_path=${1}; shift
unit_tester=${1}; shift
vm=${1}; shift
mode=${1}; shift
flags=${1}; shift
tests=${@}

log=log.txt

if [ -n "${ld_path}" ]; then
  export ${ld_path}
fi

echo -n "" >${log}

printf "%20s------- Unit tests -------\n" ""
${unit_tester} 2>>${log}
if [ "${?}" != "0" ]; then
  trouble=1
  echo "unit tests failed!"
fi

echo

printf "%20s------- Java tests -------\n" ""
for test in ${tests}; do
  printf "%32s: " "${test}"

  case ${mode} in
    debug|debug-fast|fast|small )
      ${vm} ${flags} ${test} >>${log} 2>&1;;

    stress* )
      ${vg} ${vm} ${flags} ${test} \
        >>${log} 2>&1;;

    * )
      echo "unknown mode: ${mode}" >&2
      exit 1;;
  esac

  if [ "${?}" = "0" ]; then
    echo "success"
  else
    echo "fail"
    trouble=1
  fi
done

echo

if [ -n "${trouble}" ]; then
  printf "see ${log} for output\n"
  exit -1
fi