blob: 09544387b3ff6833c1f3c1a1aeae426bd0db5561 [file] [log] [blame]
#!/usr/bin/env bash
print_help() {
echo "$1 [-a] [-i ITERATIONS] [-m MAXFAILS] [-s SEED] [TEST]..."
}
run_test() {
local result name=$1 seed=$2
CLKNETSIM_RANDOM_SEED=$seed ./$name
result=$?
if [ $result -ne 0 -a $result -ne 9 ]; then
if [ $abort_on_fail -ne 0 ]; then
echo 1>&2
echo Failed with random seed $seed 1>&2
exit 1
fi
failed_seeds=(${failed_seeds[@]} $seed)
fi
return $result
}
abort_on_fail=0
iterations=1
max_fails=0
random_seed=${CLKNETSIM_RANDOM_SEED:-$RANDOM}
while getopts ":ai:m:s:" opt; do
case $opt in
a) abort_on_fail=1;;
i) iterations=$OPTARG;;
m) max_fails=$OPTARG;;
s) random_seed=$OPTARG;;
*) print_help "$0"; exit 3;;
esac
done
shift $[$OPTIND - 1]
passed=() failed=() skipped=() failed_seeds=()
[ $# -gt 0 ] && tests=($@) || tests=([0-9]*-*[^_])
for test in "${tests[@]}"; do
if [ $iterations -gt 1 ]; then
printf "%-30s" "$test"
fails=0
for i in $(seq 1 $iterations); do
run_test $test $[$random_seed + $i - 1] > /dev/null
case $? in
0) echo -n ".";;
9) break;;
*) echo -n "x"; fails=$[$fails + 1];;
esac
done
if [ $i -lt $iterations ]; then
printf "%${iterations}s" ""
echo " SKIP"
result=9
elif [ $fails -gt $max_fails ]; then
echo " FAIL"
result=1
else
echo " PASS"
result=0
fi
else
printf "%s " "$test"
run_test $test $random_seed
result=$?
echo
fi
case $result in
0) passed=(${passed[@]} $test);;
9) skipped=(${skipped[@]} $test);;
*) failed=(${failed[@]} $test);;
esac
done
echo
echo "SUMMARY:"
echo " TOTAL $[${#passed[@]} + ${#failed[@]} + ${#skipped[@]}]"
echo " PASSED ${#passed[@]}"
echo " FAILED ${#failed[@]} (${failed[@]}) (${failed_seeds[@]})"
echo " SKIPPED ${#skipped[@]} (${skipped[@]})"
[ ${#failed[@]} -eq 0 ]