summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authormrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-08-26 00:14:18 +0000
committermrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-08-26 00:14:18 +0000
commit3dc6edf793c33483c9d7365b865152d57fa994fb (patch)
tree67d247e6b5793b621ce9e5768990fe883904105d /test
parent8554e163557a4f32f6e9427146d594df31ac024a (diff)
* 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
Diffstat (limited to 'test')
-rw-r--r--test/bigdecimal/test_bigdecimal.rb35
1 files changed, 35 insertions, 0 deletions
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