#!/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