From c68596aef1c03678b196c3ee1269df09710dbdbf Mon Sep 17 00:00:00 2001 From: knu Date: Mon, 2 Sep 2013 22:54:58 +0000 Subject: [PATCH] Retain behavior of Numeric#step when nil is given as second argument. * numeric.c (NUM_STEP_SCAN_ARGS): On sencond thought, keep Numeral#step backward compatible in that it raises TypeError when nil is given as second argument. * test/ruby/test_float.rb (TestFloat#test_num2dbl): Revert. * test/ruby/test_numeric.rb (TestNumeric#test_step): Fix test cases for the above change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42788 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 11 +++++++++++ numeric.c | 3 +++ test/ruby/test_float.rb | 3 +++ test/ruby/test_numeric.rb | 4 ++-- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 963d36aa45..96426b47fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Tue Sep 3 07:49:25 2013 Akinori MUSHA + + * numeric.c (NUM_STEP_SCAN_ARGS): On sencond thought, keep + Numeral#step backward compatible in that it raises TypeError + when nil is given as second argument. + + * test/ruby/test_float.rb (TestFloat#test_num2dbl): Revert. + + * test/ruby/test_numeric.rb (TestNumeric#test_step): Fix test + cases for the above change. + Tue Sep 3 07:39:58 2013 Tanaka Akira * bignum.c (bytes_2comp): Define it only for little endian diff --git a/numeric.c b/numeric.c index 57b61759c1..780186eb58 100644 --- a/numeric.c +++ b/numeric.c @@ -1854,6 +1854,9 @@ ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl) } \ else { \ /* compatibility */ \ + if (argc > 1 && NIL_P(step)) { \ + rb_raise(rb_eTypeError, "step must be numeric"); \ + } \ if (rb_equal(step, INT2FIX(0))) { \ rb_raise(rb_eArgError, "step can't be 0"); \ } \ diff --git a/test/ruby/test_float.rb b/test/ruby/test_float.rb index c55b051832..f011c2b062 100644 --- a/test/ruby/test_float.rb +++ b/test/ruby/test_float.rb @@ -561,6 +561,9 @@ class TestFloat < Test::Unit::TestCase assert_raise(TypeError) do 1.0.step(2.0, "0.5") {} end + assert_raise(TypeError) do + 1.0.step(2.0, nil) {} + end end def test_sleep_with_Float diff --git a/test/ruby/test_numeric.rb b/test/ruby/test_numeric.rb index d2f211245d..4e7aef2777 100644 --- a/test/ruby/test_numeric.rb +++ b/test/ruby/test_numeric.rb @@ -229,8 +229,8 @@ class TestNumeric < Test::Unit::TestCase assert_raise(ArgumentError) { 1.step(10, 0).size } assert_raise(TypeError) { 1.step(10, "1") { } } assert_raise(TypeError) { 1.step(10, "1").size } - assert_nothing_raised { 1.step(10, nil) { } } - assert_nothing_raised { 1.step(10, nil).size } + assert_raise(TypeError) { 1.step(10, nil) { } } + assert_raise(TypeError) { 1.step(10, nil).size } assert_nothing_raised { 1.step(by: 0, to: nil) } assert_nothing_raised { 1.step(by: 0, to: nil).size } assert_nothing_raised { 1.step(by: 0) }