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-dokumentation). 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 finns kompilerat för version 8 av java, testing.jar, och för version 7, testing_java_7.jar.

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

Det finns en testgenerator:

Exempel:

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

Labb 3

Det finns två testgeneratorer:

Notera att labbens hjälppaket, Lab3Help.jar, behöver vara i samma mapp som testing.jar för att det ska fungera.

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

Exempel:

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

java -ea -jar testing.jar lab3test.Lab3GenTest DijkstraStringPath

DijkstraStringPath är wrapper-klassen som man måste göra för att testprogrammet ska fungera. Detta finns beskrivet i labb-pm under rubriken ``Testning''.

Licensinformation

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