| 
     1 #!/bin/bash  | 
         | 
     2   | 
         | 
     3 # to make the script fail safely  | 
         | 
     4 set -euo pipefail  | 
         | 
     5   | 
         | 
     6   | 
         | 
     7 out=${1:-output} | 
         | 
     8   | 
         | 
     9 echo "" > $out  | 
         | 
    10   | 
         | 
    11 echo "Below is the feedback and provisional marks for your submission" >> $out  | 
         | 
    12 echo "for core assignment 8.  Please note all marks are provisional until" >> $out  | 
         | 
    13 echo "ratified by the assessment board -- this is not an official" >> $out  | 
         | 
    14 echo "results transcript." >> $out  | 
         | 
    15 echo "" >> $out  | 
         | 
    16   | 
         | 
    17 # marks for core CW8  | 
         | 
    18 marks=$(( 0 ))  | 
         | 
    19   | 
         | 
    20 # compilation tests  | 
         | 
    21   | 
         | 
    22 function scala_compile { | 
         | 
    23     (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -nc "$1" 2> /dev/null 1> /dev/null)  | 
         | 
    24 }  | 
         | 
    25   | 
         | 
    26 # functional tests  | 
         | 
    27   | 
         | 
    28 function scala_assert { | 
         | 
    29     (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -nc -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null)  | 
         | 
    30 }  | 
         | 
    31   | 
         | 
    32 function scala_assert_long { | 
         | 
    33   (ulimit -t 60; JAVA_OPTS="-Xmx1g" scala -nc -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null)  | 
         | 
    34 }  | 
         | 
    35   | 
         | 
    36 #function scala_assert_elong { | 
         | 
    37 #  (ulimit -t 90; JAVA_OPTS="-Xmx1g" scala -nc -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null)  | 
         | 
    38 #}  | 
         | 
    39   | 
         | 
    40 # purity test  | 
         | 
    41   | 
         | 
    42 function scala_vars { | 
         | 
    43    (egrep '\bvar\b|\breturn\b|\.par|ListBuffer|mutable|new Array' "$1" 2> /dev/null 1> /dev/null)  | 
         | 
    44 }  | 
         | 
    45   | 
         | 
    46 # knights1: purity test  | 
         | 
    47   | 
         | 
    48 echo -e "knight1.scala does not contain vars, returns,  Arrays, ListBuffers etc?" | tee -a $out  | 
         | 
    49   | 
         | 
    50 if (scala_vars knight1.scala)  | 
         | 
    51 then  | 
         | 
    52   echo -e "  --> TEST FAILED\n" | tee -a $out  | 
         | 
    53   tsts0=$(( 1 ))  | 
         | 
    54 else  | 
         | 
    55   echo -e "  --> success" | tee -a $out  | 
         | 
    56   tsts0=$(( 0 ))   | 
         | 
    57 fi  | 
         | 
    58   | 
         | 
    59   | 
         | 
    60 # compilation test  | 
         | 
    61   | 
         | 
    62 if [ $tsts0 -eq 0 ]  | 
         | 
    63 then      | 
         | 
    64   echo -e "knight1.scala runs?" | tee -a $out  | 
         | 
    65   | 
         | 
    66   if (scala_compile knight1.scala)  | 
         | 
    67   then  | 
         | 
    68     echo -e "  --> success " | tee -a $out  | 
         | 
    69     tsts1=$(( 0 ))  | 
         | 
    70   else  | 
         | 
    71     echo -e "  --> SCALA DID NOT RUN knight1.scala\n" | tee -a $out  | 
         | 
    72     tsts1=$(( 1 ))   | 
         | 
    73   fi  | 
         | 
    74 else  | 
         | 
    75   tsts1=$(( 1 ))     | 
         | 
    76 fi  | 
         | 
    77   | 
         | 
    78   | 
         | 
    79 ### knight4 test  | 
         | 
    80   | 
         | 
    81 if [ $tsts1 -eq 0 ]  | 
         | 
    82 then  | 
         | 
    83   echo -e " Let f = (x:(Int, Int)) => if (x._1 > 3) Some(List(x)) else None " | tee -a $out  | 
         | 
    84   echo -e "   first(List((1,0),(2,0),(3,0),(4,0)), f) == Some(List((4,0)))" | tee -a $out  | 
         | 
    85   echo -e "   first(List((1,0),(2,0),(3,0)), f) == None" | tee -a $out    | 
         | 
    86     | 
         | 
    87   if (scala_assert "knight1.scala" "knight1_test4.scala")   | 
         | 
    88   then  | 
         | 
    89       echo -e "  --> success" | tee -a $out  | 
         | 
    90       marks=$(( marks + 1 ))  | 
         | 
    91   else  | 
         | 
    92       echo -e "  --> TEST FAILED\n" | tee -a $out  | 
         | 
    93   fi  | 
         | 
    94 fi  | 
         | 
    95   | 
         | 
    96 ### knight5 test  | 
         | 
    97   | 
         | 
    98 if [ $tsts1 -eq 0 ]  | 
         | 
    99 then  | 
         | 
   100   echo -e " is first_tour(6, List((0, 0))) ok? " | tee -a $out  | 
         | 
   101   echo -e " is first_tour(4, List((0, 0))) == None " | tee -a $out  | 
         | 
   102   START=$(date +%s)  | 
         | 
   103     | 
         | 
   104   if (scala_assert_long "knight1.scala" "knight1_test5.scala")   | 
         | 
   105   then  | 
         | 
   106       END=$(date +%s)  | 
         | 
   107       DIFF=$(( $END - $START ))  | 
         | 
   108       echo "  It took $DIFF seconds" | tee -a $out    | 
         | 
   109       echo -e "  --> success" | tee -a $out  | 
         | 
   110       marks=$(( marks + 1 ))  | 
         | 
   111   else  | 
         | 
   112       END=$(date +%s)  | 
         | 
   113       DIFF=$(( $END - $START ))  | 
         | 
   114       echo "  It took $DIFF seconds" | tee -a $out   | 
         | 
   115       echo -e "  --> TEST FAILED\n" | tee -a $out  | 
         | 
   116   fi  | 
         | 
   117 fi  | 
         | 
   118   | 
         | 
   119   | 
         | 
   120   | 
         | 
   121 # knights2: purity test  | 
         | 
   122 #  | 
         | 
   123 echo "knight2.scala does not contain vars, returns, Arrays, ListBuffers etc?" | tee -a $out  | 
         | 
   124   | 
         | 
   125   | 
         | 
   126 if (scala_vars knight2.scala)  | 
         | 
   127 then  | 
         | 
   128   echo -e "  --> TEST FAILED\n" | tee -a $out  | 
         | 
   129   tsts0=$(( 1 ))  | 
         | 
   130 else  | 
         | 
   131   echo -e "  --> success" | tee -a $out  | 
         | 
   132   tsts0=$(( 0 ))   | 
         | 
   133 fi  | 
         | 
   134   | 
         | 
   135   | 
         | 
   136 # compilation test  | 
         | 
   137 if  [ $tsts0 -eq 0 ]  | 
         | 
   138 then      | 
         | 
   139   echo "knight2.scala runs?" | tee -a $out  | 
         | 
   140   | 
         | 
   141   if (scala_compile knight2.scala)  | 
         | 
   142   then  | 
         | 
   143     echo -e "  --> success" | tee -a $out  | 
         | 
   144     tsts1=$(( 0 ))  | 
         | 
   145   else  | 
         | 
   146     echo -e "  --> SCALA DID NOT RUN knight2.scala\n" | tee -a $out  | 
         | 
   147     tsts1=$(( 1 ))   | 
         | 
   148   fi  | 
         | 
   149 else  | 
         | 
   150   tsts1=$(( 1 ))       | 
         | 
   151 fi  | 
         | 
   152   | 
         | 
   153 # ordered move test  | 
         | 
   154   | 
         | 
   155 if [ $tsts1 -eq 0 ]  | 
         | 
   156 then  | 
         | 
   157   echo -e " ordered_moves(8, List((3,4), (3,2)), (1,3)) == List((0,1), (0,5), (2,1), (2,5))" | tee -a $out  | 
         | 
   158   echo -e " ordered_moves(8, List((4,0)), (0,0)) == List((2,1), (1,2))" | tee -a $out  | 
         | 
   159   echo -e " ordered_moves(8, List((0,4)), (0,0)) == List((1,2), (2,1))" | tee -a $out  | 
         | 
   160     | 
         | 
   161   if (scala_assert "knight2.scala" "knight2_test6.scala")  | 
         | 
   162   then  | 
         | 
   163       echo -e "  --> success" | tee -a $out  | 
         | 
   164       marks=$(( marks + 1 ))  | 
         | 
   165   else  | 
         | 
   166       echo -e "  --> TEST FAILED\n" | tee -a $out  | 
         | 
   167   fi  | 
         | 
   168 fi  | 
         | 
   169   | 
         | 
   170   | 
         | 
   171 # first-closed-tour test  | 
         | 
   172   | 
         | 
   173 if [ $tsts1 -eq 0 ]  | 
         | 
   174 then  | 
         | 
   175   echo -e " first_closed_tour_heuristics(6, List((3,3))) found and correct?" | tee -a $out  | 
         | 
   176   START=$(date +%s)  | 
         | 
   177     | 
         | 
   178   if (scala_assert "knight2.scala" "knight2_test7.scala")  | 
         | 
   179   then  | 
         | 
   180       END=$(date +%s)  | 
         | 
   181       DIFF=$(( $END - $START ))  | 
         | 
   182       echo "  It took $DIFF seconds" | tee -a $out   | 
         | 
   183       echo -e "  --> success" | tee -a $out  | 
         | 
   184       marks=$(( marks + 1 ))  | 
         | 
   185   else  | 
         | 
   186       END=$(date +%s)  | 
         | 
   187       DIFF=$(( $END - $START ))  | 
         | 
   188       echo "  It took $DIFF seconds" | tee -a $out   | 
         | 
   189       echo -e "  --> TEST FAILED\n" | tee -a $out  | 
         | 
   190   fi  | 
         | 
   191 fi  | 
         | 
   192   | 
         | 
   193   | 
         | 
   194 # first-tour test  | 
         | 
   195   | 
         | 
   196 if [ $tsts1 -eq 0 ]  | 
         | 
   197 then  | 
         | 
   198   echo -e " first_tour_heuristics(8, List((0,0))) found and correct?" | tee -a $out  | 
         | 
   199   echo -e " first_tour_heuristics(30, List((0,0))) found and correct?" | tee -a $out  | 
         | 
   200   START=$(date +%s)  | 
         | 
   201     | 
         | 
   202   if (scala_assert_long "knight2.scala" "knight2_test8.scala")  | 
         | 
   203   then  | 
         | 
   204       END=$(date +%s)  | 
         | 
   205       DIFF=$(( $END - $START ))  | 
         | 
   206       echo "  It took $DIFF seconds" | tee -a $out  | 
         | 
   207       echo -e "  --> success" | tee -a $out  | 
         | 
   208       marks=$(( marks + 1 ))  | 
         | 
   209   else  | 
         | 
   210       END=$(date +%s)  | 
         | 
   211       DIFF=$(( $END - $START ))  | 
         | 
   212       echo "  It took $DIFF seconds" | tee -a $out  | 
         | 
   213       echo -e "  --> TEST FAILED\n" | tee -a $out  | 
         | 
   214   fi  | 
         | 
   215 fi  | 
         | 
   216   | 
         | 
   217   | 
         | 
   218   | 
         | 
   219 # knights3: purity test  | 
         | 
   220 #  | 
         | 
   221 echo -e "knight3.scala does not contain vars, returns, Arrays, ListBuffers etc?" | tee -a $out  | 
         | 
   222   | 
         | 
   223   | 
         | 
   224 if (scala_vars knight3.scala)  | 
         | 
   225 then  | 
         | 
   226   echo "  --> TEST FAILED\n" | tee -a $out  | 
         | 
   227   tsts0=$(( 1 ))  | 
         | 
   228 else  | 
         | 
   229   echo "  --> success" | tee -a $out  | 
         | 
   230   tsts0=$(( 0 ))   | 
         | 
   231 fi  | 
         | 
   232   | 
         | 
   233 # compilation test  | 
         | 
   234 if  [ $tsts0 -eq 0 ]  | 
         | 
   235 then      | 
         | 
   236   echo "knight3.scala runs?" | tee -a $out  | 
         | 
   237   | 
         | 
   238   if (scala_compile knight3.scala)  | 
         | 
   239   then  | 
         | 
   240     echo "  --> success" | tee -a $out  | 
         | 
   241     tsts1=$(( 0 ))  | 
         | 
   242   else  | 
         | 
   243     echo -e "  --> SCALA DID NOT RUN knight3.scala\n" | tee -a $out    | 
         | 
   244     tsts1=$(( 1 ))   | 
         | 
   245   fi  | 
         | 
   246 else  | 
         | 
   247   tsts1=$(( 1 ))       | 
         | 
   248 fi  | 
         | 
   249   | 
         | 
   250   | 
         | 
   251 if [ $tsts1 -eq 0 ]  | 
         | 
   252 then  | 
         | 
   253   echo -e " tour_on_mega_board(70, List((0,0))) found and correct?" | tee -a $out  | 
         | 
   254   START=$(date +%s)  | 
         | 
   255     | 
         | 
   256   if (scala_assert "knight3.scala" "knight3_test9.scala")  | 
         | 
   257   then  | 
         | 
   258       END=$(date +%s)  | 
         | 
   259       DIFF=$(( $END - $START ))  | 
         | 
   260       echo "  It took $DIFF seconds" | tee -a $out  | 
         | 
   261       echo -e "  --> success" | tee -a $out  | 
         | 
   262       marks=$(( marks + 1 ))  | 
         | 
   263   else  | 
         | 
   264       END=$(date +%s)  | 
         | 
   265       DIFF=$(( $END - $START ))  | 
         | 
   266       echo "  It took $DIFF seconds" | tee -a $out  | 
         | 
   267       echo -e "  --> test  failed" | tee -a $out   | 
         | 
   268   fi  | 
         | 
   269 fi  | 
         | 
   270   | 
         | 
   271   | 
         | 
   272 ## final marks  | 
         | 
   273 echo -e "" >> $out  | 
         | 
   274 echo -e "Overall mark for CW 8 Core Part" | tee -a $out  | 
         | 
   275 echo -e "$marks" | tee -a $out  |