AtlatestRepositorysigil-later
sigil-later / tree / testtest-runner.sgl
1
(import (sigil test)2
(sigil time)3
(sigil async)4
(sigil later runner))6
;; ============================================================7
;; later-after! — one-time delayed tasks8
;; ============================================================10
(test-group "later-after!"11
(test "fires tasks at correct intervals"12
(let ((results '()))13
(with-async14
(later-after! 0.1 "fast"15
(lambda () (set! results (cons "fast" results))))16
(later-after! 0.3 "medium"17
(lambda () (set! results (cons "medium" results))))18
(later-after! 0.5 "slow"19
(lambda () (set! results (cons "slow" results))))20
;; Wait long enough for all to fire21
(go (sleep 0.8)))22
;; All three should have fired, in order (reversed because cons)23
(assert-equal 3 (length results))24
(assert-equal "slow" (car results))25
(assert-equal "medium" (cadr results))26
(assert-equal "fast" (caddr results))))28
(test "returns a handle"29
(let ((handle #f))30
(with-async31
(set! handle (later-after! 0.1 "test" (lambda () #t)))32
(go (sleep 0.2)))33
(assert-true (later-handle? handle))34
(assert-equal "test" (later-handle-name handle)))))36
;; ============================================================37
;; later-cancel!38
;; ============================================================40
(test-group "later-cancel!"41
(test "cancelled task does not fire"42
(let ((fired? #f))43
(with-async44
(let ((handle (later-after! 0.2 "cancel-me"45
(lambda () (set! fired? #t)))))46
(go (sleep 0.05)47
(later-cancel! handle)))48
(go (sleep 0.4)))49
(assert-false fired?)))51
(test "non-cancelled task still fires"52
(let ((fired? #f))53
(with-async54
(later-after! 0.1 "keep-me"55
(lambda () (set! fired? #t)))56
(go (sleep 0.3)))57
(assert-true fired?))))59
;; ============================================================60
;; later-at!61
;; ============================================================63
(test-group "later-at!"64
(test "fires at specified timestamp"65
(let ((fired? #f))66
(with-async67
(later-at! (+ (current-second) 0.1) "at-test"68
(lambda () (set! fired? #t)))69
(go (sleep 0.3)))70
(assert-true fired?))))