mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* bigdecimal.c (BigDecimal_coerce): convert a Float to a BigDecimal instead
of converting the receiver to a Float. [ruby-core:58756] [Bug #9192] * test/bigdecimal/test_bigdecimal.rb: add tests for the above change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44073 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e54e3d70a8
commit
0727a22c69
3 changed files with 27 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
|||
Sun Dec 8 20:21:00 2013 Kenta Murata <mrkn@mrkn.jp>
|
||||
|
||||
* bigdecimal.c (BigDecimal_coerce): convert a Float to a BigDecimal instead
|
||||
of converting the receiver to a Float.
|
||||
[ruby-core:58756] [Bug #9192]
|
||||
|
||||
* test/bigdecimal/test_bigdecimal.rb: add tests for the above change.
|
||||
|
||||
Sun Dec 8 18:28:20 2013 Kazuki Tsujimoto <kazuki@callcc.net>
|
||||
|
||||
* NEWS: [DOC] update NEWS about GC.
|
||||
|
|
|
@ -797,7 +797,8 @@ BigDecimal_coerce(VALUE self, VALUE other)
|
|||
Real *b;
|
||||
|
||||
if (RB_TYPE_P(other, T_FLOAT)) {
|
||||
obj = rb_assoc_new(other, BigDecimal_to_f(self));
|
||||
GUARD_OBJ(b, GetVpValueWithPrec(other, DBL_DIG+1, 1));
|
||||
obj = rb_assoc_new(ToValue(b), self);
|
||||
}
|
||||
else {
|
||||
if (RB_TYPE_P(other, T_RATIONAL)) {
|
||||
|
|
|
@ -438,6 +438,20 @@ class TestBigDecimal < Test::Unit::TestCase
|
|||
assert_equal(0, BigDecimal("1E-1") <=> 10**(-1), '#4825')
|
||||
end
|
||||
|
||||
def test_cmp_issue9192
|
||||
bug9192 = '[ruby-core:58756] [#9192]'
|
||||
operators = { :== => :==, :< => :>, :> => :<, :<= => :>=, :>= => :<= }
|
||||
5.upto(8) do |i|
|
||||
s = "706.0#{i}"
|
||||
d = BigDecimal(s)
|
||||
f = s.to_f
|
||||
operators.each do |op, inv|
|
||||
assert_equal(d.send(op, f), f.send(inv, d),
|
||||
"(BigDecimal(#{s.inspect}) #{op} #{s}) and (#{s} #{inv} BigDecimal(#{s.inspect})) is different #{bug9192}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_cmp_nan
|
||||
n1 = BigDecimal.new("1")
|
||||
BigDecimal.mode(BigDecimal::EXCEPTION_NaN, false)
|
||||
|
@ -608,8 +622,8 @@ class TestBigDecimal < Test::Unit::TestCase
|
|||
|
||||
def test_coerce
|
||||
a, b = BigDecimal.new("1").coerce(1.0)
|
||||
assert_instance_of(Float, a)
|
||||
assert_instance_of(Float, b)
|
||||
assert_instance_of(BigDecimal, a)
|
||||
assert_instance_of(BigDecimal, b)
|
||||
assert_equal(2, 1 + BigDecimal.new("1"), '[ruby-core:25697]')
|
||||
|
||||
a, b = BigDecimal("1").coerce(1.quo(10))
|
||||
|
@ -1462,7 +1476,7 @@ class TestBigDecimal < Test::Unit::TestCase
|
|||
|
||||
def test_BigMath_log_with_101
|
||||
# this is mainly a performance test (should be very fast, not the 0.3 s)
|
||||
assert_in_delta(Math.log(101), BigMath.log(101, 20), 1E-20)
|
||||
assert_in_delta(Math.log(101), BigMath.log(101, 20), 1E-15)
|
||||
end
|
||||
|
||||
def test_BigMath_log_with_reciprocal_of_42
|
||||
|
|
Loading…
Reference in a new issue