test_rubyoptions.rb: don't test --jit if not supported

test/lib/jit_support.rb: carved out JITSupport
test/ruby/test_jit.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
k0kubun 2018-02-22 15:11:12 +00:00
Родитель 073c8cfee4
Коммит 666cafbeff
3 изменённых файлов: 46 добавлений и 43 удалений

33
test/lib/jit_support.rb Normal file
Просмотреть файл

@ -0,0 +1,33 @@
module JITSupport
JIT_TIMEOUT = 600 # 10min for each...
JIT_SUCCESS_PREFIX = 'JIT success \(\d+\.\dms\)'
SUPPORTED_COMPILERS = [
'gcc',
'clang',
]
module_function
def eval_with_jit(script, verbose: 0, min_calls: 5, timeout: JIT_TIMEOUT)
EnvUtil.invoke_ruby(
['--disable-gems', '--jit-wait', "--jit-verbose=#{verbose}", "--jit-min-calls=#{min_calls}", '-e', script],
'', true, true, timeout: timeout,
)
end
def supported?
# Experimental. If you want to ensure JIT is working with this test, please set this for now.
if ENV.key?('RUBY_FORCE_TEST_JIT')
return true
end
# Very pessimistic check. With this check, we can't ensure JIT is working.
begin
_, err = JITSupport.eval_with_jit('proc {}.call', verbose: 1, min_calls: 1, timeout: 10)
rescue Timeout::Error
$stderr.puts "TestJIT: #jit_supported? check timed out"
false
else
err.match?(JIT_SUCCESS_PREFIX)
end
end
end

Просмотреть файл

@ -1,48 +1,15 @@
# frozen_string_literal: true
require 'test/unit'
module TestJITSupport
JIT_TIMEOUT = 600 # 10min for each...
JIT_SUCCESS_PREFIX = 'JIT success \(\d+\.\dms\)'
SUPPORTED_COMPILERS = [
'gcc',
'clang',
]
module_function
def eval_with_jit(script, verbose: 0, min_calls: 5, timeout: JIT_TIMEOUT)
EnvUtil.invoke_ruby(
['--disable-gems', '--jit-wait', "--jit-verbose=#{verbose}", "--jit-min-calls=#{min_calls}", '-e', script],
'', true, true, timeout: timeout,
)
end
def supported?
# Experimental. If you want to ensure JIT is working with this test, please set this for now.
if ENV.key?('RUBY_FORCE_TEST_JIT')
return true
end
# Very pessimistic check. With this check, we can't ensure JIT is working.
begin
_, err = TestJITSupport.eval_with_jit('proc {}.call', verbose: 1, min_calls: 1, timeout: 10)
rescue Timeout::Error
$stderr.puts "TestJIT: #jit_supported? check timed out"
false
else
err.match?(JIT_SUCCESS_PREFIX)
end
end
end
require_relative '../lib/jit_support'
# Test for --jit option
class TestJIT < Test::Unit::TestCase
include TestJITSupport
include JITSupport
# Ensure all supported insns can be compiled. Only basic tests are included.
# TODO: ensure --dump=insns includes the expected insn
def setup
unless TestJITSupport.supported?
unless JITSupport.supported?
skip 'JIT seems not supported on this platform'
end
end

Просмотреть файл

@ -3,6 +3,7 @@ require 'test/unit'
require 'tmpdir'
require 'tempfile'
require_relative '../lib/jit_support'
class TestRubyOptions < Test::Unit::TestCase
def write_file(filename, content)
@ -171,14 +172,16 @@ class TestRubyOptions < Test::Unit::TestCase
end
assert_equal([], e)
end
assert_in_out_err(%w(--version --jit)) do |r, e|
assert_match(VERSION_PATTERN_WITH_JIT, r[0])
if RubyVM::MJIT.enabled?
assert_equal(RUBY_DESCRIPTION, r[0])
else
assert_equal(EnvUtil.invoke_ruby(['--jit', '-e', 'print RUBY_DESCRIPTION'], '', true).first, r[0])
if JITSupport.supported?
assert_in_out_err(%w(--version --jit)) do |r, e|
assert_match(VERSION_PATTERN_WITH_JIT, r[0])
if RubyVM::MJIT.enabled?
assert_equal(RUBY_DESCRIPTION, r[0])
else
assert_equal(EnvUtil.invoke_ruby(['--jit', '-e', 'print RUBY_DESCRIPTION'], '', true).first, r[0])
end
assert_equal([], e)
end
assert_equal([], e)
end
end