aboutsummaryrefslogtreecommitdiffstats
path: root/test/ruby/test_fiber.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_fiber.rb')
-rw-r--r--test/ruby/test_fiber.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb
index cc0df749b0..4288cabe09 100644
--- a/test/ruby/test_fiber.rb
+++ b/test/ruby/test_fiber.rb
@@ -4,6 +4,7 @@ require 'continuation'
require_relative './envutil'
class TestFiber < Test::Unit::TestCase
+if false
def test_normal
f = Fiber.current
assert_equal(:ok2,
@@ -280,3 +281,44 @@ class TestFiber < Test::Unit::TestCase
end
end
+ def invoke_rec script, vm_stack_size, machine_stack_size, use_length = true
+ env = {}
+ env['RUBY_FIBER_VM_STACK_SIZE'] = vm_stack_size.to_s if vm_stack_size
+ env['RUBY_FIBER_MACHINE_STACK_SIZE'] = machine_stack_size.to_s if machine_stack_size
+ out, = EnvUtil.invoke_ruby([env, '-e', script], '', true, true)
+ use_length ? out.length : out
+ end
+
+ def test_stack_size
+ h_default = eval(invoke_rec('p RubyVM::DEFAULT_PARAMS', nil, nil, false))
+ h_0 = eval(invoke_rec('p RubyVM::DEFAULT_PARAMS', 0, 0, false))
+ h_large = eval(invoke_rec('p RubyVM::DEFAULT_PARAMS', 1024 * 1024 * 10, 1024 * 1024 * 10, false))
+
+ assert(h_default[:fiber_vm_stack_size] > h_0[:fiber_vm_stack_size])
+ assert(h_default[:fiber_vm_stack_size] < h_large[:fiber_vm_stack_size])
+ assert(h_default[:fiber_machine_stack_size] >= h_0[:fiber_machine_stack_size])
+ assert(h_default[:fiber_machine_stack_size] <= h_large[:fiber_machine_stack_size])
+
+ # check VM machine stack size
+ script = 'def rec; print "."; rec; end; Fiber.new{rec}.resume'
+ size_default = invoke_rec script, nil, nil
+ assert(size_default > 0, size_default.to_s)
+ size_0 = invoke_rec script, 0, nil
+ assert(size_default > size_0, [size_default, size_0].inspect)
+ size_large = invoke_rec script, 1024 * 1024 * 10, nil
+ assert(size_default < size_large, [size_default, size_large].inspect)
+
+ return if /mswin|mingw/ =~ RUBY_PLATFORM
+
+ # check machine stack size
+ # Note that machine stack size may not change size (depend on OSs)
+ script = 'def rec; print "."; 1.times{1.times{1.times{rec}}}; end; Fiber.new{rec}.resume'
+ vm_stack_size = 1024 * 1024
+ size_default = invoke_rec script, vm_stack_size, nil
+ size_0 = invoke_rec script, vm_stack_size, 0
+ assert(size_default >= size_0, [size_default, size_0].inspect)
+ size_large = invoke_rec script, vm_stack_size, 1024 * 1024 * 10
+ assert(size_default <= size_large, [size_default, size_large].inspect)
+ end
+end
+