|         |      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 8 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  | 
|         |     17  | 
|         |     18 # marks for CW8 part 1 | 
|         |     19 marks=$(( 0 )) | 
|         |     20  | 
|         |     21  | 
|         |     22 # compilation tests (used to be 30 secs) | 
|         |     23  | 
|         |     24 function scala_compile { | 
|         |     25   (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala "$1" 2> /dev/null 1> /dev/null)  | 
|         |     26 } | 
|         |     27  | 
|         |     28 # functional tests | 
|         |     29  | 
|         |     30 function scala_assert { | 
|         |     31   (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -nc -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null) | 
|         |     32 } | 
|         |     33  | 
|         |     34 # purity test | 
|         |     35  | 
|         |     36 function scala_vars { | 
|         |     37    (egrep '\bvar\b|\breturn\b|\.par|ListBuffer|mutable|new Array' "$1" 2> /dev/null 1> /dev/null) | 
|         |     38 } | 
|         |     39  | 
|         |     40  | 
|         |     41 # knights1: purity test | 
|         |     42  | 
|         |     43 echo "knight1.scala does not contain vars, returns, Arrays, ListBuffers etc?" | tee -a $out | 
|         |     44  | 
|         |     45 if (scala_vars knight1.scala) | 
|         |     46 then | 
|         |     47   echo "  --> fail" | tee -a $out | 
|         |     48   tsts0=$(( 1 )) | 
|         |     49 else | 
|         |     50   echo "  --> success" | tee -a $out | 
|         |     51   tsts0=$(( 0 ))  | 
|         |     52 fi | 
|         |     53  | 
|         |     54  | 
|         |     55 # compilation test | 
|         |     56  | 
|         |     57 if [ $tsts0 -eq 0 ] | 
|         |     58 then     | 
|         |     59   echo "knight1.scala runs?" | tee -a $out | 
|         |     60  | 
|         |     61   if (scala_compile knight1.scala) | 
|         |     62   then | 
|         |     63     echo "  --> success " | tee -a $out | 
|         |     64     tsts1=$(( 0 )) | 
|         |     65   else | 
|         |     66     echo "  --> scala did not run knight1.scala" | tee -a $out | 
|         |     67     tsts1=$(( 1 ))  | 
|         |     68   fi | 
|         |     69 else | 
|         |     70   tsts1=$(( 1 ))    | 
|         |     71 fi | 
|         |     72  | 
|         |     73 ### knight1 test | 
|         |     74  | 
|         |     75 if [ $tsts1 -eq 0 ] | 
|         |     76 then | 
|         |     77     echo " is_legal(8, Nil, (3, 4)) == true " | tee -a $out | 
|         |     78     echo " is_legal(8, List((4, 1), (1, 0)), (4, 1)) == false " | tee -a $out | 
|         |     79     echo " is_legal(2, Nil, (0, 0)) == true" | tee -a $out                           | 
|         |     80  | 
|         |     81     if (scala_assert "knight1.scala" "knight1_test1.scala") | 
|         |     82     then | 
|         |     83         echo "  --> success" | tee -a $out | 
|         |     84 	marks=$(( marks + 1 )) | 
|         |     85     else | 
|         |     86         echo "  --> test failed" | tee -a $out | 
|         |     87     fi | 
|         |     88 fi | 
|         |     89  | 
|         |     90 ### knight2 test | 
|         |     91  | 
|         |     92 if [ $tsts1 -eq 0 ] | 
|         |     93 then | 
|         |     94   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 | 
|         |     95   echo " legal_moves(8, Nil, (7,7)) == List((6,5), (5,6))" | tee -a $out | 
|         |     96   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 | 
|         |     97   echo " legal_moves(8, List((6,6)), (7,7)) == List((6,5), (5,6))" | tee -a $out | 
|         |     98   echo " legal_moves(1, Nil, (0,0)) == Nil" | tee -a $out | 
|         |     99   echo " legal_moves(2, Nil, (0,0)) == Nil" | tee -a $out | 
|         |    100   echo " legal_moves(3, Nil, (0,0)) == List((1,2), (2,1))" | tee -a $out | 
|         |    101    | 
|         |    102   if (scala_assert "knight1.scala" "knight1_test2.scala") | 
|         |    103   then | 
|         |    104      echo "  --> success" | tee -a $out | 
|         |    105      marks=$(( marks + 1 )) | 
|         |    106   else | 
|         |    107     echo "  --> test failed" | tee -a $out | 
|         |    108   fi | 
|         |    109 fi | 
|         |    110  | 
|         |    111  | 
|         |    112 ### knight3 test | 
|         |    113  | 
|         |    114 if [ $tsts1 -eq 0 ] | 
|         |    115 then | 
|         |    116   echo " all_tours from every position on the board" | tee -a $out | 
|         |    117   echo " dim = 1: 1" | tee -a $out | 
|         |    118   echo "       2: 0,0,0,0" >>  $out | 
|         |    119   echo "       3: 0,0,0,0,0,0,0,0,0" >>  $out | 
|         |    120   echo "       4: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" | tee -a $out | 
|         |    121   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 | 
|         |    122    | 
|         |    123   if (scala_assert "knight1.scala" "knight1_test3a.scala")  | 
|         |    124   then | 
|         |    125      echo "  --> success" | tee -a $out | 
|         |    126      marks=$(( marks + 1 )) | 
|         |    127   else | 
|         |    128     echo "  --> test failed" | tee -a $out | 
|         |    129   fi | 
|         |    130 fi | 
|         |    131  | 
|         |    132 if [ $tsts1 -eq 0 ] | 
|         |    133 then | 
|         |    134   echo " enum_tours(5, List((0,2)) ) => 56 tours? and all correct?" | tee -a $out | 
|         |    135    | 
|         |    136   if (scala_assert "knight1.scala" "knight1_test3b.scala")  | 
|         |    137   then | 
|         |    138      echo "  --> success" | tee -a $out | 
|         |    139      marks=$(( marks + 1 )) | 
|         |    140   else | 
|         |    141     echo "  --> test failed" | tee -a $out | 
|         |    142   fi | 
|         |    143 fi | 
|         |    144  | 
|         |    145  | 
|         |    146 ### knight2a test | 
|         |    147  | 
|         |    148 if [ $tsts1 -eq 0 ] | 
|         |    149 then | 
|         |    150   echo " val f = (x:(Int, Int)) => if (x._1 > 3) Some(List(x)) else None " | tee -a $out | 
|         |    151   echo "   first(List((1,0),(2,0),(3,0),(4,0)), f) == Some(List((4,0)))" | tee -a $out | 
|         |    152   echo "   first(List((1,0),(2,0),(3,0)), f) == None" | tee -a $out | 
|         |    153  | 
|         |    154   if (scala_assert "knight1.scala" "knight1_test4.scala")  | 
|         |    155   then | 
|         |    156     echo "  --> success" | tee -a $out | 
|         |    157     marks=$(( marks + 1 )) | 
|         |    158   else | 
|         |    159     echo "  --> test failed" | tee -a $out | 
|         |    160   fi | 
|         |    161 fi | 
|         |    162  | 
|         |    163  | 
|         |    164 ### knight2b test | 
|         |    165  | 
|         |    166 if [ $tsts1 -eq 0 ] | 
|         |    167 then | 
|         |    168   echo " is first_tour(8, List((0, 0))) ok? " | tee -a $out | 
|         |    169   echo " is first_tour(4, List((0, 0))) == None " | tee -a $out | 
|         |    170  | 
|         |    171   if (scala_assert "knight1.scala" "knight5_test.scala")  | 
|         |    172   then | 
|         |    173      echo "  --> success" | tee -a $out | 
|         |    174      marks=$(( marks + 2 )) | 
|         |    175   else | 
|         |    176     echo "  --> test failed" | tee -a $out | 
|         |    177   fi | 
|         |    178 fi | 
|         |    179  | 
|         |    180  | 
|         |    181 ## final marks | 
|         |    182 echo "Overall mark for Part 1" | tee -a $out | 
|         |    183 echo "$marks" | tee -a $out | 
|         |    184  | 
|         |    185  |