|         |      1 #!/bin/bash | 
|         |      2  | 
|         |      3 # to make the script fail safely | 
|         |      4 set -euo pipefail | 
|         |      5  | 
|         |      6  | 
|         |      7 out=${1:-output} | 
|         |      8  | 
|         |      9 echo -e "" > $out | 
|         |     10  | 
|         |     11 echo `date` | tee -a $out | 
|         |     12 echo "" >> $out | 
|         |     13 echo "Below is the feedback and provisional marks for your submission" >> $out | 
|         |     14 echo "for the Core Part 1 (Scala).  Please note all marks are provisional until" >> $out | 
|         |     15 echo "ratified by the assessment board -- this is not an official" >> $out | 
|         |     16 echo "results transcript." >> $out | 
|         |     17 echo "" >> $out | 
|         |     18  | 
|         |     19 echo "The feedback for your submission for collatz.scala" >> $out | 
|         |     20 echo "" >> $out | 
|         |     21  | 
|         |     22 # marks for core part 1 | 
|         |     23 marks=$(( 0 )) | 
|         |     24  | 
|         |     25 # compilation tests | 
|         |     26  | 
|         |     27 function scala_compile { | 
|         |     28   (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -Xprint:parser "$1" 2> c$out 1> c$out) | 
|         |     29 } | 
|         |     30  | 
|         |     31 # functional tests | 
|         |     32  | 
|         |     33 function scala_assert { | 
|         |     34   (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -nc -i "$1" -- "$2" -e "" 2> /dev/null 1> /dev/null) | 
|         |     35 } | 
|         |     36   | 
|         |     37 # purity test | 
|         |     38 function scala_vars { | 
|         |     39    (sed 's/immutable/ok/g' c$out > cb$out; | 
|         |     40     egrep '\bvar\b|\breturn\b|\.par\.|\.par |ListBuffer|AtomicInteger|mutable|util.control|new Array' cb$out 2> /dev/null 1> /dev/null) | 
|         |     41 } | 
|         |     42  | 
|         |     43  | 
|         |     44 ### compilation test | 
|         |     45  | 
|         |     46 echo -e "collatz.scala runs?" >> $out | 
|         |     47  | 
|         |     48 if (scala_compile collatz.scala) | 
|         |     49 then | 
|         |     50     echo -e "  --> success" >> $out | 
|         |     51     tsts0=$(( 0 )) | 
|         |     52 else | 
|         |     53     echo -e "  --> SCALA DID NOT RUN collatz.scala\n" >> $out | 
|         |     54     tsts0=$(( 1 ))  | 
|         |     55 fi | 
|         |     56  | 
|         |     57 # var, .par return, ListBuffer test | 
|         |     58 # | 
|         |     59  | 
|         |     60 if  [ $tsts0 -eq 0 ] | 
|         |     61 then | 
|         |     62    echo -e "collatz.scala does not contain VARS, RETURNS etc?" >> $out | 
|         |     63      | 
|         |     64    if (scala_vars collatz.scala) | 
|         |     65    then | 
|         |     66       echo -e "  --> test failed\n" >> $out | 
|         |     67       tsts=$(( 1 )) | 
|         |     68    else | 
|         |     69       echo -e "  --> success" >> $out | 
|         |     70       tsts=$(( 0 ))  | 
|         |     71    fi | 
|         |     72 else | 
|         |     73    tsts=$(( 1 ))   | 
|         |     74 fi     | 
|         |     75  | 
|         |     76  | 
|         |     77 echo >> $out | 
|         |     78  | 
|         |     79 ### collatz tests | 
|         |     80  | 
|         |     81 if [ $tsts -eq 0 ] | 
|         |     82 then | 
|         |     83   echo "collatz.scala tests:"  | tee -a $out | 
|         |     84   echo "  collatz(1) == 0"     | tee -a $out | 
|         |     85   echo "  collatz(6) == 8"     | tee -a $out | 
|         |     86   echo "  collatz(9) == 19"    | tee -a $out | 
|         |     87   echo "  collatz(9000) == 47" | tee -a $out | 
|         |     88  | 
|         |     89   if (scala_assert "collatz.scala" "collatz_test1.scala") | 
|         |     90   then | 
|         |     91       echo "  --> success" | tee -a $out | 
|         |     92       marks=$(( marks + 1 )) | 
|         |     93   else | 
|         |     94     echo "  --> one of the tests failed" | tee -a $out | 
|         |     95   fi | 
|         |     96 fi | 
|         |     97  | 
|         |     98 ### collatz-max tests | 
|         |     99  | 
|         |    100 if [ $tsts -eq 0 ] | 
|         |    101 then | 
|         |    102   echo "  collatz_max(10) == (19, 9)" | tee -a $out | 
|         |    103   echo "  collatz_max(100) == (118, 97)" | tee -a $out | 
|         |    104   echo "  collatz_max(1000) == (178, 871)" | tee -a $out | 
|         |    105   echo "  collatz_max(10000) == (261, 6171)" | tee -a $out | 
|         |    106   echo "  collatz_max(100000) == (350, 77031)" | tee -a $out | 
|         |    107   echo "  collatz_max(1000000) == (524, 837799)" | tee -a $out | 
|         |    108   #  echo "  collatz_max(2) == (1, 2) || collatz_max(2) == (0, 1)" | tee -a $out | 
|         |    109   echo "  collatz_max(2) == (1, 2)" | tee -a $out | 
|         |    110   echo "  collatz_max(77000) == (339, 52527)" | tee -a $out | 
|         |    111  | 
|         |    112   if (scala_assert "collatz.scala" "collatz_test2.scala")  | 
|         |    113   then | 
|         |    114       echo "  --> success" | tee -a $out | 
|         |    115       marks=$(( marks + 1 )) | 
|         |    116   else | 
|         |    117     echo "  --> one of the tests failed" | tee -a $out | 
|         |    118   fi | 
|         |    119 fi | 
|         |    120  | 
|         |    121 ### last-odd tests | 
|         |    122  | 
|         |    123 if [ $tsts -eq 0 ] | 
|         |    124 then | 
|         |    125   echo "  last_odd(113) == 85" | tee -a $out | 
|         |    126   echo "  last_odd(84) == 21" | tee -a $out | 
|         |    127   echo "  last_odd(605) == 341" | tee -a $out | 
|         |    128  | 
|         |    129   if (scala_assert "collatz.scala" "collatz_test3.scala")  | 
|         |    130   then | 
|         |    131       echo "  --> success" | tee -a $out | 
|         |    132       marks=$(( marks + 1 )) | 
|         |    133   else | 
|         |    134     echo "  --> one of the tests failed" | tee -a $out | 
|         |    135   fi | 
|         |    136 fi | 
|         |    137  | 
|         |    138  | 
|         |    139  | 
|         |    140 ## final marks | 
|         |    141 echo >> $out | 
|         |    142 echo "Overall mark for the Core Part 1 (Scala)" | tee -a $out | 
|         |    143 echo " $marks" | tee -a $out | 
|         |    144  | 
|         |    145  |