test/test_gyro.rb in polyphony-0.28 vs test/test_gyro.rb in polyphony-0.29
- old
+ new
@@ -1,177 +1,25 @@
# frozen_string_literal: true
require_relative 'helper'
class GyroTest < MiniTest::Test
- def test_fiber_state
- assert_equal :running, Fiber.current.state
-
- f = Fiber.new {}
-
- assert_equal :waiting, f.state
- f.resume
- assert_equal :dead, f.state
-
- f = Fiber.new { }
- f.schedule
- assert_equal :runnable, 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
-
- def test_that_run_loop_returns_immediately_if_no_watchers
- t0 = Time.now
- suspend
- t1 = Time.now
- assert((t1 - t0) < 0.01)
- end
-
- def test_defer
- values = []
- defer { values << 1 }
- defer { values << 2 }
- defer { values << 3 }
- suspend
-
- assert_equal [1, 2, 3], values
- end
-
- def test_schedule
- values = []
- f = Fiber.new do
- values << :foo
- # We *have* to suspend the fiber in order to yield to the reactor,
- # otherwise control will transfer back to root fiber.
- suspend
- end
- assert_equal [], values
- f.schedule
- suspend
-
- assert_equal [:foo], values
- end
-
- def test_suspend
- values = []
- Fiber.new do
- values << :foo
- suspend
- end.schedule
- suspend
-
- assert_equal [:foo], values
- end
-
- def test_schedule_and_suspend
- values = []
- 3.times.map do |i|
- Fiber.new do
- values << i
- suspend
- end.schedule
- end
- suspend
-
- assert_equal [0, 1, 2], values
- end
-
- def test_snooze
- values = []
- 3.times.map do |i|
- Fiber.new do
- 3.times do
- snooze
- values << i
- end
- suspend
- end.schedule
- end
- suspend
-
- assert_equal [0, 1, 2, 0, 1, 2, 0, 1, 2], values
- end
-
def test_break
skip "break is still not implemented for new scheduler"
values = []
- Fiber.new do
+ Fiber.spin do
values << :foo
snooze
# here will never be reached
values << :bar
suspend
- end.schedule
+ end
- Fiber.new do
+ Fiber.spin do
Gyro.break!
- end.schedule
+ end
suspend
assert_equal [:foo], values
- end
-
- def test_reset
- values = []
- f1 = Fiber.new do
- values << :foo
- snooze
- values << :bar
- suspend
- end.schedule
-
- f2 = Fiber.new do
- Thread.current.reset_fiber_scheduling
- values << :restarted
- snooze
- values << :baz
- end.schedule
-
- suspend
-
- f1.schedule
- suspend
- 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 Gyro state is reset
- values << :bar
- suspend
- end.schedule
-
- Fiber.new do
- Thread.current.reset_fiber_scheduling
-
- # control is transfer to the fiber that called Gyro.restart
- values << :restarted
- snooze
- values << :baz
- end.schedule
-
- suspend
-
- assert_equal %i[foo restarted baz], values
end
end