diff options
| author | Peter Zhu <peter@peterzhu.ca> | 2024-07-26 11:10:53 -0400 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2024-08-02 18:26:26 +0900 |
| commit | 7fc6448ec7f7505ca5772af0a60ee780c321492c (patch) | |
| tree | c921386da7cc206a36cfb6bcf24bcb5579024576 /test/ruby/test_integer.rb | |
| parent | 7048fbdf59509e4f52eff56d7c044ed28eb67727 (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.
Diffstat (limited to 'test/ruby/test_integer.rb')
| -rw-r--r-- | test/ruby/test_integer.rb | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb index 978d56ab3e..2115883810 100644 --- a/test/ruby/test_integer.rb +++ b/test/ruby/test_integer.rb @@ -474,6 +474,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.ceil(1)) assert_int_equal(10**400, (10**400).ceil(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 def test_truncate |
