ruby-changes:8847
From: matz <ko1@a...>
Date: Fri, 28 Nov 2008 02:20:37 +0900 (JST)
Subject: [ruby-changes:8847] Ruby:r20383 (trunk): * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal
matz 2008-11-28 02:20:08 +0900 (Fri, 28 Nov 2008) New Revision: 20383 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20383 Log: * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal division (including modulo) should raise ZeroDivisionError as integer division. [incompatible] Modified files: trunk/ChangeLog trunk/ext/bigdecimal/bigdecimal.c trunk/test/bigdecimal/test_bigdecimal.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 20382) +++ ChangeLog (revision 20383) @@ -1,3 +1,9 @@ +Fri Nov 28 02:18:47 2008 Yukihiro Matsumoto <matz@r...> + + * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal + division (including modulo) should raise ZeroDivisionError as + integer division. [incompatible] + Fri Nov 28 00:12:00 2008 Yukihiro Matsumoto <matz@r...> * numeric.c (flodivmod): floating point division should raise Index: ext/bigdecimal/bigdecimal.c =================================================================== --- ext/bigdecimal/bigdecimal.c (revision 20382) +++ ext/bigdecimal/bigdecimal.c (revision 20383) @@ -1012,7 +1012,9 @@ if(VpIsNaN(a) || VpIsNaN(b)) goto NaN; if(VpIsInf(a) || VpIsInf(b)) goto NaN; - if(VpIsZero(b)) goto NaN; + if(VpIsZero(b)) { + rb_raise(rb_eZeroDivError, "divided by 0"); + } if(VpIsZero(a)) { GUARD_OBJ(c,VpCreateRbObject(1, "0")); GUARD_OBJ(d,VpCreateRbObject(1, "0")); @@ -1169,9 +1171,6 @@ Real *mod; obj = BigDecimal_DoDivmod(self,b,&div,&mod); if(obj!=(VALUE)0) return obj; - if(VpIsNaN(div) && rb_equal(b, INT2FIX(0))) { - rb_raise(rb_eZeroDivError, "divided by 0"); - } return BigDecimal_to_i(ToValue(div)); } else { /* div in BigDecimal sense */ U_LONG ix = (U_LONG)GetPositiveInt(n); Index: test/bigdecimal/test_bigdecimal.rb =================================================================== --- test/bigdecimal/test_bigdecimal.rb (revision 20382) +++ test/bigdecimal/test_bigdecimal.rb (revision 20383) @@ -419,9 +419,7 @@ assert_equal([0, 0], BigDecimal.new("0").divmod(2)) BigDecimal.mode(BigDecimal::EXCEPTION_NaN, false) - a, b = BigDecimal.new("0").divmod(0) - assert_equal(true, a.nan?) - assert_equal(true, b.nan?) + assert_raise(ZeroDivisionError){BigDecimal.new("0").divmod(0)} end def test_add_bigdecimal -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/