| 
     1 #!/bin/bash  | 
         | 
     2   | 
         | 
     3 # to make the script fail safely  | 
         | 
     4 set -euo pipefail  | 
         | 
     5   | 
         | 
     6 out=${1:-output} | 
         | 
     7   | 
         | 
     8 echo "" > $out  | 
         | 
     9   | 
         | 
    10 echo "Below is the feedback and provisional marks for your submission" >> $out  | 
         | 
    11 echo "for assignment 7 Part 1.  Please note all marks are provisional until" >> $out  | 
         | 
    12 echo "ratified by the assessment board -- this is not an official" >> $out  | 
         | 
    13 echo "results transcript." >> $out  | 
         | 
    14 echo "" >> $out  | 
         | 
    15   | 
         | 
    16 echo "Below is the feedback for your submission of CW 7, Part 1." >> $out  | 
         | 
    17 echo "" >> $out  | 
         | 
    18   | 
         | 
    19   | 
         | 
    20 # marks for CW7 part 1  | 
         | 
    21 marks=$(( 0 ))  | 
         | 
    22   | 
         | 
    23   | 
         | 
    24 # compilation tests (used to be 30 secs)  | 
         | 
    25   | 
         | 
    26 function scala_compile { | 
         | 
    27   (ulimit -t 360; JAVA_OPTS="-Xmx1g" scala "$1" 2> /dev/null 1> /dev/null)   | 
         | 
    28 }  | 
         | 
    29   | 
         | 
    30 # functional tests  | 
         | 
    31   | 
         | 
    32 function scala_assert { | 
         | 
    33   (ulimit -t 360; JAVA_OPTS="-Xmx1g" scala -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null)  | 
         | 
    34 }  | 
         | 
    35   | 
         | 
    36 # purity test  | 
         | 
    37   | 
         | 
    38 function scala_vars { | 
         | 
    39    (egrep '\bvar\b|\breturn\b|\.par|ListBuffer|mutable|new Array' "$1" 2> /dev/null 1> /dev/null)  | 
         | 
    40 }  | 
         | 
    41   | 
         | 
    42   | 
         | 
    43 # knights1: purity test  | 
         | 
    44   | 
         | 
    45 echo "knight1.scala does not contain vars, returns, Arrays, ListBuffers etc?" | tee -a $out  | 
         | 
    46   | 
         | 
    47 if (scala_vars knight1.scala)  | 
         | 
    48 then  | 
         | 
    49   echo "  --> fail" | tee -a $out  | 
         | 
    50   tsts0=$(( 1 ))  | 
         | 
    51 else  | 
         | 
    52   echo "  --> success" | tee -a $out  | 
         | 
    53   tsts0=$(( 0 ))   | 
         | 
    54 fi  | 
         | 
    55   | 
         | 
    56   | 
         | 
    57 # compilation test  | 
         | 
    58   | 
         | 
    59 if [ $tsts0 -eq 0 ]  | 
         | 
    60 then      | 
         | 
    61   echo "knight1.scala runs?" | tee -a $out  | 
         | 
    62   | 
         | 
    63   if (scala_compile knight1.scala)  | 
         | 
    64   then  | 
         | 
    65     echo "  --> success " | tee -a $out  | 
         | 
    66     tsts1=$(( 0 ))  | 
         | 
    67   else  | 
         | 
    68     echo "  --> scala did not run knight1.scala" | tee -a $out  | 
         | 
    69     tsts1=$(( 1 ))   | 
         | 
    70   fi  | 
         | 
    71 else  | 
         | 
    72   tsts1=$(( 1 ))     | 
         | 
    73 fi  | 
         | 
    74   | 
         | 
    75 ### knight1a test  | 
         | 
    76   | 
         | 
    77 if [ $tsts1 -eq 0 ]  | 
         | 
    78 then  | 
         | 
    79     echo " is_legal(8, Nil)(3, 4) == true " | tee -a $out  | 
         | 
    80     echo " is_legal(8, List((4, 1), (1, 0)))(4, 1) == false " | tee -a $out  | 
         | 
    81     echo " is_legal(2, Nil)(0, 0) == true" | tee -a $out                            | 
         | 
    82   | 
         | 
    83     if (scala_assert "knight1.scala" "knight1a_test.scala")  | 
         | 
    84     then  | 
         | 
    85         echo "  --> success" | tee -a $out  | 
         | 
    86 	marks=$(( marks + 1 ))  | 
         | 
    87     else  | 
         | 
    88         echo "  --> test failed" | tee -a $out  | 
         | 
    89     fi  | 
         | 
    90 fi  | 
         | 
    91   | 
         | 
    92 ### knight1b test  | 
         | 
    93   | 
         | 
    94 if [ $tsts1 -eq 0 ]  | 
         | 
    95 then  | 
         | 
    96   echo " legal_moves(8, Nil, (2,2)) == List((3,4), (4,3), (4,1), (3,0), (1,0), (0,1), (0,3), (1,4))" | tee -a $out  | 
         | 
    97   echo " legal_moves(8, Nil, (7,7)) == List((6,5), (5,6))" | tee -a $out  | 
         | 
    98   echo " legal_moves(8, List((4,1), (1,0)), (2,2)) == List((3,4), (4,3), (3,0), (0,1), (0,3), (1,4))" | tee -a $out  | 
         | 
    99   echo " legal_moves(8, List((6,6)), (7,7)) == List((6,5), (5,6))" | tee -a $out  | 
         | 
   100   echo " legal_moves(1, Nil, (0,0)) == Nil" | tee -a $out  | 
         | 
   101   echo " legal_moves(2, Nil, (0,0)) == Nil" | tee -a $out  | 
         | 
   102   echo " legal_moves(3, Nil, (0,0)) == List((1,2), (2,1))" | tee -a $out  | 
         | 
   103     | 
         | 
   104   if (scala_assert "knight1.scala" "knight1b_test.scala")  | 
         | 
   105   then  | 
         | 
   106      echo "  --> success" | tee -a $out  | 
         | 
   107      marks=$(( marks + 1 ))  | 
         | 
   108   else  | 
         | 
   109     echo "  --> test failed" | tee -a $out  | 
         | 
   110   fi  | 
         | 
   111 fi  | 
         | 
   112   | 
         | 
   113   | 
         | 
   114 ### knight1c test  | 
         | 
   115   | 
         | 
   116 if [ $tsts1 -eq 0 ]  | 
         | 
   117 then  | 
         | 
   118   echo " all_tours from every position on the board" | tee -a $out  | 
         | 
   119   echo " dim = 1: 1" | tee -a $out  | 
         | 
   120   echo "       2: 0,0,0,0" >>  $out  | 
         | 
   121   echo "       3: 0,0,0,0,0,0,0,0,0" >>  $out  | 
         | 
   122   echo "       4: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" | tee -a $out  | 
         | 
   123   echo "       5: 304,0,56,0,304,0,56,0,56,0,56,0,64,0,56,0,56,0,56,0,304,0,56,0,304" | tee -a $out  | 
         | 
   124   echo " enum_tours(5, List((0,2)) ) => 56 tours? and all correct?" | tee -a $out  | 
         | 
   125     | 
         | 
   126   if (scala_assert "knight1.scala" "knight1c_test.scala")   | 
         | 
   127   then  | 
         | 
   128      echo "  --> success" | tee -a $out  | 
         | 
   129      marks=$(( marks + 2 ))  | 
         | 
   130   else  | 
         | 
   131     echo "  --> test failed" | tee -a $out  | 
         | 
   132   fi  | 
         | 
   133 fi  | 
         | 
   134   | 
         | 
   135   | 
         | 
   136 # knights2: var test  | 
         | 
   137   | 
         | 
   138 echo "knight2.scala does not contain vars, returns, Arrays, ListBuffers etc?" | tee -a $out  | 
         | 
   139   | 
         | 
   140 if (scala_vars knight2.scala)  | 
         | 
   141 then  | 
         | 
   142   echo "  --> fail" | tee -a $out  | 
         | 
   143   tsts0=$(( 1 ))  | 
         | 
   144 else  | 
         | 
   145   echo "  --> success" | tee -a $out  | 
         | 
   146   tsts0=$(( 0 ))   | 
         | 
   147 fi  | 
         | 
   148   | 
         | 
   149   | 
         | 
   150 # compilation test  | 
         | 
   151 if  [ $tsts0 -eq 0 ]  | 
         | 
   152 then      | 
         | 
   153   echo "knight2.scala runs?" | tee -a $out  | 
         | 
   154   | 
         | 
   155   if (scala_compile knight2.scala)  | 
         | 
   156   then  | 
         | 
   157     echo "  --> success" | tee -a $out  | 
         | 
   158     tsts1=$(( 0 ))  | 
         | 
   159   else  | 
         | 
   160     echo "  --> scala did not run knight2.scala" | tee -a $out  | 
         | 
   161     tsts1=$(( 1 ))   | 
         | 
   162   fi  | 
         | 
   163 else  | 
         | 
   164   tsts1=$(( 1 ))       | 
         | 
   165 fi  | 
         | 
   166   | 
         | 
   167 ### knight2a test  | 
         | 
   168   | 
         | 
   169 if [ $tsts1 -eq 0 ]  | 
         | 
   170 then  | 
         | 
   171   echo " val f = (x:(Int, Int)) => if (x._1 > 3) Some(List(x)) else None " | tee -a $out  | 
         | 
   172   echo "   first(List((1,0),(2,0),(3,0),(4,0)), f) == Some(List((4,0)))" | tee -a $out  | 
         | 
   173   echo "   first(List((1,0),(2,0),(3,0)), f) == None" | tee -a $out  | 
         | 
   174   | 
         | 
   175   if (scala_assert "knight2.scala" "knight2a_test.scala")   | 
         | 
   176   then  | 
         | 
   177     echo "  --> success" | tee -a $out  | 
         | 
   178     marks=$(( marks + 1 ))  | 
         | 
   179   else  | 
         | 
   180     echo "  --> test failed" | tee -a $out  | 
         | 
   181   fi  | 
         | 
   182 fi  | 
         | 
   183   | 
         | 
   184   | 
         | 
   185 ### knight2b test  | 
         | 
   186   | 
         | 
   187 if [ $tsts1 -eq 0 ]  | 
         | 
   188 then  | 
         | 
   189   echo " is first_tour(8, List((0, 0))) ok? " | tee -a $out  | 
         | 
   190   echo " is first_tour(4, List((0, 0))) == None " | tee -a $out  | 
         | 
   191   | 
         | 
   192   if (scala_assert "knight2.scala" "knight2b_test.scala")   | 
         | 
   193   then  | 
         | 
   194      echo "  --> success" | tee -a $out  | 
         | 
   195      marks=$(( marks + 2 ))  | 
         | 
   196   else  | 
         | 
   197     echo "  --> test failed" | tee -a $out  | 
         | 
   198   fi  | 
         | 
   199 fi  | 
         | 
   200   | 
         | 
   201   | 
         | 
   202 ## final marks  | 
         | 
   203 echo "Overall mark for Part 1" | tee -a $out  | 
         | 
   204 echo "$marks" | tee -a $out  | 
         | 
   205   | 
         | 
   206   |