1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support coerce with a

Rational.  The precision used for instantiate a BigDecimal from the
  given Rational is obtained from the receiver BigDecimal.
* test/bigdecimal/test_bigdecimal.rb (test_coerce): add a test for the
  above change.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mrkn 2011-05-31 15:09:38 +00:00
parent 8b70931028
commit d7058e10dc
3 changed files with 26 additions and 2 deletions

View file

@ -1,3 +1,12 @@
Tue Jun 1 00:07:00 2011 Kenta Murata <mrkn@mrkn.jp>
* ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support coerce with a
Rational. The precision used for instantiate a BigDecimal from the
given Rational is obtained from the receiver BigDecimal.
* test/bigdecimal/test_bigdecimal.rb (test_coerce): add a test for the
above change.
Tue May 31 23:49:08 2011 Tadayoshi Funaba <tadf@dotrb.org>
* ext/date/date_core.c (offset_to_sec): fixed invalid validation.

View file

@ -675,12 +675,21 @@ BigDecimal_coerce(VALUE self, VALUE other)
ENTER(2);
VALUE obj;
Real *b;
if (TYPE(other) == T_FLOAT) {
obj = rb_assoc_new(other, BigDecimal_to_f(self));
} else {
GUARD_OBJ(b,GetVpValue(other,1));
}
else {
if (TYPE(other) == T_RATIONAL) {
Real* pv = DATA_PTR(self);
GUARD_OBJ(b, GetVpValueWithPrec(other, pv->Prec*VpBaseFig(), 1));
}
else {
GUARD_OBJ(b, GetVpValue(other, 1));
}
obj = rb_assoc_new(b->obj, self);
}
return obj;
}

View file

@ -485,6 +485,12 @@ class TestBigDecimal < Test::Unit::TestCase
assert_instance_of(Float, a)
assert_instance_of(Float, b)
assert_equal(2, 1 + BigDecimal.new("1"), '[ruby-core:25697]')
a, b = BigDecimal("1").coerce(1.quo(10))
assert_equal(BigDecimal("0.1"), a, '[ruby-core:34318]')
a, b = BigDecimal("0.11111").coerce(1.quo(3))
assert_equal(BigDecimal("0." + "3"*a.precs[0]), a)
end
def test_uplus