From fb7fe14575f3b71fb98309a53fa05b32ada50203 Mon Sep 17 00:00:00 2001 From: mrkn Date: Sat, 18 Sep 2010 21:06:08 +0000 Subject: * 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 --- test/bigdecimal/test_bigdecimal.rb | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'test/bigdecimal') 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 -- cgit v1.2.3