diff options
| author | Gene Pasquet <dev@etenil.net> | 2026-04-05 19:47:05 +0100 |
|---|---|---|
| committer | Gene Pasquet <dev@etenil.net> | 2026-04-05 19:47:05 +0100 |
| commit | 027053b11a3a5d861ed2fa2db245388bd95ac246 (patch) | |
| tree | 84dfd90642bb6d8eb4e0e3fa3a9d651ba29b41e8 /tests/ai-test.scm | |
| parent | 927f37639a3d5a0d881a5c8709f2cf577aadb15e (diff) | |
Progress
Diffstat (limited to 'tests/ai-test.scm')
| -rw-r--r-- | tests/ai-test.scm | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/ai-test.scm b/tests/ai-test.scm new file mode 100644 index 0000000..9bb3d28 --- /dev/null +++ b/tests/ai-test.scm @@ -0,0 +1,48 @@ +;; Mock entity module for testing +(module downstroke/entity * + (import scheme (chicken base) (chicken keyword)) + (define (entity-ref entity key #!optional default) + (get-keyword key entity (if (procedure? default) default (lambda () default)))) + (define (entity-set entity key val) + (cons key (cons val (let loop ((lst entity)) + (if (null? lst) '() + (if (eq? (car lst) key) + (cddr lst) + (cons (car lst) (cons (cadr lst) (loop (cddr lst)))))))))) + (define (entity-type e) (entity-ref e #:type #f))) + +;; Mock world module for testing +(module downstroke/world * + (import scheme (chicken base)) + (define (scene-entities s) s) + (define (scene-find-tagged scene tag) #f)) + +(import (srfi 64) + states + downstroke/entity + downstroke/world) + +(include "ai.scm") +(import downstroke/ai) + +(test-begin "ai") + +(test-group "find-player (tag-based)" + (let* ((player (list #:type 'player #:x 100 #:y 100 #:width 16 #:height 16 + #:tags '(player))) + (enemy (list #:type 'enemy #:x 200 #:y 100 #:width 16 #:height 16 + #:tags '(enemy))) + (entities (list enemy player))) + (test-equal "finds player by tags" player (find-player entities)) + (test-equal "returns #f with no player" #f (find-player (list enemy))))) + +(test-group "update-enemy-ai" + (let* ((entity (list #:type 'enemy #:x 0 #:y 0 #:width 16 #:height 16 + #:disabled #t))) + (test-equal "returns entity unchanged when disabled" entity + (update-enemy-ai entity '()))) + (let* ((entity (list #:type 'enemy #:x 0 #:y 0 #:width 16 #:height 16))) + (test-equal "returns entity unchanged when no ai-machine" entity + (update-enemy-ai entity '())))) + +(test-end "ai") |
