test/test_gyro.rb in polyphony-0.21 vs test/test_gyro.rb in polyphony-0.22
- old
+ new
@@ -1,10 +1,45 @@
# frozen_string_literal: true
require_relative 'helper'
-class RunTest < Minitest::Test
+class SchedulingTest < MiniTest::Test
+ def test_fiber_state
+ assert_equal :running, Fiber.current.state
+
+ f = Fiber.new {}
+
+ assert_equal :paused, f.state
+ f.resume
+ assert_equal :dead, f.state
+
+ f = Fiber.new { }
+ f.schedule
+ assert_equal :scheduled, f.state
+ snooze
+ assert_equal :dead, f.state
+ end
+
+ def test_schedule
+ values = []
+ fibers = 3.times.map { |i| Fiber.new { values << i } }
+ fibers[0].schedule
+
+ assert_equal [], values
+ snooze
+ assert_equal [0], values
+
+ fibers[1].schedule
+ fibers[2].schedule
+
+ assert_equal [0], values
+ snooze
+ assert_equal [0, 1, 2], values
+ end
+end
+
+class RunTest < MiniTest::Test
def test_that_run_loop_returns_immediately_if_no_watchers
t0 = Time.now
suspend
t1 = Time.now
assert((t1 - t0) < 0.01)
@@ -86,55 +121,52 @@
values << :bar
suspend
end.schedule
Fiber.new do
- Gyro.break
+ Gyro.break!
end.schedule
suspend
assert_equal [:foo], values
end
- def test_start
+ def test_reset
values = []
f1 = Fiber.new do
values << :foo
snooze
values << :bar
suspend
end.schedule
f2 = Fiber.new do
- Gyro.break
+ Gyro.reset!
values << :restarted
snooze
values << :baz
end.schedule
suspend
- Gyro.start
- f2.schedule
f1.schedule
suspend
-
- assert_equal %i[foo restarted bar baz], values
+ assert_equal %i[foo restarted baz], values
end
def test_restart
values = []
Fiber.new do
values << :foo
snooze
- # this part will not be reached, as f
+ # this part will not be reached, as Gyro state is reset
values << :bar
suspend
end.schedule
Fiber.new do
- Gyro.restart
+ Gyro.reset!
# control is transfer to the fiber that called Gyro.restart
values << :restarted
snooze
values << :baz