diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-02-24 09:39:17 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-02-24 09:39:17 +0000 |
commit | 7039d452827a25d1da4253d5318f451d27f34076 (patch) | |
tree | 294becc336406e7bc13844d9acde8dc8341bf36e | |
parent | eaa095dc383eb0020a60e115f11bea9a55bdf6f9 (diff) | |
download | ruby-7039d452827a25d1da4253d5318f451d27f34076.tar.gz |
Integer.sqrt argument check
* numeric.c (rb_int_s_isqrt): check if the argument is an integer.
[Feature #13219]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | numeric.c | 4 | ||||
-rw-r--r-- | test/ruby/test_integer.rb | 1 |
2 files changed, 3 insertions, 2 deletions
@@ -5158,6 +5158,7 @@ static VALUE rb_int_s_isqrt(VALUE self, VALUE num) { unsigned long n, sq; + num = rb_to_int(num); if (FIXNUM_P(num)) { if (FIXNUM_NEGATIVE_P(num)) { domain_error("isqrt"); @@ -5166,7 +5167,7 @@ rb_int_s_isqrt(VALUE self, VALUE num) sq = rb_ulong_isqrt(n); return LONG2FIX(sq); } - if (RB_TYPE_P(num, T_BIGNUM)) { + else { size_t biglen; if (RBIGNUM_NEGATIVE_P(num)) { domain_error("isqrt"); @@ -5183,7 +5184,6 @@ rb_int_s_isqrt(VALUE self, VALUE num) #endif return rb_big_isqrt(num); } - return Qnil; } /* diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb index 05b0b68ccc..e0927c9ffe 100644 --- a/test/ruby/test_integer.rb +++ b/test/ruby/test_integer.rb @@ -466,6 +466,7 @@ class TestInteger < Test::Unit::TestCase end def test_square_root + assert_raise(TypeError) {Integer.sqrt("x")} assert_raise(Math::DomainError) {Integer.sqrt(-1)} assert_equal(0, Integer.sqrt(0)) (1...4).each {|i| assert_equal(1, Integer.sqrt(i))} |