From 3dc6edf793c33483c9d7365b865152d57fa994fb Mon Sep 17 00:00:00 2001 From: mrkn Date: Thu, 26 Aug 2010 00:14:18 +0000 Subject: * ext/bigdecimal/bigdecimal.c (Init_bigdecimal, rmpd_set_thread_local_exception_mode, VpGetException, VpSetException): thread-local exception mode. * ext/bigdecimal/bigdecimal.c (Init_bigdecimal, rmpd_set_thread_local_precision_limit, VpGetPrecLimit, VpSetPrecLimit): thread-local precision limit. * ext/bigdecimal/bigdecimal.c (Init_bigdecimal, rmpd_set_thread_local_rounding_mode, VpGetRoundMode, VpSetRoundMode, VpException, VpInternalRound): thread-local rounding mode. * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round, VpIsRoundMode, VpGetRoundMode, VpSetRoundMode, VpActiveRound, VpMidRound, VpLeftRound), ext/bigdecimal/bigdecimal.h: use unsigned short for rounding mode. * test/bigdecimal/test_bigdecimal.rb (test_mode): add test for setting rounding mode. * test/bigdecimal/test_bigdecimal.rb (test_thread_local_mode): add test for setting mode thread-locally. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29099 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/bigdecimal/test_bigdecimal.rb | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'test') diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index 53979340a1..7411416043 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -1,5 +1,7 @@ require_relative "testbase" +require 'thread' + class TestBigDecimal < Test::Unit::TestCase include TestBigDecimalBase @@ -40,6 +42,39 @@ class TestBigDecimal < Test::Unit::TestCase assert_raise(TypeError) { BigDecimal.mode(BigDecimal::EXCEPTION_ALL, 1) } assert_raise(TypeError) { BigDecimal.mode(BigDecimal::ROUND_MODE, 256) } assert_raise(TypeError) { BigDecimal.mode(0xf000, true) } + + begin + saved_mode = BigDecimal.mode(BigDecimal::ROUND_MODE) + + [ BigDecimal::ROUND_UP, + BigDecimal::ROUND_DOWN, + BigDecimal::ROUND_HALF_UP, + BigDecimal::ROUND_HALF_DOWN, + BigDecimal::ROUND_CEILING, + BigDecimal::ROUND_FLOOR, + BigDecimal::ROUND_HALF_EVEN, + ].each do |mode| + BigDecimal.mode(BigDecimal::ROUND_MODE, mode) + assert_equal(mode, BigDecimal.mode(BigDecimal::ROUND_MODE)) + end + ensure + BigDecimal.mode(BigDecimal::ROUND_MODE, saved_mode) + end + end + + def test_thread_local_mode + begin + saved_mode = BigDecimal.mode(BigDecimal::ROUND_MODE) + + BigDecimal.mode(BigDecimal::ROUND_MODE, BigDecimal::ROUND_UP) + Thread.start { + BigDecimal.mode(BigDecimal::ROUND_MODE, BigDecimal::ROUND_HALF_EVEN) + assert_equal(BigDecimal::ROUND_HALF_EVEN, BigDecimal.mode(BigDecimal::ROUND_MODE)) + }.join + assert_equal(BigDecimal::ROUND_UP, BigDecimal.mode(BigDecimal::ROUND_MODE)) + ensure + BigDecimal.mode(BigDecimal::ROUND_MODE, saved_mode) + end end def test_exception_nan -- cgit v1.2.3