#!/bin/bash uname=`uname` if [ "$uname" = "Darwin" ]; then date="gdate" readlink="greadlink" wc="gwc" sed="gsed" awk="gawk" else date="date" readlink="readlink" wc="wc" sed="sed" awk="awk" fi start=$($date +%s.%N) absdir=$($readlink -f $(dirname $0)) pass="\033[32mPASSED\033[0m" fail="\033[31mFAILED\033[0m" tests=0 passes=0 num=`find * -name '*.c' | $wc -L` num=$((num-2)) fmt=`echo "%-$num""s"` make > /dev/null for i in $(find * -name '*.c' | sort); do asm=${i/.c/.asm} answer=`spim -noexception load $absdir/$asm 2> /dev/null | tail -n 1` exp_ans=`grep "##answer" $absdir/$i | $sed 's/\/\* ##answer:\s\+\([^\*]\+\)\b\s*\*\//\1/g'` printf $fmt "${i%.*}" echo -n " ... " if [ "$answer" == "$exp_ans" ]; then echo -e "$pass" passes=$((passes+1)) else echo -e "$fail expected $exp_ans got $answer" fi tests=$((tests+1)) done end=$($date +%s.%N) runtime=$(echo "$end $start" | $awk '{printf "%.2f", $1 - $2}') echo -e "\n$passes/$tests passed in $runtime""s" make clean > /dev/null exit $((tests-passes))