blob: 02a9806efe80a7fef86774fbebbcfc9aabdf5248 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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")
|