[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]