Binary file cws/cw01.pdf has changed
--- a/cws/cw01.tex Sat Nov 04 16:17:19 2017 +0000
+++ b/cws/cw01.tex Sun Nov 05 12:02:09 2017 +0000
@@ -7,7 +7,7 @@
\section*{Coursework 6 (Scala)}
This coursework is about Scala and is worth 10\%. The first and second
-part are due on 16 November at 11pm, and the third part on ??? November
+part are due on 16 November at 11pm, and the third part on 21 December
at 11pm. You are asked to implement three programs about list
processing and recursion. The third part is more advanced and might
include material you have not yet seen in the first lecture.
Binary file handouts/pep-ho.pdf has changed
--- a/handouts/pep-ho.tex Sat Nov 04 16:17:19 2017 +0000
+++ b/handouts/pep-ho.tex Sun Nov 05 12:02:09 2017 +0000
@@ -8,7 +8,7 @@
\begin{document}
-\section*{A Crash-Course on Scala}
+\section*{A Crash-Course in Scala}
\subsection*{The Very Basics}
@@ -40,7 +40,7 @@
\noindent indicating that the result of the addition is of type
\code{Int} and the actual result is 5; \code{res0} is a name that
-Scala gives automatically to the result. Yoy can reuse this name later
+Scala gives automatically to the result. You can reuse this name later
on. Another classic example you can try out is
\begin{lstlisting}[numbers=none]
--- a/marking/mark02b Sat Nov 04 16:17:19 2017 +0000
+++ b/marking/mark02b Sun Nov 05 12:02:09 2017 +0000
@@ -1,4 +1,4 @@
-#!/bin/bash
+=-p#!/bin/bash
set -e
out=${1:-output}
@@ -33,7 +33,7 @@
# marks for CW2b
marks=$(( 0 ))
-
+lm
# knights3: var, comments test
#
echo "knight3.scala does not contain vars, returns etc?" | tee -a $out
--- a/marking/mark03a Sat Nov 04 16:17:19 2017 +0000
+++ b/marking/mark03a Sun Nov 05 12:02:09 2017 +0000
@@ -19,14 +19,14 @@
# compilation tests
function scala_compile {
- (scala "$1" 2> /dev/null 1> /dev/null)
+ (ulimit -t 1 ; scala "$1" 1> $out 2> $out)
}
# functional tests
function scala_assert {
- (scala -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null)
+ (ulimit - t 1; scala -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null)
}
--- a/progs/lecture1.scala Sat Nov 04 16:17:19 2017 +0000
+++ b/progs/lecture1.scala Sun Nov 05 12:02:09 2017 +0000
@@ -13,6 +13,28 @@
// (you cannot reassign values: z = 9 will give an error)
+
+// Hello World
+//=============
+
+// an example of a stand-alone scala file;
+// in the coursework students must submit
+// plain scala "work-sheets"
+
+object Hello extends App {
+ println("hello world")
+}
+
+// can be called with
+//
+// $> scalac hello-world.scala
+// $> scala Hello
+//
+// $> java -cp /usr/local/src/scala/lib/scala-library.jar:. Hello
+
+
+
+
// Collections
//=============
List(1,2,3,1)
@@ -126,24 +148,6 @@
val t = (4,1,2,3)
t._4
-// Hello World
-//=============
-
-// an example of a stand-alone scala file;
-// in the coursework students must submit
-// plain scala "work-sheets"
-
-object Hello extends App {
- println("hello world")
-}
-
-// can be called with
-//
-// $> scalac hello-world.scala
-// $> scala Hello
-//
-// $> java -cp /usr/local/src/scala/lib/scala-library.jar:. Hello
-
// Function Definitions
//======================
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testing/collatz_test Sun Nov 05 12:02:09 2017 +0000
@@ -0,0 +1,101 @@
+#!/bin/bash
+
+# to make the script fail safely
+set -euo pipefail
+
+
+out=${1:-output}
+
+echo "" > $out
+
+echo "Below is the feedback for your submission" >> $out
+echo "" >> $out
+
+
+# compilation tests
+
+function scala_compile {
+ (ulimit -t 30 -m 1024000 ; scala "$1" 2> $out 1> $out)
+}
+
+# functional tests
+
+function scala_assert {
+ (ulimit -t 30 -m 1024000 ; scala -i "$1" "$2" -e "" 2> /dev/null 1> /dev/null)
+}
+
+# purity test
+
+function scala_vars {
+ (egrep '\bvar\b|\breturn\b|\.par|ListBuffer|mutable' "$1" 2> /dev/null 1> /dev/null)
+}
+
+
+# var, .par return, ListBuffer test
+#
+echo "collatz.scala does not contain vars, returns etc?" >> $out
+
+if (scala_vars collatz.scala)
+then
+ echo " --> fail" >> $out
+ tsts0=$(( 1 ))
+else
+ echo " --> yes" >> $out
+ tsts0=$(( 0 ))
+fi
+
+### compilation test
+
+
+if [ $tsts0 -eq 0 ]
+then
+ echo "collatz.scala runs?" >> $out
+
+ if (scala_compile collatz.scala)
+ then
+ echo " --> success" >> $out
+ tsts=$(( 0 ))
+ else
+ echo " --> scala did not run collatz.scala" >> $out
+ tsts=$(( 1 ))
+ fi
+else
+ tsts=$(( 1 ))
+fi
+
+### collatz tests
+
+if [ $tsts -eq 0 ]
+then
+ echo " collatz(1) == 0,1 or 4" >> $out
+ echo " collatz(6) == 9" >> $out
+ echo " collatz(9) == 20" >> $out
+
+ if (scala_assert "collatz.scala" "collatz_test1.scala")
+ then
+ echo " --> success" >> $out
+ else
+ echo " --> one of the tests failed" >> $out
+ fi
+fi
+
+### collatz-max tests
+
+if [ $tsts -eq 0 ]
+then
+ echo " collatz_max(10) == (9, 20)" >> $out
+ echo " collatz_max(100) == (97, 119)" >> $out
+ echo " collatz_max(1000) == (871, 179)" >> $out
+ echo " collatz_max(10000) == (6171, 262)" >> $out
+ echo " collatz_max(100000) == (77031, 351)" >> $out
+ echo " collatz_max(1000000) == (837799, 525)" >> $out
+
+ if (scala_assert "collatz.scala" "collatz_test2.scala")
+ then
+ echo " --> success" >> $out
+ else
+ echo " --> one of the tests failed" >> $out
+ fi
+fi
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testing/collatz_test1.scala Sun Nov 05 12:02:09 2017 +0000
@@ -0,0 +1,8 @@
+
+assert(List(0,1,4).contains(collatz(1)))
+
+assert(collatz(6) == 9)
+
+assert(collatz(9) == 20)
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testing/collatz_test2.scala Sun Nov 05 12:02:09 2017 +0000
@@ -0,0 +1,13 @@
+
+
+assert(collatz_max(10) == (9, 20))
+
+assert(collatz_max(100) == (97, 119))
+
+assert(collatz_max(1000) == (871, 179))
+
+assert(collatz_max(10000) == (6171, 262))
+
+assert(collatz_max(100000) == (77031, 351))
+
+assert(collatz_max(1000000) == (837799, 525))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testing/mark Sun Nov 05 12:02:09 2017 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+###set -e
+
+trap "exit" INT
+
+./collatz_test output1
+
+