From 027053b11a3a5d861ed2fa2db245388bd95ac246 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Sun, 5 Apr 2026 19:47:05 +0100 Subject: Progress --- tests/animation-test.scm | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/animation-test.scm (limited to 'tests/animation-test.scm') diff --git a/tests/animation-test.scm b/tests/animation-test.scm new file mode 100644 index 0000000..fefb77f --- /dev/null +++ b/tests/animation-test.scm @@ -0,0 +1,36 @@ +(import srfi-64) +(include "entity.scm") +(include "world.scm") +(include "animation.scm") +(import downstroke/entity downstroke/world downstroke/animation) + +(test-begin "animation") + +(test-group "frame->tile-id" + (test-equal "first frame, frames (0)" 1 (frame->tile-id '(0) 0)) + (test-equal "wraps around" 1 (frame->tile-id '(0 1) 2)) + (test-equal "frame 1 of (27 28)" 29 (frame->tile-id '(27 28) 1))) + +(test-group "set-animation" + (let ((entity (list #:type 'player #:anim-name 'idle #:anim-frame 5 #:anim-tick 8))) + (test-equal "no-op if already active" entity (set-animation entity 'idle)) + (let ((switched (set-animation entity 'walk))) + (test-equal "switches anim-name" 'walk (entity-ref switched #:anim-name)) + (test-equal "resets frame" 0 (entity-ref switched #:anim-frame)) + (test-equal "resets tick" 0 (entity-ref switched #:anim-tick))))) + +(test-group "animate-entity" + (let* ((anims '((walk . (#:frames (0 1) #:duration 4)))) + (entity (list #:type 'player #:anim-name 'walk #:anim-frame 0 #:anim-tick 0)) + (stepped (animate-entity entity anims))) + (test-equal "increments tick" 1 (entity-ref stepped #:anim-tick)) + (test-equal "sets tile-id on first tick" 1 (entity-ref stepped #:tile-id))) + (let* ((anims '((walk . (#:frames (0 1) #:duration 2)))) + (entity (list #:type 'player #:anim-name 'walk #:anim-frame 0 #:anim-tick 1)) + (advanced (animate-entity entity anims))) + (test-equal "advances frame when tick reaches duration" 1 (entity-ref advanced #:anim-frame)) + (test-equal "resets tick on frame advance" 0 (entity-ref advanced #:anim-tick))) + (let* ((entity (list #:type 'player))) + (test-equal "unchanged entity without anim-name" entity (animate-entity entity '())))) + +(test-end "animation") -- cgit v1.2.3