#!/bin/bash
#Authors: Aaron Graham (aaron.graham@unb.ca, aarongraham9@gmail.com),
#         Jean-Philippe Legault (jlegault@unb.ca, jeanphilippe.legault@gmail.com) and
#          Dr. Kenneth B. Kent (ken@unb.ca)
#          for the Reconfigurable Computing Research Lab at the
#           Univerity of New Brunswick in Fredericton, New Brunswick, Canada

# trap ctrl-c and call ctrl_c()
trap ctrl_c INT

TOTAL_TEST_RAN=0
FAILURE_COUNT=0
DEBUG=0

function ctrl_c() {
    FAILURE_COUNT=$((FAILURE_COUNT+1))
	exit_code ${FAILURE_COUNT} "\n\n** EXITED FORCEFULLY **\n\n"
}

function exit_code() {
	#print passed in value
	echo -e $2
	my_failed_count=$1
	echo -e "$TOTAL_TEST_RAN Tests Ran; $my_failed_count Test Failures.\n"
	[ "$my_failed_count" -gt "127" ] && echo "WARNING: Return Code may be unreliable: More than 127 Failures!"
	echo "End."
	exit ${my_failed_count}
}

# # Check if Library 'file' "${0%/*}/librtlnumber.a" exists
if [ ! -f ./librtlnumber.a ] && [ ! -f ./rtl_number ]; 
then
		exit_code 99 "${0%/*}rtl number is nowhere to be found :o !\n" 
fi

# Dynamically load in inputs and results from
#  file(s) on disk.
for INPUT in ${0%/*}/regression_tests/*.csv; do
	[ ! -f $INPUT ] && exit_code 99 "$INPUT regression test file not found!\n"

	echo -e "\nRunning Test File: $INPUT:"

	LINE=0

	while IFS= read -r input_line; do

		LINE=$((LINE + 1))

		#glob whitespace from line and remove everything after comment
		input_line=$(echo ${input_line} | tr -d '[:space:]' | cut -d '#' -f1)

		#flip escaped commas to 'ESCAPED_COMMA' to safeguard agains having them as csv separator
		input_line=$(echo ${input_line} | sed 's/\\\,/ESCAPED_COMMA/g')

		#skip empty lines
		[  "_" ==  "_${input_line}" ] && continue

		#split csv
		IFS="," read -ra arr <<< ${input_line}
		len=${#arr[@]}

		if 	[ ${len} != "4" ] &&		# unary
			[ ${len} != "5" ] &&		# binary
			[ ${len} != "7" ] &&		# ternary
			[ ${len} != "8" ]; then		# replicate
				[ ! -z ${DEBUG} ] && echo -e "\nWARNING: Malformed Line in CSV File ($INPUT:$LINE) Input Line: ${input_line}! Skipping...\n"
				continue
		fi

		

		TOTAL_TEST_RAN=$((TOTAL_TEST_RAN + 1))

		#deal with multiplication
		set -f

		# everything between is the operation to pipe in so we slice the array and concatenate with space
		TEST_LABEL=${arr[0]}
		EXPECTED_RESULT=${arr[$(( len -1 ))]}
		
		# build the command and get back our escaped commas 
		RTL_CMD_IN=$(printf "%s " "${arr[@]:1:$(( len -2 ))}")
		RTL_CMD_IN=$( echo ${RTL_CMD_IN} | sed 's/ESCAPED_COMMA/,/g' )

		# Check for Anything on standard out and any non-'0' exit codes:
		OUTPUT_AND_RESULT=$(${0%/*}/rtl_number ${RTL_CMD_IN})
		EXIT_CODE=$?

		if [[ 0 -ne $EXIT_CODE ]]
		then
			FAILURE_COUNT=$((FAILURE_COUNT+1))

			echo -e "\nERROR: Non-Zero Exit Code from ${0%/*}/rtl_number (on $INPUT:$LINE)\n"

			echo -e "-X- FAILED == $TEST_LABEL\t  ./rtl_number ${RTL_CMD_IN}\t Output:<$OUTPUT_AND_RESULT> != Expected:<$EXPECTED_RESULT>"

		elif [ "${OUTPUT_AND_RESULT}" == "${EXPECTED_RESULT}" ]
		then
			echo "--- PASSED == $TEST_LABEL ( ${OUTPUT_AND_RESULT} ) "

		elif [ "pass" == "$(${0%/*}/rtl_number is_true $(${0%/*}/rtl_number ${OUTPUT_AND_RESULT} == ${EXPECTED_RESULT}))" ]
		then
			echo "--- PASSED == $TEST_LABEL ( ${OUTPUT_AND_RESULT} )"

		else
			FAILURE_COUNT=$((FAILURE_COUNT+1))

			# echo -e "${0##*/}@${HOSTNAME}: DEBUG: FAILURE_COUNT: $FAILURE_COUNT\n"

			echo -e "\nERROR: Expected Result Didn't match what we got back from ${0%/*}/rtl_number (on $INPUT:$LINE)\n"

			echo -e "-X- FAILED == $TEST_LABEL\t  ./rtl_number ${RTL_CMD_IN}\t Output:<$OUTPUT_AND_RESULT> != Expected:<$EXPECTED_RESULT>"

		fi

		#unset the multiplication token override
		unset -f

	done < "$INPUT"
	#  Re-Enable Bash Wildcard Expanstion '*' 
	set +f
done

exit_code ${FAILURE_COUNT} "Completed Tests\n"
