OpenFPGA/libs/librtlnumber/verify_librtlnumber.sh

125 lines
3.7 KiB
Bash
Executable File

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