summaryrefslogtreecommitdiff
path: root/test/ruby/test_integer.rb
diff options
context:
space:
mode:
authorJeremy Evans <[email protected]>2021-12-01 13:00:11 -0800
committerJeremy Evans <[email protected]>2021-12-01 16:21:50 -0800
commitfe1725236c8a4d6cb780874c470f7f443185ed38 (patch)
tree8e44e56fb8523753835e94c559d480ce24c27369 /test/ruby/test_integer.rb
parente387458da9b16ddfb57ab9e80d307727aefc2f56 (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.rb25
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)