Moved ujit code invalidation test into bootstraptest
This commit is contained in:
parent
56ce40e8be
commit
d2d564be1d
30
bootstraptest/test_ujit.rb
Normal file
30
bootstraptest/test_ujit.rb
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# Method redefinition (code invalidation) test
|
||||||
|
assert_equal '1', %q{
|
||||||
|
def ret1
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
klass = Class.new do
|
||||||
|
def alias_then_hash(klass, method_to_redefine)
|
||||||
|
# Redefine the method to be ret1
|
||||||
|
klass.alias_method(method_to_redefine, :ret1)
|
||||||
|
hash
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
instance = klass.new
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
while i < 12
|
||||||
|
if i < 11
|
||||||
|
# Redefine the bar method
|
||||||
|
instance.alias_then_hash(klass, :bar)
|
||||||
|
else
|
||||||
|
# Redefine the hash method to be ret1
|
||||||
|
retval = instance.alias_then_hash(klass, :hash)
|
||||||
|
end
|
||||||
|
i += 1
|
||||||
|
end
|
||||||
|
|
||||||
|
retval
|
||||||
|
}
|
@ -1,27 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
require 'test/unit'
|
|
||||||
|
|
||||||
class TestMicroJIT < Test::Unit::TestCase
|
|
||||||
# MicroJIT's code invalidation mechanism can't invalidate
|
|
||||||
# code that is executing. Test that we don't try to do that.
|
|
||||||
def test_code_invalidation
|
|
||||||
klass = Class.new do
|
|
||||||
def alias_then_hash(klass, method_to_redefine)
|
|
||||||
klass.alias_method(method_to_redefine, :itself)
|
|
||||||
hash
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
instance = klass.new
|
|
||||||
i = 0
|
|
||||||
while i < 12
|
|
||||||
if i < 11
|
|
||||||
instance.alias_then_hash(klass, :bar)
|
|
||||||
else
|
|
||||||
ret = instance.alias_then_hash(klass, :hash)
|
|
||||||
assert(instance.equal?(ret))
|
|
||||||
end
|
|
||||||
i += 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
x
Reference in New Issue
Block a user