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 > /dev/null
  26. for i in $(find * -name '*.c' | sort); do
  27. asm=${i/.c/.asm}
  28. answer=`spim -noexception load $absdir/$asm 2> /dev/null | tail -n 1`
  29. exp_ans=`grep "##answer" $absdir/$i | $sed 's/\/\* ##answer:\s\+\([^\*]\+\)\b\s*\*\//\1/g'`
  30. printf $fmt "${i%.*}"
  31. echo -n " ... "
  32. if [ "$answer" == "$exp_ans" ]; then
  33. echo -e "$pass"
  34. passes=$((passes+1))
  35. else
  36. echo -e "$fail expected $exp_ans got $answer"
  37. fi
  38. tests=$((tests+1))
  39. done
  40. end=$($date +%s.%N)
  41. runtime=$(echo "$end $start" | $awk '{printf "%.2f", $1 - $2}')
  42. echo -e "\n$passes/$tests passed in $runtime""s"
  43. make clean > /dev/null
  44. exit $((tests-passes))