summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorYusuke Endoh <[email protected]>2025-04-06 18:36:06 +0900
committerYusuke Endoh <[email protected]>2025-04-07 11:08:10 +0900
commit3a7b9ca93b91dcc086b9ac8b9957e59268f9493b (patch)
treeb129fb6d901cb8baa05031e67db38ae201883dd3 /test/ruby
parente25889951f39aff6e3c16ecee10e678912454e69 (diff)
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]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/13076
Diffstat (limited to 'test/ruby')
-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 1dbb3fbb45..fb7aabba35 100644
--- a/test/ruby/test_integer.rb
+++ b/test/ruby/test_integer.rb
@@ -708,6 +708,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))