diff --git a/test/bigdecimal/helper.rb b/test/bigdecimal/helper.rb index 46721fb9..0747855b 100644 --- a/test/bigdecimal/helper.rb +++ b/test/bigdecimal/helper.rb @@ -1,9 +1,23 @@ # frozen_string_literal: false require "test/unit" require "bigdecimal" -require 'rbconfig/sizeof' +require "rbconfig/sizeof" module 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], + ] + if RbConfig::SIZEOF.key?("int64_t") SIZEOF_DECDIG = RbConfig::SIZEOF["int32_t"] BASE = 1_000_000_000 @@ -14,6 +28,26 @@ module TestBigDecimalBase BASE_FIG = 4 end + if defined? RbConfig::LIMITS + LIMITS = RbConfig::LIMITS + else + require "fiddle" + LONG_MAX = (1 << (Fiddle::SIZEOF_LONG*8 - 1)) - 1 + LONG_MIN = [LONG_MAX + 1].pack("L!").unpack("l!")[0] + LLONG_MAX = (1 << (Fiddle::SIZEOF_LONG_LONG*8 - 1)) - 1 + LLONG_MIN = [LLONG_MAX + 1].pack("Q!").unpack("q!")[0] + ULLONG_MAX = (1 << Fiddle::SIZEOF_LONG_LONG*8) - 1 + LIMITS = { + "LLONG_MIN" => LLONG_MIN, + "ULLONG_MAX" => ULLONG_MAX, + "FIXNUM_MIN" => LONG_MIN / 2, + "FIXNUM_MAX" => LONG_MAX / 2, + "INT64_MIN" => -9223372036854775808, + "INT64_MAX" => 9223372036854775807, + "UINT64_MAX" => 18446744073709551615, + }.freeze + end + def setup @mode = BigDecimal.mode(BigDecimal::EXCEPTION_ALL) BigDecimal.mode(BigDecimal::EXCEPTION_ALL, true) diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index 0cd85249..0f3b0cc2 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -5,40 +5,6 @@ class TestBigDecimal < Test::Unit::TestCase include TestBigDecimalBase - if defined? RbConfig::LIMITS - LIMITS = RbConfig::LIMITS - else - require 'fiddle' - LONG_MAX = (1 << (Fiddle::SIZEOF_LONG*8 - 1)) - 1 - LONG_MIN = [LONG_MAX + 1].pack("L!").unpack("l!")[0] - LLONG_MAX = (1 << (Fiddle::SIZEOF_LONG_LONG*8 - 1)) - 1 - LLONG_MIN = [LLONG_MAX + 1].pack("Q!").unpack("q!")[0] - ULLONG_MAX = (1 << Fiddle::SIZEOF_LONG_LONG*8) - 1 - LIMITS = { - "LLONG_MIN" => LLONG_MIN, - "ULLONG_MAX" => ULLONG_MAX, - "FIXNUM_MIN" => LONG_MIN / 2, - "FIXNUM_MAX" => LONG_MAX / 2, - "INT64_MIN" => -9223372036854775808, - "INT64_MAX" => 9223372036854775807, - "UINT64_MAX" => 18446744073709551615, - }.freeze - end - - 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 assert_nan(x) assert(x.nan?, "Expected #{x.inspect} to be NaN") end