summaryrefslogtreecommitdiff
path: root/test/ruby/test_integer.rb
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2024-07-26 11:10:53 -0400
committerPeter Zhu <[email protected]>2024-07-30 08:21:28 -0400
commita7167d0ceecc8eea7bdf87e66be16d16b0f417e7 (patch)
tree8f4b9c2eca4750baa5ef7fe37139e07621235647 /test/ruby/test_integer.rb
parent3af2a7fbe12e11bac7b26bd991d3d02349f47295 (diff)
Fix ceil when ndigits is large
[Bug #20654] This commit fixes Integer#ceil and Float#ceil when the number is negative and ndigits is large such that 10**ndigits is a bignum. Previously, it would return 0 in such cases. However, this would cause unexpected behaviour such as: puts 1.ceil(-5) # => 100000 puts 1.ceil(-10) # => 10000000000 puts 1.ceil(-20) # => 0 This commit changes the last result so that it will return 100000000000000000000.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11257
Diffstat (limited to 'test/ruby/test_integer.rb')
-rw-r--r--test/ruby/test_integer.rb4
1 files changed, 4 insertions, 0 deletions
diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb
index 3dfd0e2d7b..0312a1a34c 100644
--- a/test/ruby/test_integer.rb
+++ b/test/ruby/test_integer.rb
@@ -525,6 +525,10 @@ class TestInteger < Test::Unit::TestCase
assert_int_equal(1111_1111_1111_1111_1111_1111_1111_1111, 1111_1111_1111_1111_1111_1111_1111_1111.truncate(1))
assert_int_equal(10**400, (10**400).truncate(1))
+
+ assert_int_equal(10000000000, 1.ceil(-10), "[Bug #20654]")
+ assert_int_equal(100000000000000000000, 1.ceil(-20), "[Bug #20654]")
+ assert_int_equal(100000000000000000000000000000000000000000000000000, 1.ceil(-50), "[Bug #20654]")
end
MimicInteger = Struct.new(:to_int)