Haskell
Im Beispiel-Repository befinden sich Beispielaufgaben.
Tests
Die Testauswertung findet mit einem eigenen kleinen Modul namens HaskellUnit
statt, welches sich
im Repository befindet. In den Testdateien muss zunächst das
HaskellUnit
-Modul importiert werden:
module Main where
import HaskellUnit
Im Modul HaskellUnit
ist eine Funktion mit folgender Signatur definiert:
testcase :: (Eq a, Show a) => String -> String -> a -> a -> IO Bool
Die Parameter bezeichnen der Reihe nach:
- den Namen des Tests
- eine Nachricht falls der Test fehlschlägt
- das erwartete Testergebnis
- das tatsächliche Testergebnis
Mit dieser Funktion lässt sich eine Liste konstanter Testfälle definieren, z.B.:
test1 = testcase "factorial 1" "(factorial 5) falsch" 120 (factorial 5)
Dann gibt es die Funktion:
runTests :: [IO Bool] -> IO ()
Damit wird ermöglicht in der Funktion main
die Liste der Testfälle auszuführen.
main = runTests [test1,test2,test3]
Organisation von öffentlichen und privaten Tests
In der meta.xml
können Tests so organisiert werden:
<files>
<file public="true" type="test" path="MyTest.hs"></file>
<file public="true" type="test" path="TestsPublic.lhs"></file>
<file public="false" type="test" path="TestsHidden.hs"></file>
</files>
Wenn man in MyTest.hs
die Tests aus TestsPublic.lhs
und TestsHidden.hs
importiert und in der
Funktion main
ausführt, kann man einen Teil der Tests öffentlich machen und einen Teil geheim
lassen.
Konventionen
- Erlaubte Dateiendungen für Haskell Quelldateien sind:
.hs
für direkte haskell Quelltextdateien.lhs
für invers kommentierte literate Haskell Stil
- Eine Quelldatei muss ein Haskell Modul enthalten.
- Es darf nur eine Testdatei geben.
- Die Testdatei muss als Modulnamen
Main
haben und eine Funktionmain
, die eine Liste von Testfällen ausführt. Man kann hier natürlich die Tests aus unterschiedlichen Modulen importieren, die dann wiederum öffentlich oder nicht öffentlich gemacht werden können.
Umgebungen
Es steht eine kleine Auswahl von Haskell-Bibliotheken in der Umgebung zur Verfügung. Diese sind derzeit:
- gtk3
- random
- lens
- parallel
- extra
- network
- HCodecs
- MissingH
- arithmoi
- connection
- OpenGLRaw
- OpenGL
- gloss