cw2_marking/cw2_test.sh
author Christian Urban <christian.urban@kcl.ac.uk>
Mon, 03 Feb 2025 12:34:38 +0000
changeset 978 8778d23fef92
permissions -rwxr-xr-x
updated marking scripts
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
978
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     1
#!/bin/zsh
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     2
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     3
# to make the script fail safely
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     4
set -euo pipefail
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     5
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     6
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     7
out=${1:-output}
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     8
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     9
echo -e "" > $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    10
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    11
echo `date` | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    12
echo "" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    13
echo "Below is the feedback and provisional marks for your CW 2 submission." >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    14
echo "Please note all marks are provisional until ratified by the" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    15
echo "assessment board -- this is not an official results transcript." >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    16
echo "" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    17
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    18
echo "The feedback for your submission for cw02.sc" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    19
echo "" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    20
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    21
# marks for CW 2
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    22
marks=$(( 0.0 ))
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    23
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    24
# compilation tests
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    25
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    26
function scala_compile {
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    27
  (ulimit -t 30; JAVA_OPTS="-Xmx1g" amm -s "$1" 2> c$out 1> c$out)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    28
}
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    29
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    30
# functional tests
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    31
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    32
function scala_assert {
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    33
  rm -rf /Users/cu/.ammonite/cache/3.0.0-M2/* 2> /dev/null ;  
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    34
  (ulimit -t 30; JAVA_OPTS="-Xmx1g -XX:MaxJavaStackTraceDepth=10" amm -s "$1" 1>> $out 2>> $out)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    35
}
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    36
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    37
function scala_fail {
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    38
  #rm -rf /Users/cu/.ammonite/cache/3.0.0-M2/* 2> /dev/null ;  
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    39
  (ulimit -t 30; JAVA_OPTS="-Xmx1g -XX:MaxJavaStackTraceDepth=10" amm -s "$1") # 1>> $out 2>> $out)
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    40
}
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    41
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    42
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    43
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    44
### compilation test
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    45
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    46
echo -e "0) cw02.sc compiles?\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    47
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    48
if (scala_compile "c.sc")
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    49
then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    50
    echo -e "   --> yes cw02.sc compiles\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    51
    tsts=$(( 0 ))
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    52
else
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    53
    echo -e "   --> AMM DID NOT compile cw02.sc\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    54
    cat c$out | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    55
    echo -e "\n\n" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    56
    tsts=$(( 1 ))
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    57
fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    58
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    59
echo >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    60
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    61
### "read n;" test
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    62
echo >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    63
#echo -e "\n\n\n" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    64
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    65
if [ $tsts -eq 0 ]
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    66
then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    67
    echo -e "1) Tokenise string from Question 2:\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    68
    echo -e "   tokenise(\"read n;\") == List(T_KEYWORD(read), T_ID(n), T_SEMI) ?\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    69
    if (scala_assert "c1.sc")
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    70
    then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    71
	echo -e "   --> success (+ 3.0 Marks)\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    72
	marks=$(( marks + 3.0 ))
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    73
    else
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    74
	echo -e "   --> FAILED\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    75
	echo -e "       instead it generates:\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    76
	(scala_fail "c1a.sc" || true) | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    77
	echo -e "\n\n" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    78
    fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    79
fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    80
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    81
### tokenise test
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    82
echo >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    83
#echo -e "\n\n\n" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    84
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    85
if [ $tsts -eq 0 ]
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    86
then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    87
  echo -e "2) Tokenise test with example files (does it raise an exception):\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    88
  cat cw02.sc c3_add.sc > cw023_add.sc  
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    89
  if (scala_assert "c3.sc")
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    90
  then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    91
      echo -e "   --> success (+ 3.0 Marks)\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    92
      marks=$(( marks + 3.0 ))
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    93
  else
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    94
      echo -e "   --> FAILED\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    95
      #cat $out | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    96
  fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    97
fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    98
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    99
### tokenise test for collatz2.while
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   100
echo >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   101
#echo -e "\n\n\n" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   102
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   103
if [ $tsts -eq 0 ]
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   104
then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   105
  echo -e "3) Check tokens for collatz2.while:\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   106
  cat cw02.sc c4_add.sc > cw024_add.sc  
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   107
  if (scala_assert "c4.sc")
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   108
  then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   109
      echo -e "   --> success (+ 2.0 Marks)\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   110
      marks=$(( marks + 2.0 ))
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   111
  else
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   112
      echo -e "   --> FAILED\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   113
      #cat $out | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   114
  fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   115
fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   116
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   117
### are constructors primitive
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   118
echo >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   119
#echo -e "\n\n\n" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   120
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   121
if [ $tsts -eq 0 ]
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   122
then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   123
    echo -e "4) Are regex constructors all primitive?\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   124
    echo -e "   For example, RANGE.toString == \"RANGE\"\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   125
    if (scala_assert "c5.sc")
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   126
    then
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   127
	echo -e "   --> FAILED\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   128
	tail -25 $out | pr -to10
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   129
	echo -e "\n\n" >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   130
    else
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   131
	echo -e "   --> success (+ 2.0 Marks)\n" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   132
	marks=$(( marks + 2.0 ))
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   133
    fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   134
fi
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   135
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   136
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   137
## final marks
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   138
echo >> $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   139
echo "Overall mark for CW 2" | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   140
printf " %0.2f\n" $marks | tee -a $out
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   141
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   142
8778d23fef92 updated marking scripts
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
   143