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

* test/ruby/test_optimization.rb: restore method before calling assert_equal.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
aamine 2007-02-26 15:45:52 +00:00
parent 9987d53e51
commit c2d5527bff
2 changed files with 34 additions and 84 deletions

View file

@ -1,3 +1,8 @@
Tue Feb 27 00:45:23 2007 Minero Aoki <aamine@loveruby.net>
* test/ruby/test_optimization.rb: restore method before calling
assert_equal.
Mon Feb 26 00:58:39 2007 Koichi Sasada <ko1@atdot.net>
* yarvcore.h: add rb_thread_t#top_wrapper, top_self.

View file

@ -16,6 +16,30 @@ class TestRubyOptimization < Test::Unit::TestCase
FIXNUM_MIN = -1073741824 # -2 ** 30
end
def redefine_method(klass, method)
(@redefine_method_seq ||= 0)
seq = (@redefine_method_seq += 1)
eval(<<-End, ::TOPLEVEL_BINDING)
class #{klass}
alias redefine_method_orig_#{seq} #{method}
undef #{method}
def #{method}(*args)
args[0]
end
end
End
begin
return yield
ensure
eval(<<-End, ::TOPLEVEL_BINDING)
class #{klass}
undef #{method}
alias #{method} redefine_method_orig_#{seq}
end
End
end
end
def test_fixnum_plus
a, b = 1, 2
assert_equal 3, a + b
@ -23,23 +47,7 @@ class TestRubyOptimization < Test::Unit::TestCase
assert_instance_of Bignum, FIXNUM_MAX + 1
assert_equal 21, 10 + 11
eval(<<-End, ::TOPLEVEL_BINDING)
class Fixnum
alias orig_plus +
undef +
def +(other)
other
end
end
End
assert_equal 11, 10 + 11
ensure
eval(<<-End, ::TOPLEVEL_BINDING)
class Fixnum
undef +
alias + orig_plus
end
End
assert_equal 11, redefine_method('Fixnum', '+') { 10 + 11 }
assert_equal 21, 10 + 11
end
@ -49,23 +57,7 @@ class TestRubyOptimization < Test::Unit::TestCase
assert_instance_of Bignum, FIXNUM_MIN - 1
assert_equal 5, 8 - 3
eval(<<-End, ::TOPLEVEL_BINDING)
class Fixnum
alias orig_minus -
undef -
def -(other)
other
end
end
End
assert_equal 3, 8 - 3
ensure
eval(<<-End, ::TOPLEVEL_BINDING)
class Fixnum
undef -
alias - orig_minus
end
End
assert_equal 3, redefine_method('Fixnum', '-') { 8 - 3 }
assert_equal 5, 8 - 3
end
@ -83,44 +75,13 @@ class TestRubyOptimization < Test::Unit::TestCase
def test_float_plus
assert_equal 4.0, 2.0 + 2.0
eval(<<-End, ::TOPLEVEL_BINDING)
class Float
alias orig_plus +
undef +
def +(other)
other
end
end
End
assert_equal 2.0, 2.0 + 2.0
eval(<<-End, ::TOPLEVEL_BINDING)
class Float
undef +
alias + orig_plus
end
End
assert_equal 2.0, redefine_method('Float', '+') { 2.0 + 2.0 }
assert_equal 4.0, 2.0 + 2.0
end
def test_string_length
assert_equal 6, "string".length
eval(<<-End, ::TOPLEVEL_BINDING)
class String
alias orig_length length
undef length
def length
99
end
end
End
assert_equal 99, "string".length
ensure
eval(<<-End, ::TOPLEVEL_BINDING)
class String
undef length
alias length orig_length
end
End
assert_nil redefine_method('String', 'length') { "string".length }
assert_equal 6, "string".length
end
@ -129,23 +90,7 @@ class TestRubyOptimization < Test::Unit::TestCase
assert_equal "x", "x" + ""
assert_equal "x", "" + "x"
assert_equal "ab", "a" + "b"
eval(<<-End, ::TOPLEVEL_BINDING)
class String
alias orig_plus +
undef +
def +(other)
'OK'
end
end
End
assert_equal 'OK', "a" + "b"
ensure
eval(<<-End, ::TOPLEVEL_BINDING)
class String
undef +
alias + orig_plus
end
End
assert_equal 'b', redefine_method('String', '+') { "a" + "b" }
assert_equal "ab", "a" + "b"
end