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