aboutsummaryrefslogtreecommitdiffstats
path: root/test/ruby/test_integer.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-04-15 15:29:09 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-04-15 15:29:09 +0000
commitd117444cdaf2b07a8d723a03937955e345917902 (patch)
treec401b290b4b11c7abd30e45b33d35f8af41a0684 /test/ruby/test_integer.rb
parent6b75a0e118cad7bd26d870e12ea5b16d035c1d5e (diff)
downloadruby-d117444cdaf2b07a8d723a03937955e345917902.tar.gz
bignum.c: fix inexact estimation
* bignum.c (estimate_initial_sqrt): estimated square root is inexact if it is not equal to its ceil, needs Newton's method. [ruby-core:80696] [Bug #13440] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58366 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_integer.rb')
-rw-r--r--test/ruby/test_integer.rb12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb
index e0927c9ffe..963c6b75a4 100644
--- a/test/ruby/test_integer.rb
+++ b/test/ruby/test_integer.rb
@@ -488,5 +488,17 @@ class TestInteger < Test::Unit::TestCase
assert_equal(exact, Integer.sqrt(x+1), "10**#{i}+1")
assert_equal(exact-1, Integer.sqrt(x-1), "10**#{i}-1")
end
+
+ bug13440 = '[ruby-core:80696] [Bug #13440]'
+ too_big = []
+ too_small = []
+ 0.step(to: 50, by: 0.001) do |i|
+ n = (10**i).to_i
+ int_root = Integer.sqrt(n)
+ too_big << n if int_root*int_root > n
+ too_small << n if (int_root+1)*(int_root+1) <= n
+ end
+ assert_empty(too_big, bug13440)
+ assert_empty(too_small, bug13440)
end
end