Year 2 compilers coureswork

test.sh 1.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/bin/bash
  2. uname=`uname`
  3. if [ "$uname" = "Darwin" ]; then
  4. date="gdate"
  5. readlink="greadlink"
  6. wc="gwc"
  7. sed="gsed"
  8. awk="gawk"
  9. else
  10. date="date"
  11. readlink="readlink"
  12. wc="wc"
  13. sed="sed"
  14. awk="awk"
  15. fi
  16. start=$($date +%s.%N)
  17. absdir=$($readlink -f $(dirname $0))
  18. pass="\033[32mPASSED\033[0m"
  19. fail="\033[31mFAILED\033[0m"
  20. tests=0
  21. passes=0
  22. num=`find * -name '*.c' | $wc -L`
  23. num=$((num-2))
  24. fmt=`echo "%-$num""s"`
  25. make clean > /dev/null
  26. make > /dev/null
  27. for i in $(find * -name '*.c' | sort); do
  28. asm=${i/.c/.asm}
  29. answer=`spim -noexception load $absdir/$asm 2> /dev/null | tail -n 1`
  30. exp_ans=`grep "##answer" $absdir/$i | $sed 's/\/\* ##answer:\s\+\([^\*]\+\)\b\s*\*\//\1/g'`
  31. printf $fmt "${i%.*}"
  32. echo -n " ... "
  33. if [ "$answer" == "$exp_ans" ]; then
  34. echo -e "$pass"
  35. passes=$((passes+1))
  36. else
  37. echo -e "$fail expected $exp_ans got $answer"
  38. fi
  39. tests=$((tests+1))
  40. done
  41. end=$($date +%s.%N)
  42. runtime=$(echo "$end $start" | $awk '{printf "%.2f", $1 - $2}')
  43. echo -e "\n$passes/$tests passed in $runtime""s"
  44. exit $((tests-passes))