summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-09-09 23:43:41 +0200
committerAndy Wingo <wingo@pobox.com>2016-09-09 23:44:45 +0200
commit21e91f8f1a5d78efd781cb27db1e591b274a8596 (patch)
tree15997f91454de883c2cd7b647f24dfa04c3bec33 /tests
parentUse Ian Price's priority search queues (diff)
downloadguile-fibers-21e91f8f1a5d78efd781cb27db1e591b274a8596.tar.gz
Better fiber run order
* fibers/internal.scm (schedule-runnables-for-next-turn): Reverse runnables queue so that fibers are run in the next turn in the order that they were added in the previous turn. * tests/basic.scm (run-order): Add run order and sleep wakeup order tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/basic.scm22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/basic.scm b/tests/basic.scm
index 31d392e..44ff032 100644
--- a/tests/basic.scm
+++ b/tests/basic.scm
@@ -94,6 +94,28 @@
(assert-run-fibers-terminates (spawn-fiber-chain 500000))
(assert-run-fibers-terminates (spawn-fiber-chain 5000000))
+(let ((run-order 0))
+ (define (test-run-order count)
+ (for-each (lambda (n)
+ (spawn-fiber
+ (lambda ()
+ (unless (eqv? run-order n)
+ (error "bad run order" run-order n))
+ (set! run-order (1+ n)))))
+ (iota count)))
+ (assert-run-fibers-terminates (test-run-order 10)))
+
+(let ((run-order 0))
+ (define (test-wakeup-order count)
+ (for-each (lambda (n)
+ (spawn-fiber
+ (lambda ()
+ (unless (eqv? run-order n)
+ (error "bad run order" run-order n))
+ (set! run-order (1+ n)))))
+ (iota count)))
+ (assert-run-fibers-terminates (test-wakeup-order 10)))
+
;; sleep wakeup order
;; fib using channels