diff options
author | Jeremy Evans <[email protected]> | 2021-12-01 13:00:11 -0800 |
---|---|---|
committer | Jeremy Evans <[email protected]> | 2021-12-01 16:21:50 -0800 |
commit | fe1725236c8a4d6cb780874c470f7f443185ed38 (patch) | |
tree | 8e44e56fb8523753835e94c559d480ce24c27369 /test/ruby/test_integer.rb | |
parent | e387458da9b16ddfb57ab9e80d307727aefc2f56 (diff) |
Don't call + and < in Integer.times for !FIXNUM
The methods aren't called for FIXNUM, and it's best to have
consistent behavior.
Fixes [Bug #18377]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5199
Diffstat (limited to 'test/ruby/test_integer.rb')
-rw-r--r-- | test/ruby/test_integer.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb index 9354514df0..a2b181c642 100644 --- a/test/ruby/test_integer.rb +++ b/test/ruby/test_integer.rb @@ -299,6 +299,31 @@ class TestInteger < Test::Unit::TestCase end end + def test_times_bignum_redefine_plus_lt + assert_separately([], "#{<<-"begin;"}\n#{<<~"end;"}") + begin; + called = false + Integer.class_eval do + alias old_plus + + undef + + define_method(:+){|x| called = true; 1} + alias old_lt < + undef < + define_method(:<){|x| called = true} + end + big = 2**65 + big.times{break 0} + Integer.class_eval do + undef + + alias + old_plus + undef < + alias < old_lt + end + bug18377 = "[ruby-core:106361]" + assert_equal(false, called, bug18377) + end; + end + def assert_int_equal(expected, result, mesg = nil) assert_kind_of(Integer, result, mesg) assert_equal(expected, result, mesg) |