#!/bin/sh

TEST="$1"
NAME=$(basename "$TEST")

mkdir -p "reports/$NAME"

try_vg() {
	if which valgrind > /dev/null 2>&1; then
		valgrind -q --leak-check=full --error-exitcode=1 "$1"
	else
		eval "$1"
	fi
}

I=0
while :; do
	# if no error happened, consider it a pass
	if try_vg "./${TEST}" > "reports/$NAME/run-$I" 2>&1
	then
		echo "$NAME: PASSED"
		exit 0
	fi

	if grep 'loss record' "reports/$NAME/run-$I" >/dev/null; then
		echo "$NAME: MEM FAILED"
		cat "reports/$NAME/run-$I"
		exit 1
	fi

	# an error occured, was it handled properly?
	if grep 'COVSRV: EXIT' "reports/$NAME/run-$I" >/dev/null; then
		I=$((I+1))
		continue
	fi

	echo "$NAME: FAILED"
	cat "reports/$NAME/run-$I"
	exit 1
done
