summaryrefslogtreecommitdiff
path: root/test/bigdecimal
diff options
context:
space:
mode:
authormrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-09-18 21:06:08 +0000
committermrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-09-18 21:06:08 +0000
commitfb7fe14575f3b71fb98309a53fa05b32ada50203 (patch)
tree846e22a72eb6162fdcbb0de00988972cd1ec89b3 /test/bigdecimal
parentd6e9eebd747108650671847bf7ddcef3853107f8 (diff)
* ext/bigdecimal/bigdecimal.c (check_rounding_mode): added for
converting symbol to rounding mode number. * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round): support to specify rounding mode by symbol. * test/bigdecimal/test_bigdecimal.rb (test_mode, test_round): add tests for avobe changes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/bigdecimal')
-rw-r--r--test/bigdecimal/test_bigdecimal.rb38
1 files changed, 32 insertions, 6 deletions
diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb
index 2efa65b57b..351fd2dbab 100644
--- a/test/bigdecimal/test_bigdecimal.rb
+++ b/test/bigdecimal/test_bigdecimal.rb
@@ -5,6 +5,20 @@ require 'thread'
class TestBigDecimal < Test::Unit::TestCase
include TestBigDecimalBase
+ ROUNDING_MODE_MAP = [
+ [ BigDecimal::ROUND_UP, :up],
+ [ BigDecimal::ROUND_DOWN, :down],
+ [ BigDecimal::ROUND_DOWN, :truncate],
+ [ BigDecimal::ROUND_HALF_UP, :half_up],
+ [ BigDecimal::ROUND_HALF_UP, :default],
+ [ BigDecimal::ROUND_HALF_DOWN, :half_down],
+ [ BigDecimal::ROUND_HALF_EVEN, :half_even],
+ [ BigDecimal::ROUND_HALF_EVEN, :banker],
+ [ BigDecimal::ROUND_CEILING, :ceiling],
+ [ BigDecimal::ROUND_CEILING, :ceil],
+ [ BigDecimal::ROUND_FLOOR, :floor],
+ ]
+
def test_version
assert_equal("1.0.1", BigDecimal.ver)
end
@@ -60,6 +74,13 @@ class TestBigDecimal < Test::Unit::TestCase
ensure
BigDecimal.mode(BigDecimal::ROUND_MODE, saved_mode)
end
+
+ BigDecimal.save_rounding_mode do
+ ROUNDING_MODE_MAP.each do |const, sym|
+ BigDecimal.mode(BigDecimal::ROUND_MODE, sym)
+ assert_equal(const, BigDecimal.mode(BigDecimal::ROUND_MODE))
+ end
+ end
end
def test_thread_local_mode
@@ -613,16 +634,21 @@ class TestBigDecimal < Test::Unit::TestCase
assert_equal(2, x.round(0, BigDecimal::ROUND_FLOOR))
assert_raise(TypeError) { x.round(0, 256) }
+ ROUNDING_MODE_MAP.each do |const, sym|
+ assert_equal(x.round(0, const), x.round(0, sym))
+ end
+
+ bug3803 = '[ruby-core:32136]'
15.times do |n|
x = BigDecimal.new("5#{'0'*n}1")
- assert_equal(10**(n+2), x.round(-(n+2), BigDecimal::ROUND_HALF_DOWN))
- assert_equal(10**(n+2), x.round(-(n+2), BigDecimal::ROUND_HALF_EVEN))
+ assert_equal(10**(n+2), x.round(-(n+2), BigDecimal::ROUND_HALF_DOWN), bug3803)
+ assert_equal(10**(n+2), x.round(-(n+2), BigDecimal::ROUND_HALF_EVEN), bug3803)
x = BigDecimal.new("0.5#{'0'*n}1")
- assert_equal(1, x.round(0, BigDecimal::ROUND_HALF_DOWN))
- assert_equal(1, x.round(0, BigDecimal::ROUND_HALF_EVEN))
+ assert_equal(1, x.round(0, BigDecimal::ROUND_HALF_DOWN), bug3803)
+ assert_equal(1, x.round(0, BigDecimal::ROUND_HALF_EVEN), bug3803)
x = BigDecimal.new("-0.5#{'0'*n}1")
- assert_equal(-1, x.round(0, BigDecimal::ROUND_HALF_DOWN))
- assert_equal(-1, x.round(0, BigDecimal::ROUND_HALF_EVEN))
+ assert_equal(-1, x.round(0, BigDecimal::ROUND_HALF_DOWN), bug3803)
+ assert_equal(-1, x.round(0, BigDecimal::ROUND_HALF_EVEN), bug3803)
end
end