ruby-changes:16890
From: nobu <ko1@a...>
Date: Fri, 6 Aug 2010 20:12:51 +0900 (JST)
Subject: [ruby-changes:16890] Ruby:r28886 (trunk): * rational.c (nurat_div): divided by float zero should be
nobu 2010-08-06 20:12:35 +0900 (Fri, 06 Aug 2010) New Revision: 28886 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28886 Log: * rational.c (nurat_div): divided by float zero should be infinity. [ruby-core:31626] Modified files: trunk/ChangeLog trunk/rational.c trunk/test/ruby/test_rational.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 28885) +++ ChangeLog (revision 28886) @@ -1,3 +1,8 @@ +Fri Aug 6 20:12:28 2010 Nobuyoshi Nakada <nobu@r...> + + * rational.c (nurat_div): divided by float zero should be + infinity. [ruby-core:31626] + Fri Aug 6 18:59:23 2010 Nobuyoshi Nakada <nobu@r...> * file.c (realpath_rec): rb_str_modify depends on the length, so Index: test/ruby/test_rational.rb =================================================================== --- test/ruby/test_rational.rb (revision 28885) +++ test/ruby/test_rational.rb (revision 28886) @@ -297,6 +297,8 @@ assert_raise(ZeroDivisionError){Rational(1, 3) / 0} assert_raise(ZeroDivisionError){Rational(1, 3) / Rational(0)} + + assert((Rational(1, 3) / 0.0).infinite?, '[ruby-core:31626]') end def assert_eql(exp, act, *args) @@ -546,6 +548,7 @@ assert_equal(0.25, c.fdiv(2)) assert_equal(0.25, c.fdiv(2.0)) + assert(c.fdiv(0).infinite?, '[ruby-core:31626]') end def test_expt @@ -1067,6 +1070,7 @@ assert_equal(Rational(5000000000), 10000000000.quo(2)) assert_equal(0.5, 1.0.quo(2)) assert_equal(Rational(1,4), Rational(1,2).quo(2)) + assert(Rational(1,2).quo(0.0).infinite?, '[ruby-core:31626]') assert_equal(0.5, 1.fdiv(2)) assert_equal(5000000000.0, 10000000000.fdiv(2)) Index: rational.c =================================================================== --- rational.c (revision 28885) +++ rational.c (revision 28886) @@ -882,7 +882,7 @@ return DBL2NUM(-INFINITY); } } - if (modf(x, &den) == 0.0) { + if (x != 0.0 && modf(x, &den) == 0.0) { return rb_rational_raw2(dat->num, f_mul(rb_dbl2big(den), dat->den)); } } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/