diff options
| author | nagachika <nagachika@ruby-lang.org> | 2025-04-07 21:19:10 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2025-04-07 21:19:10 +0900 |
| commit | a67e9e41846cdadad9bb2d9e9d10223c52253898 (patch) | |
| tree | 15b5f7d6f42492ca5ea34fc2abc3ea353f696ef7 /test/ruby | |
| parent | 5640fea8aada2380145375a7f9eac2b979fe1258 (diff) | |
merge revision(s) 3a7b9ca93b91dcc086b9ac8b9957e59268f9493b: [Backport #21217]
Fix `Integer.sqrt` to never exceed actual value
`Integer.sqrt` uses `sqrt(3)` from libm for small values.
This method must return a value less than or equal to the actual integer
square root, but libm's sqrt does not always guarantee that.
This change corrects that by decrementing the result if necessary.
Fixes [Bug #21217]
Diffstat (limited to 'test/ruby')
| -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 dc68b4e7a4..1f820b28e9 100644 --- a/test/ruby/test_integer.rb +++ b/test/ruby/test_integer.rb @@ -709,6 +709,10 @@ class TestInteger < Test::Unit::TestCase assert_equal(x, Integer.sqrt(x ** 2), "[ruby-core:95453]") end + def test_bug_21217 + assert_equal(0x10000 * 2**10, Integer.sqrt(0x100000008 * 2**20)) + end + def test_fdiv assert_equal(1.0, 1.fdiv(1)) assert_equal(0.5, 1.fdiv(2)) |
