ruby-changes:25481
From: naruse <ko1@a...>
Date: Wed, 7 Nov 2012 16:04:08 +0900 (JST)
Subject: [ruby-changes:25481] naruse:r37537 (trunk): * numeric.c (ruby_float_step): fix r37514: it yielded with NaN
naruse 2012-11-07 16:03:50 +0900 (Wed, 07 Nov 2012) New Revision: 37537 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37537 Log: * numeric.c (ruby_float_step): fix r37514: it yielded with NaN if the unit is infinity. Modified files: trunk/ChangeLog trunk/numeric.c trunk/test/ruby/test_float.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 37536) +++ ChangeLog (revision 37537) @@ -1,3 +1,8 @@ +Wed Nov 7 15:22:37 2012 NARUSE, Yui <naruse@r...> + + * numeric.c (ruby_float_step): fix r37514: it yielded with NaN + if the unit is infinity. + Wed Nov 7 15:46:12 2012 Ayumu AIZAWA <ayumu.aizawa@g...> * lib/webrick.rb: fix typo. reported by Rohit Arondekar. Index: numeric.c =================================================================== --- numeric.c (revision 37536) +++ numeric.c (revision 37537) @@ -1755,11 +1755,17 @@ double n = ruby_float_step_size(beg, end, unit, excl); long i; - for (i=0; i<n; i++) { - double d = i*unit+beg; - if (unit >= 0 ? end < d : d < end) d = end; - rb_yield(DBL2NUM(d)); + if (isinf(unit)) { + /* if unit is infinity, i*unit+beg is NaN */ + if (n) rb_yield(DBL2NUM(beg)); } + else { + for (i=0; i<n; i++) { + double d = i*unit+beg; + if (unit >= 0 ? end < d : d < end) d = end; + rb_yield(DBL2NUM(d)); + } + } return TRUE; } return FALSE; Index: test/ruby/test_float.rb =================================================================== --- test/ruby/test_float.rb (revision 37536) +++ test/ruby/test_float.rb (revision 37537) @@ -585,6 +585,10 @@ assert_equal([5.0, 4.0, 3.0, 2.0], 5.0.step(1.5, -1).to_a) end + def test_step2 + assert_equal([0.0], 0.0.step(1.0, Float::INFINITY).to_a) + end + def test_step_excl 1000.times do a = rand -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/