summaryrefslogtreecommitdiff
path: root/test/bigdecimal
diff options
context:
space:
mode:
authorKenta Murata <mrkn@mrkn.jp>2021-01-22 12:03:37 +0900
committerKenta Murata <mrkn@mrkn.jp>2021-12-24 02:28:55 +0900
commite1265c819870c6a4d6763529e9fbd2d70c722fe0 (patch)
treef98fb219b04b9a1879032787be059aeaf8b469ab /test/bigdecimal
parent8ee8ac64239626a9adea4e02ba3f0c4be4895e36 (diff)
[ruby/bigdecimal] Use larger precision in divide for irrational or recurring results
Just in case for irrational or recurring results, the precision of the quotient is set to at least more than 2*Float::DIG plus alpha. [Bug #13754] [Fix GH-94] https://github.com/ruby/bigdecimal/commit/99442c75d3
Diffstat (limited to 'test/bigdecimal')
-rw-r--r--test/bigdecimal/test_bigdecimal.rb17
1 files changed, 15 insertions, 2 deletions
diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb
index 1e6c59535f..66b58aa124 100644
--- a/test/bigdecimal/test_bigdecimal.rb
+++ b/test/bigdecimal/test_bigdecimal.rb
@@ -953,9 +953,13 @@ class TestBigDecimal < Test::Unit::TestCase
assert_equal(2, BigDecimal("2") / 1)
assert_equal(-2, BigDecimal("2") / -1)
- assert_equal(BigDecimal('1486.868686869'), BigDecimal('1472.0') / BigDecimal('0.99'), '[ruby-core:59365] [#9316]')
+ assert_equal(BigDecimal('1486.868686869'),
+ (BigDecimal('1472.0') / BigDecimal('0.99')).round(9),
+ '[ruby-core:59365] [#9316]')
- assert_equal(4.124045235, BigDecimal('0.9932') / (700 * BigDecimal('0.344045') / BigDecimal('1000.0')), '[#9305]')
+ assert_in_delta(4.124045235,
+ (BigDecimal('0.9932') / (700 * BigDecimal('0.344045') / BigDecimal('1000.0'))).round(9, half: :up),
+ 10**Float::MIN_10_EXP, '[#9305]')
BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, false)
assert_positive_zero(BigDecimal("1.0") / BigDecimal("Infinity"))
@@ -969,6 +973,15 @@ class TestBigDecimal < Test::Unit::TestCase
assert_raise_with_message(FloatDomainError, "Computation results in '-Infinity'") { BigDecimal("-1") / 0 }
end
+ def test_dev_precision
+ bug13754 = '[ruby-core:82107] [Bug #13754]'
+ a = BigDecimal('101')
+ b = BigDecimal('0.9163472602589686')
+ c = a/b
+ assert(c.precision > b.precision,
+ "(101/0.9163472602589686).precision >= (0.9163472602589686).precision #{bug13754}")
+ end
+
def test_div_with_float
assert_kind_of(BigDecimal, BigDecimal("3") / 1.5)
assert_equal(BigDecimal("0.5"), BigDecimal(1) / 2.0)