From 4f8719f813f11600ac97e97df3a3a9344f1aef7b Mon Sep 17 00:00:00 2001 From: joren Date: Mon, 23 Mar 2026 10:54:43 +0100 Subject: [PATCH] Refactor(Tests): Add proper (pp1 tests) unit tests for all logic ADTs Tests for Positie, Doolhof, Pac-Man, Score, and Tijdslimiet ADTs using check/check-eq?/run-test from (pp1 tests) library. Centralized test runner in alle-testen.rkt with prefix imports. Co-Authored-By: Claude Opus 4.6 --- pacman-project/tests/alle-testen.rkt | 25 ++++++++++ pacman-project/tests/test-doolhof.rkt | 59 +++++++++++++++++++++++ pacman-project/tests/test-pacman.rkt | 51 ++++++++++++++++++++ pacman-project/tests/test-positie.rkt | 57 ++++++++++++++++++++++ pacman-project/tests/test-score.rkt | 30 ++++++++++++ pacman-project/tests/test-tijdslimiet.rkt | 55 +++++++++++++++++++++ 6 files changed, 277 insertions(+) create mode 100644 pacman-project/tests/alle-testen.rkt create mode 100644 pacman-project/tests/test-doolhof.rkt create mode 100644 pacman-project/tests/test-pacman.rkt create mode 100644 pacman-project/tests/test-positie.rkt create mode 100644 pacman-project/tests/test-score.rkt create mode 100644 pacman-project/tests/test-tijdslimiet.rkt diff --git a/pacman-project/tests/alle-testen.rkt b/pacman-project/tests/alle-testen.rkt new file mode 100644 index 0000000..7e631ad --- /dev/null +++ b/pacman-project/tests/alle-testen.rkt @@ -0,0 +1,25 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Alle Testen ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Voert alle ADT-testen uit. Open dit bestand en evalueer om alle testen +;; tegelijkertijd te draaien. + +(import (scheme base) + (pp1 tests) + (prefix (pacman-project tests test-positie) positie:) + (prefix (pacman-project tests test-doolhof) doolhof:) + (prefix (pacman-project tests test-pacman) pacman:) + (prefix (pacman-project tests test-score) score:) + (prefix (pacman-project tests test-tijdslimiet) tijdslimiet:)) + +(define (test-alles) + (positie:test) + (doolhof:test) + (pacman:test) + (score:test) + (tijdslimiet:test)) + +(test-alles) diff --git a/pacman-project/tests/test-doolhof.rkt b/pacman-project/tests/test-doolhof.rkt new file mode 100644 index 0000000..5b9b671 --- /dev/null +++ b/pacman-project/tests/test-doolhof.rkt @@ -0,0 +1,59 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests: Doolhof ADT ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-library (pacman-project tests test-doolhof) + (import (scheme base) + (pp1 tests) + (pacman-project constanten) + (pacman-project adt-doolhof)) + (export test) + + (begin + + ;; Test dimensies + (define (test-dimensies) + (define d (maak-doolhof)) + (check-eq? (d 'rijen) 31 "Doolhof moet 31 rijen hebben") + (check-eq? (d 'kolommen) 28 "Doolhof moet 28 kolommen hebben")) + + ;; Test muur detectie (rij 0 is volledig muur) + (define (test-muur) + (define d (maak-doolhof)) + (check ((d 'muur?) 0 0) "Cel (0,0) moet een muur zijn") + (check ((d 'muur?) 0 14) "Cel (0,14) moet een muur zijn")) + + ;; Test muntje detectie + (define (test-muntje) + (define d (maak-doolhof)) + (check ((d 'muntje?) 1 1) "Cel (1,1) moet een muntje zijn") + (check (not ((d 'muntje?) 0 0)) "Cel (0,0) mag geen muntje zijn")) + + ;; Test deur detectie + (define (test-deur) + (define d (maak-doolhof)) + (check ((d 'deur?) 4 3) "Cel (4,3) moet een deur zijn") + (check (not ((d 'deur?) 1 1)) "Cel (1,1) mag geen deur zijn")) + + ;; Test cel-set! en verwijder-deur! + (define (test-mutatie) + (define d (maak-doolhof)) + ((d 'verwijder-deur!) 4 3) + (check ((d 'leeg?) 4 3) "Cel (4,3) moet leeg zijn na verwijder-deur!") + (check (not ((d 'deur?) 4 3)) "Cel (4,3) mag geen deur meer zijn")) + + ;; Test dat Pac-Man niet door muur kan (muur blokkeert) + (define (test-muur-blokkade) + (define d (maak-doolhof)) + ;; Pac-Man staat op (1,1) en wil naar links (1,0) -> dat is een muur + (check ((d 'muur?) 1 0) "Cel (1,0) is een muur, Pac-Man kan niet door")) + + (define (test) + (run-test test-dimensies "Doolhof: dimensies") + (run-test test-muur "Doolhof: muur detectie") + (run-test test-muntje "Doolhof: muntje detectie") + (run-test test-deur "Doolhof: deur detectie") + (run-test test-mutatie "Doolhof: cel mutatie") + (run-test test-muur-blokkade "Doolhof: muur blokkeert beweging")))) diff --git a/pacman-project/tests/test-pacman.rkt b/pacman-project/tests/test-pacman.rkt new file mode 100644 index 0000000..c097bda --- /dev/null +++ b/pacman-project/tests/test-pacman.rkt @@ -0,0 +1,51 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests: Pac-Man ADT ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-library (pacman-project tests test-pacman) + (import (scheme base) + (pp1 tests) + (pacman-project adt-positie) + (pacman-project adt-pacman)) + (export test) + + (begin + + ;; Test aanmaak en startpositie + (define (test-aanmaak) + (define pac (maak-pacman 5 2)) + (define pos (pac 'positie)) + (check-eq? (pos 'rij) 5 "Start rij moet 5 zijn") + (check-eq? (pos 'kolom) 2 "Start kolom moet 2 zijn")) + + ;; Test richting + (define (test-richting) + (define pac (maak-pacman 5 2)) + (check-eq? (pac 'richting) 'rechts "Startrichting moet rechts zijn") + ((pac 'richting!) 'links) + (check-eq? (pac 'richting) 'links "Richting moet links zijn na richting!")) + + ;; Test beweeg! + (define (test-beweeg) + (define pac (maak-pacman 5 2)) + ((pac 'beweeg!) 0 1) + (define pos (pac 'positie)) + (check-eq? (pos 'kolom) 3 "Kolom moet 3 zijn na 1 stap rechts") + (check-eq? (pos 'rij) 5 "Rij ongewijzigd na horizontale beweging")) + + ;; Test meerdere bewegingen + (define (test-meerdere-bewegingen) + (define pac (maak-pacman 5 5)) + ((pac 'beweeg!) -1 0) + ((pac 'beweeg!) 0 1) + (define pos (pac 'positie)) + (check-eq? (pos 'rij) 4 "Rij moet 4 zijn na omhoog") + (check-eq? (pos 'kolom) 6 "Kolom moet 6 zijn na rechts")) + + (define (test) + (run-test test-aanmaak "Pac-Man: aanmaak en startpositie") + (run-test test-richting "Pac-Man: richting") + (run-test test-beweeg "Pac-Man: beweeg!") + (run-test test-meerdere-bewegingen "Pac-Man: meerdere bewegingen")))) diff --git a/pacman-project/tests/test-positie.rkt b/pacman-project/tests/test-positie.rkt new file mode 100644 index 0000000..592c16f --- /dev/null +++ b/pacman-project/tests/test-positie.rkt @@ -0,0 +1,57 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests: Positie ADT ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-library (pacman-project tests test-positie) + (import (scheme base) + (pp1 tests) + (pacman-project adt-positie)) + (export test) + + (begin + + ;; Test aanmaak en getters + (define (test-aanmaak) + (define pos (maak-positie 5 10)) + (check-eq? (pos 'rij) 5 "Rij moet 5 zijn") + (check-eq? (pos 'kolom) 10 "Kolom moet 10 zijn")) + + ;; Test mutators + (define (test-mutators) + (define pos (maak-positie 0 0)) + ((pos 'rij!) 3) + ((pos 'kolom!) 7) + (check-eq? (pos 'rij) 3 "Rij moet 3 zijn na rij!") + (check-eq? (pos 'kolom) 7 "Kolom moet 7 zijn na kolom!")) + + ;; Test vergelijk? + (define (test-vergelijk) + (define p1 (maak-positie 5 10)) + (define p2 (maak-positie 5 10)) + (define p3 (maak-positie 5 11)) + (check ((p1 'vergelijk?) p2) "Gelijke posities moeten gelijk zijn") + (check (not ((p1 'vergelijk?) p3)) "Verschillende posities mogen niet gelijk zijn")) + + ;; Test beweeg + (define (test-beweeg) + (define pos (maak-positie 5 10)) + (define nieuwe-pos ((pos 'beweeg) -1 0)) + (check-eq? (nieuwe-pos 'rij) 4 "Rij moet 4 zijn na beweeg omhoog") + (check-eq? (nieuwe-pos 'kolom) 10 "Kolom ongewijzigd na beweeg omhoog") + ;; Originele positie mag niet gewijzigd zijn + (check-eq? (pos 'rij) 5 "Originele rij mag niet wijzigen")) + + ;; Test dat twee objecten niet eq? zijn + (define (test-identiteit) + (define p1 (maak-positie 1 1)) + (define p2 (maak-positie 1 1)) + (check (not (eq? p1 p2)) "Twee positie-objecten mogen niet eq? zijn")) + + (define (test) + (run-test test-aanmaak "Positie: aanmaak en getters") + (run-test test-mutators "Positie: mutators") + (run-test test-vergelijk "Positie: vergelijk?") + (run-test test-beweeg "Positie: beweeg") + (run-test test-identiteit "Positie: identiteit")))) diff --git a/pacman-project/tests/test-score.rkt b/pacman-project/tests/test-score.rkt new file mode 100644 index 0000000..4b01ce1 --- /dev/null +++ b/pacman-project/tests/test-score.rkt @@ -0,0 +1,30 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests: Score ADT ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-library (pacman-project tests test-score) + (import (scheme base) + (pp1 tests) + (pacman-project adt-score)) + (export test) + + (begin + + ;; Test startscore + (define (test-startscore) + (define s (maak-score)) + (check-eq? (s 'punten) 0 "Startscore moet 0 zijn")) + + ;; Test score verhoging + (define (test-verhoog) + (define s (maak-score)) + ((s 'verhoog!)) + (check-eq? (s 'punten) 10 "Score moet 10 zijn na 1 muntje") + ((s 'verhoog!)) + (check-eq? (s 'punten) 20 "Score moet 20 zijn na 2 muntjes")) + + (define (test) + (run-test test-startscore "Score: startscore") + (run-test test-verhoog "Score: verhoging")))) diff --git a/pacman-project/tests/test-tijdslimiet.rkt b/pacman-project/tests/test-tijdslimiet.rkt new file mode 100644 index 0000000..9ee9d42 --- /dev/null +++ b/pacman-project/tests/test-tijdslimiet.rkt @@ -0,0 +1,55 @@ +#lang r7rs + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests: Tijdslimiet ADT ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define-library (pacman-project tests test-tijdslimiet) + (import (scheme base) + (pp1 tests) + (pacman-project adt-tijdslimiet)) + (export test) + + (begin + + ;; Test starttijd + (define (test-starttijd) + (define t (maak-tijdslimiet)) + (check-eq? (t 'resterende-tijd) 60 "Starttijd moet 60 seconden zijn") + (check (not ((t 'tijd-op?))) "Tijd mag niet op zijn bij start")) + + ;; Test verlaag na 1 seconde + (define (test-verlaag) + (define t (maak-tijdslimiet)) + ((t 'verlaag!) 1000) + (check-eq? (t 'resterende-tijd) 59 "Tijd moet 59 zijn na 1 seconde")) + + ;; Test verhoog (muntje bonus) + (define (test-verhoog) + (define t (maak-tijdslimiet)) + ((t 'verlaag!) 1000) + ((t 'verhoog!)) + (check-eq? (t 'resterende-tijd) 60 "Tijd moet 60 zijn na verlaag + verhoog")) + + ;; Test formatteer-tijd + (define (test-formatteer) + (define t (maak-tijdslimiet)) + (check-eq? ((t 'formatteer-tijd)) "1:00" "60 seconden = 1:00") + ((t 'verlaag!) 1000) + (check-eq? ((t 'formatteer-tijd)) "0:59" "59 seconden = 0:59")) + + ;; Test tijd-op? + (define (test-tijd-op) + (define t (maak-tijdslimiet)) + ;; 60 keer verlagen met 1 seconde + (do ((i 0 (+ i 1))) + ((= i 60)) + ((t 'verlaag!) 1000)) + (check ((t 'tijd-op?)) "Tijd moet op zijn na 60 seconden")) + + (define (test) + (run-test test-starttijd "Tijdslimiet: starttijd") + (run-test test-verlaag "Tijdslimiet: verlaag") + (run-test test-verhoog "Tijdslimiet: verhoog") + (run-test test-formatteer "Tijdslimiet: formatteer-tijd") + (run-test test-tijd-op "Tijdslimiet: tijd-op?"))))