1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/ruby/test_rubyvm_mjit.rb
k0kubun 510cd06c78 mjit.c: add :wait option to RubyVM::MJIT.pause
and wait until JIT queue is flushed when wait option is not passed or
`wait: true` is passed.

vm.c: ditto

test/ruby/test_rubyvm_mjit.rb: added test for pause/resume

test/lib/jit_support.rb: allow retrying MJIT on JITSupport level
test/ruby/test_jit.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64250 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-08-09 09:58:07 +00:00

52 lines
1.5 KiB
Ruby

# frozen_string_literal: true
require 'test/unit'
require_relative '../lib/jit_support'
class TestRubyVMMJIT < Test::Unit::TestCase
include JITSupport
def test_pause
out, err = eval_with_jit(<<~'EOS', verbose: 1, min_calls: 1, wait: false)
i = 0
while i < 5
eval("def mjit#{i}; end; mjit#{i}")
i += 1
end
print RubyVM::MJIT.pause
print RubyVM::MJIT.pause
while i < 10
eval("def mjit#{i}; end; mjit#{i}")
i += 1
end
print RubyVM::MJIT.pause # no JIT here
EOS
assert_equal('truefalsefalse', out)
assert_equal(5, err.scan(/#{JITSupport::JIT_SUCCESS_PREFIX}/).size)
end
def test_pause_wait_false
out, err = eval_with_jit(<<~'EOS', verbose: 1, min_calls: 1, wait: false)
i = 0
while i < 10
eval("def mjit#{i}; end; mjit#{i}")
i += 1
end
print RubyVM::MJIT.pause(wait: false)
print RubyVM::MJIT.pause(wait: false)
EOS
assert_equal('truefalse', out)
assert_equal(true, err.scan(/#{JITSupport::JIT_SUCCESS_PREFIX}/).size < 10)
end
def test_resume
out, err = eval_with_jit(<<~'EOS', verbose: 1, min_calls: 1, wait: false)
print RubyVM::MJIT.resume
print RubyVM::MJIT.pause
print RubyVM::MJIT.resume
print RubyVM::MJIT.resume
print RubyVM::MJIT.pause
EOS
assert_equal('falsetruetruefalsetrue', out)
assert_equal(0, err.scan(/#{JITSupport::JIT_SUCCESS_PREFIX}/).size)
end
end