From 21e91f8f1a5d78efd781cb27db1e591b274a8596 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 9 Sep 2016 23:43:41 +0200 Subject: 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. --- tests/basic.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests') 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 -- cgit v1.2.3