Year 2 compilers coureswork

test.sh 990B

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