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