summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-11-27 17:20:08 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-11-27 17:20:08 +0000
commit4d3f3af83689790f21b344abbfbe6bbdd483813e (patch)
tree4e13f168777c7b6ac62ba965e9f6b5e49e69bba5
parent6fd76fdb142b439d697d374a74a664a61c879ce6 (diff)
* ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal
division (including modulo) should raise ZeroDivisionError as integer division. [incompatible] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20383 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--ext/bigdecimal/bigdecimal.c7
-rw-r--r--test/bigdecimal/test_bigdecimal.rb4
3 files changed, 10 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 08739594b0..4576deb1cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Nov 28 02:18:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * 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@ruby-lang.org>
* numeric.c (flodivmod): floating point division should raise
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
index 62ff80a860..b7f5235111 100644
--- a/ext/bigdecimal/bigdecimal.c
+++ b/ext/bigdecimal/bigdecimal.c
@@ -1012,7 +1012,9 @@ BigDecimal_DoDivmod(VALUE self, VALUE r, Real **div, Real **mod)
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 @@ BigDecimal_div2(int argc, VALUE *argv, VALUE self)
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);
diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb
index d129d93068..fd5b4afd91 100644
--- a/test/bigdecimal/test_bigdecimal.rb
+++ b/test/bigdecimal/test_bigdecimal.rb
@@ -419,9 +419,7 @@ class TestBigDecimal < Test::Unit::TestCase
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