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:
parent
073c8cfee4
commit
666cafbeff
3 changed files with 46 additions and 43 deletions
33
test/lib/jit_support.rb
Normal file
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
|
# 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
|
||||||
|
|
|
@ -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\)/)
|
||||||
|
|
Loading…
Reference in a new issue