Testning

Här finns några testprogram för att underlätta testningen. Dessa är skrivna i Java, men går att använda även för Haskell med hjälp av filerna nedan.

Tänk på att:

Filer

Ladda ned testing.jar. För Lab3 behövs också Lab3Help.jar. Det är kanske smidigast om de här filerna placeras i samma katalog som era class-filer (i exemplen nedan antas det att de har placerats där).


Exempel

För information om flaggor, kör java -jar testing.jar --help.

Lab1

Det finns två testgeneratorer.

Lab1GenTest söker efter nummer i en genererad mängd.

Lab1FileTest tar en fil med nummer och söker efter relaterade nummer.

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

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

java -jar testing.jar lab1test.Lab1GenTest "Lab1A --help"

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

java -jar testing.jar lab1test.Lab1FileTest "Lab1A --help"

Lab2

Det finns en testgenerator.

Lab2GenTest genererar listor med kommandon av ökande storlek.

Man bör köra minst 2 miljoner testfall.

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

För parallell testning:

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

Den parallella testningen kan gå snabbare. För att det ska fungera måste det finnas en method String pureMain(String[]) som tar en array med alla kommandon och returnerar en sträng med all utdata (istället för att skriva till System.out). Notera att om man använder System.out/System.err tillsammans med den parallella testningen så kan utskrifterna vara missvisande, eftersom utskrifter från olika körningar kan blandas ihop.

Haskell

Ladda ned Lab2External.java (eller den kompilerade Lab2External.class) och kör som ovan, men skriv Lab2External istället för lab2.Lab2 eller Lab2. Det andra exemplet blir alltså:

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

Lab2External kör programmet Lab2 som måste ligga i samma katalog som ni kör kommandot från. Det fungerar även med parallell testning, som rekommenderas.

Lab3

Det finns två testgeneratorer.

Lab3FileTest tar filer med stopp och linjer och testar från alla noder till alla noder i grafen.

Lab3GenTest testar med genererade grafer.

Man bör testa alla exempelgrafer från labbeskrivningen, samt några miljoner genererade grafer.

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

java -jar testing.jar lab3test.Lab3FileTest "MyPath --help"

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

java -jar testing.jar lab3test.Lab3GenTest "MyPath --help"

Haskell

Ladda ned Lab3External.java (eller den kompilerade Lab3External.class) och kör som ovan, men skriv Lab3External istället för MyPath. Lab3External.java kan kompileras med
javac -cp testing.jar Lab3External.java

Lab3External kör programmet Lab3 som måste ligga i samma katalog som ni kör kommandot från. Ert program Lab3 måste ta fyra argument (filnamn för fil som innehåller hållplatser, filnamn för fil som innehåller linjer, hållplats för resans start, hållplats för resans slut) och producera utdata på följande format:

28
Angered
Gamlestadstorget
Centralstationen
Brunnsparken
Grönsakstorget
Vasaplatsen
VasaViktoriagatan
Olivedalsgatan
Botaniska

Den första raden är restiden, följt av hållplatserna i ordning. Första hållplatsen är där resan börjar, den sista är målet för resan. Denna utskrift producerades av
./Lab3 stops-gbg.txt lines-gbg.txt Angered Botaniska


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 ("bedyranden"). För att slå på testning av assertions kan man, åtminstone vid användande av vissa Java-implementationer, använda flaggan -ea. Exempel: java -ea Program.