ruby-changes:5155
From: matz <ko1@a...>
Date: Tue, 27 May 2008 21:51:53 +0900 (JST)
Subject: [ruby-changes:5155] Ruby:r16650 (trunk): * numeric.c (num_div): should raise ZeroDivisionError.
matz 2008-05-27 21:51:28 +0900 (Tue, 27 May 2008) New Revision: 16650 Modified files: trunk/ChangeLog trunk/numeric.c trunk/test/ruby/test_numeric.rb Log: * numeric.c (num_div): should raise ZeroDivisionError. * numeric.c (fix_divide): ditto. * test/ruby/test_numeric.rb (TestNumeric::test_divmod): avoid ZeroDivisionError in tests. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/numeric.c?r1=16650&r2=16649&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16650&r2=16649&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_numeric.rb?r1=16650&r2=16649&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 16649) +++ ChangeLog (revision 16650) @@ -31,6 +31,13 @@ * numeric.c (num_fdiv): fallback to_f should always return float result. should not use #quo that may return rational. + * numeric.c (num_div): should raise ZeroDivisionError. + + * numeric.c (fix_divide): ditto. + + * test/ruby/test_numeric.rb (TestNumeric::test_divmod): avoid + ZeroDivisionError in tests. + Tue May 27 13:14:53 2008 Akinori MUSHA <knu@i...> * enum.c (enum_to_a): Pass arguments through to #each(). Index: numeric.c =================================================================== --- numeric.c (revision 16649) +++ numeric.c (revision 16650) @@ -288,6 +288,7 @@ static VALUE num_div(VALUE x, VALUE y) { + if (rb_equal(INT2FIX(0), y)) rb_num_zerodiv(); return num_floor(rb_funcall(x, '/', 1, y)); } @@ -2261,11 +2262,15 @@ return rb_big_div(x, y); case T_FLOAT: { - double div = (double)FIX2LONG(x) / RFLOAT_VALUE(y); + double div; + if (op == '/') { + div = (double)FIX2LONG(x) / RFLOAT_VALUE(y); return DOUBLE2NUM(div); } else { + if (RFLOAT_VALUE(y) == 0) rb_num_zerodiv(); + div = (double)FIX2LONG(x) / RFLOAT_VALUE(y); return rb_dbl2big(floor(div)); } } Index: test/ruby/test_numeric.rb =================================================================== --- test/ruby/test_numeric.rb (revision 16649) +++ test/ruby/test_numeric.rb (revision 16650) @@ -60,9 +60,9 @@ def %(x); :mod; end end - assert_equal(42, DummyNumeric.new.div(0)) - assert_equal(:mod, DummyNumeric.new.modulo(0)) - assert_equal([42, :mod], DummyNumeric.new.divmod(0)) + assert_equal(42, DummyNumeric.new.div(1)) + assert_equal(:mod, DummyNumeric.new.modulo(1)) + assert_equal([42, :mod], DummyNumeric.new.divmod(1)) assert_kind_of(Integer, 11.divmod(3.5).first, '[ruby-dev:34006]') -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/