#!/usr/bin/env bash

success() {
	echo -e "\033[92m\033[1m\033[7m${@}\033[0m"
}

success_lite() {
	echo -e "\033[92m${@}\033[0m"
}

error() {
	echo -e "\033[91m\033[7m\033[1m${@}\033[0m"
}

warn() {
	echo -e "\033[93m\033[1m\033[7m${@}\033[0m"
}

warn_lite() {
	echo -e "\033[93m${@}\033[0m"
}

exit_on_error() {
	if [ $1 -ne 0 ]
	then
		error "Error in test. Exiting..."
		exit $1
	else
		success_lite "Success in test."
	fi
}

handle() {
	$1
	exit_on_error $?
}

help() {
	echo "Usage: ./test [help] [c_unit] [size]"
}

c_unit() {
	warn "Running C unit test chain"
	echo

	# Compile C unit tests
	warn_lite "Making C header unit test"
	handle make c_unit
	echo

	warn_lite "Running C header unit test"
	handle bin/c
	echo
	
	success "Finished"
}

size() {
	warn "Running size test on optimization levels"
	echo

	warn_lite "Compiling and getting file sizes"
	handle tests/size.py
	echo

	success "Finished"
}

for test in "$@"
do
	$test
done

echo -e "finished: ${SECONDS} seconds"