summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/lib/jit_support.rb7
-rw-r--r--test/ruby/test_jit.rb23
2 files changed, 28 insertions, 2 deletions
diff --git a/test/lib/jit_support.rb b/test/lib/jit_support.rb
index b3fe3efbcb..2ee1329e31 100644
--- a/test/lib/jit_support.rb
+++ b/test/lib/jit_support.rb
@@ -28,8 +28,11 @@ module JITSupport
end
module_function
- def eval_with_jit(env = nil, script, verbose: 0, min_calls: 5, save_temps: false, timeout: JIT_TIMEOUT)
- args = ['--disable-gems', '--jit-wait', "--jit-verbose=#{verbose}", "--jit-min-calls=#{min_calls}"]
+ def eval_with_jit(env = nil, script, verbose: 0, min_calls: 5, save_temps: false, max_cache: 1000, timeout: JIT_TIMEOUT)
+ args = [
+ '--disable-gems', '--jit-wait', "--jit-verbose=#{verbose}",
+ "--jit-min-calls=#{min_calls}", "--jit-max-cache=#{max_cache}",
+ ]
args << '--jit-save-temps' if save_temps
args << '-e' << script
args.unshift(env) if env
diff --git a/test/ruby/test_jit.rb b/test/ruby/test_jit.rb
index 60768812ff..92a7bd56d8 100644
--- a/test/ruby/test_jit.rb
+++ b/test/ruby/test_jit.rb
@@ -529,6 +529,29 @@ class TestJIT < Test::Unit::TestCase
assert_match(/^Successful MJIT finish$/, err)
end
+ def test_unload_units
+ # MIN_CACHE_SIZE is 10
+ out, err = eval_with_jit("#{<<~"begin;"}\n#{<<~'end;'}", verbose: 1, min_calls: 1, max_cache: 10)
+ begin;
+ 10.times do |i|
+ eval(<<-EOS)
+ def mjit#{i}
+ print #{i}
+ end
+ mjit#{i}
+ EOS
+ end
+ end;
+ assert_equal('0123456789', out)
+ errs = err.lines
+ assert_match(/\A#{JIT_SUCCESS_PREFIX}: block in <main>@-e:/, errs[0])
+ 9.times do |i|
+ assert_match(/\A#{JIT_SUCCESS_PREFIX}: mjit#{i}@\(eval\):/, errs[i + 1])
+ end
+ assert_equal("Too many JIT code -- 1 units unloaded\n", errs[10])
+ assert_match(/\A#{JIT_SUCCESS_PREFIX}: mjit9@\(eval\):/, errs[11])
+ end
+
def test_local_stack_on_exception
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '3', success_count: 2)
begin;