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