diff options
| author | Peter Zhu <peter@peterzhu.ca> | 2024-07-26 11:10:39 -0400 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2024-08-02 18:26:26 +0900 |
| commit | 7048fbdf59509e4f52eff56d7c044ed28eb67727 (patch) | |
| tree | d452f89f73b5cee9128b6d9a903b9b99cb14edcd /test | |
| parent | 0cc98ae353fd231bcd0e704c251198abc4406247 (diff) | |
Fix floor when ndigits is large
[Bug #20654]
This commit fixes Integer#floor and Float#floor 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.floor(-5) # => -100000
puts -1.floor(-10) # => -10000000000
puts -1.floor(-20) # => 0
This commit changes the last result so that it will return
-100000000000000000000.
Diffstat (limited to 'test')
| -rw-r--r-- | test/ruby/test_float.rb | 4 | ||||
| -rw-r--r-- | test/ruby/test_integer.rb | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/test/ruby/test_float.rb b/test/ruby/test_float.rb index fdc5d28ed7..888523346e 100644 --- a/test/ruby/test_float.rb +++ b/test/ruby/test_float.rb @@ -513,6 +513,10 @@ class TestFloat < Test::Unit::TestCase assert_raise(TypeError) {1.0.floor(nil)} def (prec = Object.new).to_int; 2; end assert_equal(0.99, 0.998.floor(prec)) + + assert_equal(-10000000000, -1.0.floor(-10), "[Bug #20654]") + assert_equal(-100000000000000000000, -1.0.floor(-20), "[Bug #20654]") + assert_equal(-100000000000000000000000000000000000000000000000000, -1.0.floor(-50), "[Bug #20654]") end def test_ceil_with_precision diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb index dd177090ab..978d56ab3e 100644 --- a/test/ruby/test_integer.rb +++ b/test/ruby/test_integer.rb @@ -442,6 +442,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.floor(1)) assert_int_equal(10**400, (10**400).floor(1)) + + assert_int_equal(-10000000000, -1.floor(-10), "[Bug #20654]") + assert_int_equal(-100000000000000000000, -1.floor(-20), "[Bug #20654]") + assert_int_equal(-100000000000000000000000000000000000000000000000000, -1.floor(-50), "[Bug #20654]") end def test_ceil |
