aboutsummaryrefslogtreecommitdiffstats
path: root/test/ruby/test_settracefunc.rb
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-21 09:51:01 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-08-21 09:51:01 +0000
commit8179e0ace5991e54a4ddcb698648c5b43885bd9d (patch)
treefbb8dec418361bb348a7f153e9309873b73afab7 /test/ruby/test_settracefunc.rb
parent1d62767ed0001209e50a3faab7f29cfbd5de0fbf (diff)
downloadruby-8179e0ace5991e54a4ddcb698648c5b43885bd9d.tar.gz
* include/ruby/ruby.h, cont.c, vm_trace.c: add a new event
fiber_switch. We need more discussion about this feature so that I don't write it on NEWS. [Feature #11348] * test/ruby/test_settracefunc.rb: add tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_settracefunc.rb')
-rw-r--r--test/ruby/test_settracefunc.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb
index 916705f7c8..8308f31f55 100644
--- a/test/ruby/test_settracefunc.rb
+++ b/test/ruby/test_settracefunc.rb
@@ -1349,4 +1349,55 @@ class TestSetTraceFunc < Test::Unit::TestCase
assert_equal([:call, :return], evs)
end
+
+ require 'fiber'
+ def test_fiber_switch
+ # test for resume/yield
+ evs = []
+ TracePoint.new(:fiber_switch){|tp|
+ next unless target_thread?
+ evs << tp.event
+ }.enable{
+ f = Fiber.new{
+ Fiber.yield
+ Fiber.yield
+ Fiber.yield
+ }
+ f.resume
+ f.resume
+ f.resume
+ f.resume
+ begin
+ f.resume
+ rescue FiberError
+ end
+ }
+ assert_equal 8, evs.size
+ evs.each{|ev|
+ assert_equal ev, :fiber_switch
+ }
+
+ # test for transfer
+ evs = []
+ TracePoint.new(:fiber_switch){|tp|
+ next unless target_thread?
+ evs << tp.event
+ }.enable{
+ f1 = f2 = nil
+ f1 = Fiber.new{
+ f2.transfer
+ f2.transfer
+ Fiber.yield :ok
+ }
+ f2 = Fiber.new{
+ f1.transfer
+ f1.transfer
+ }
+ assert_equal :ok, f1.resume
+ }
+ assert_equal 6, evs.size
+ evs.each{|ev|
+ assert_equal ev, :fiber_switch
+ }
+ end
end