#!/usr/bin/env bash

declare -a results
declare -i PYOPT=1 passed=0 failed=0 exit_code=0
declare COLOR_GREEN='\e[32m' COLOR_RED='\e[91m' COLOR_RESET='\e[39m'
MICROPYTHON="${MICROPYTHON:-../build/unix/micropython}"

print_summary() {
    echo
    echo 'Summary:'
    echo '-------------------'
    printf '%b\n' "${results[@]}"
    if [ $exit_code == 0 ]; then
        echo -e "${COLOR_GREEN}PASSED:${COLOR_RESET} $passed/$num_of_tests tests OK!"
    else
        echo -e "${COLOR_RED}FAILED:${COLOR_RESET} $failed/$num_of_tests tests failed!"
    fi
}

trap 'print_summary; echo -e "${COLOR_RED}Interrupted by user!${COLOR_RESET}"; exit 1' SIGINT

cd $(dirname $0)

[ -z "$*" ] && tests=(test_*.py) || tests=($*)

declare -i num_of_tests=${#tests[@]}

for test_case in ${tests[@]}; do
    echo
    if $MICROPYTHON -O$PYOPT $test_case; then
        results+=("${COLOR_GREEN}OK:${COLOR_RESET} $test_case")
        ((passed++))
    else
        results+=("${COLOR_RED}FAIL:${COLOR_RESET} $test_case")
        ((failed++))
        exit_code=1
    fi
done

print_summary
exit $exit_code
