1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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
parent 073c8cfee4
commit 666cafbeff
3 changed files with 46 additions and 43 deletions

33
test/lib/jit_support.rb Normal file
View 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

View file

@ -1,48 +1,15 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test/unit' require 'test/unit'
require_relative '../lib/jit_support'
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
# Test for --jit option # Test for --jit option
class TestJIT < Test::Unit::TestCase class TestJIT < Test::Unit::TestCase
include TestJITSupport include JITSupport
# Ensure all supported insns can be compiled. Only basic tests are included. # Ensure all supported insns can be compiled. Only basic tests are included.
# TODO: ensure --dump=insns includes the expected insn # TODO: ensure --dump=insns includes the expected insn
def setup def setup
unless TestJITSupport.supported? unless JITSupport.supported?
skip 'JIT seems not supported on this platform' skip 'JIT seems not supported on this platform'
end end
end end

View file

@ -3,6 +3,7 @@ require 'test/unit'
require 'tmpdir' require 'tmpdir'
require 'tempfile' require 'tempfile'
require_relative '../lib/jit_support'
class TestRubyOptions < Test::Unit::TestCase class TestRubyOptions < Test::Unit::TestCase
def write_file(filename, content) def write_file(filename, content)
@ -171,6 +172,7 @@ class TestRubyOptions < Test::Unit::TestCase
end end
assert_equal([], e) assert_equal([], e)
end end
if JITSupport.supported?
assert_in_out_err(%w(--version --jit)) do |r, e| assert_in_out_err(%w(--version --jit)) do |r, e|
assert_match(VERSION_PATTERN_WITH_JIT, r[0]) assert_match(VERSION_PATTERN_WITH_JIT, r[0])
if RubyVM::MJIT.enabled? if RubyVM::MJIT.enabled?
@ -181,6 +183,7 @@ class TestRubyOptions < Test::Unit::TestCase
assert_equal([], e) assert_equal([], e)
end end
end end
end
def test_eval def test_eval
assert_in_out_err(%w(-e), "", [], /no code specified for -e \(RuntimeError\)/) assert_in_out_err(%w(-e), "", [], /no code specified for -e \(RuntimeError\)/)