marking3/knight1_test.sh
changeset 243 9bb36426c781
child 244 a359976a6f3e
equal deleted inserted replaced
242:e6b34f617915 243:9bb36426c781
       
     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