AtlatestRepositorysigil-later

sigil-later / tree / testtest-runner.sgl

1(import (sigil test)
2 (sigil time)
3 (sigil async)
4 (sigil later runner))
5
6;; ============================================================
7;; later-after! — one-time delayed tasks
8;; ============================================================
9
10(test-group "later-after!"
11 (test "fires tasks at correct intervals"
12 (let ((results '()))
13 (with-async
14 (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 fire
21 (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-async
31 (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-async
44 (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-async
54 (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-async
67 (later-at! (+ (current-second) 0.1) "at-test"
68 (lambda () (set! fired? #t)))
69 (go (sleep 0.3)))
70 (assert-true fired?))))