Invarianter och assertions

Många datastrukturer bygger på diverse antaganden. Ta en minheap, till exempel: trädet antas vara komplett, och varje nods prioritet antas vara mindre än eller lika med dess barns prioriteter (i båda fallen med undantag för de tillfällen då datastrukturen uppdateras). Den här sortens antaganden kallas invarianter.

För att göra det lättare att hitta fel så kan man testa invarianter och andra egenskaper m h a assertions (Java, Haskell). För att slå på testning av assertions kan man behöva använda vissa flaggor:

Testprogram

Ni kan använda ett testprogram för att underlätta testningen. Det är skrivet i Java, men går även att använda för Haskell.

Det är kanske smidigast om testprogrammet (och övriga filer som nämns nedan) placeras i samma katalog som era class-filer/binärer. I exemplen nedan antas det att de har placerats där.

Testprogrammet kan i vissa fall köra väldigt länge. Det räcker förhoppningsvis att gå igenom några tusen testfall.

Om testprogrammet verkar ha hängt sig så är det möjligt att ni har en oändlig loop i ert program. Ni kan då använda "java -ea -jar testing.jar -v5 ...".

Notera att testprogrammet antagligen inte fungerar för Java 6 och tidigare.

Labb 1

Det finns två testgeneratorer:

Exempel (där Lab1A är namnet på klassen som testas):

java -ea -jar testing.jar lab1test.Lab1GenTest Lab1A

java -ea -jar testing.jar lab1test.Lab1GenTest "Lab1A 50 5 80"

java -ea -jar testing.jar lab1test.Lab1FileTest "Lab1A numbers.txt"

Notera följande:

Labb 2

Börja med att ladda ned Lab2External.class.

Testprogrammet kör programmet ./Lab2 (som måste ligga i den katalog som ni kör testprogrammet ifrån). Om ni använder Java så kan ni använda ett litet script med namnet Lab2 (eller Lab2.bat), och starta programmet från scriptet.

Det finns en testgenerator:

Exempel:

java -ea -jar testing.jar lab2test.Lab2GenTest Lab2External

För parallell (möjligtvis snabbare) testning:

java -ea -jar testing.jar -t -1 lab2test.Lab2GenTest "Lab2External -p"

Labb 3

Börja med att ladda ned Lab3Help.jar.

Testprogrammet kör programmet ./Lab3 (som måste ligga i den katalog som ni kör testprogrammet ifrån). Om ni använder Java så kan ni använda ett litet script med namnet Lab3 (eller Lab3.bat), och starta programmet från scriptet.

Det finns två testgeneratorer:

Man bör testa alla exempelgrafer från labbeskrivningen, och dessutom automatiskt genererade grafer.

Exempel:

java -ea -jar testing.jar lab3test.Lab3FileTest "Lab3Help.External stops-bvs.txt lines-bvs.txt"

java -ea -jar testing.jar lab3test.Lab3GenTest Lab3Help.External

Scriptexempel

Linux/Mac

Lab2:

    #!/bin/sh
    java Lab2 "$@"

Glöm inte att göra scriptet exekverbart (chmod u+x Lab2).

Windows

Lab2.bat:

    @echo off
    java Lab2 %*

Licensinformation

Testprogrammet använder JSAP, som har en licens som är en variant av LGPL (gissningsvis version 2.1).