#!/bin/sh pass=0 fail=0 skip=0 for testfile in tests/*.bth; do outfile=${testfile%.bth}.out testname=${testfile#tests/} testname=${testname%.bth} if [ ! -f "$outfile" ]; then printf '\033[33mSKIP\033[0m %s (no output file)\n' "$testname" skip=$((skip + 1)) else output="$(./bth $testfile 2>&1)" run_res=$? echo "$output" | diff $outfile - >/dev/null diff_res=$? case $diff_res in 0) printf '\033[32m\033[1mPASS\033[0m %s\n' "$testname" pass=$((pass + 1)) ;; 1) printf '\033[31m\033[1mFAIL\033[0m %s\n' "$testname" printf "\tgot output: %s\n" "$(echo "$output" | head -n4)" printf "\texpected: " cat $outfile fail=$((fail + 1)) ;; esac fi done echo pnum () { if [ $1 -eq 0 ]; then printf "0 %s; " "$2" else printf "\033[3%dm%d\033[0m %s; " $3 $1 "$2" fi } pnum $pass passed 2 pnum $fail failed 1 pnum $skip skipped 3 printf "%s total\n" $((pass + fail + skip)) if [ $fail -eq 0 ]; then exit 0 else exit 1 fi