aboutsummaryrefslogtreecommitdiff
path: root/tests/ai-test.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ai-test.scm')
-rw-r--r--tests/ai-test.scm48
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")