ruby-changes:42061
From: mrkn <ko1@a...>
Date: Thu, 17 Mar 2016 00:53:14 +0900 (JST)
Subject: [ruby-changes:42061] mrkn:r54135 (trunk): * test/ruby/test_bignum.rb: Make sure to use Bignum values in the tests.
mrkn 2016-03-17 00:53:08 +0900 (Thu, 17 Mar 2016) New Revision: 54135 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=54135 Log: * test/ruby/test_bignum.rb: Make sure to use Bignum values in the tests. Modified files: trunk/ChangeLog trunk/test/ruby/test_bignum.rb Index: test/ruby/test_bignum.rb =================================================================== --- test/ruby/test_bignum.rb (revision 54134) +++ test/ruby/test_bignum.rb (revision 54135) @@ -2,12 +2,41 @@ https://github.com/ruby/ruby/blob/trunk/test/ruby/test_bignum.rb#L2 require 'test/unit' class TestBignum < Test::Unit::TestCase + b = 2**64 + b *= b until Bignum === b + + f = b + while Bignum === f-1 + f >>= 1 + end + BIGNUM_MIN = f + FIXNUM_MAX = f-1 + + n = 0 + until f == 0 + f >>= 1 + n += 1 + end + BIGNUM_MIN_BITS = n + + T_ZERO = b.coerce(0).first + T_ONE = b.coerce(1).first + T_MONE = b.coerce(-1).first + T31 = b.coerce(2**31).first # 2147483648 + T31P = b.coerce(T31 - 1).first # 2147483647 + T32 = b.coerce(2**32).first # 4294967296 + T32P = b.coerce(T32 - 1).first # 4294967295 + T64 = b.coerce(2**64).first # 18446744073709551616 + T64P = b.coerce(T64 - 1).first # 18446744073709551615 + T1024 = b.coerce(2**1024).first + T1024P = b.coerce(T1024 - 1).first + def setup @verbose = $VERBOSE $VERBOSE = nil @fmax = Float::MAX.to_i @fmax2 = @fmax * 2 - @big = (1 << 63) - 1 + @big = (1 << BIGNUM_MIN_BITS) - 1 end def teardown @@ -24,6 +53,21 @@ class TestBignum < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_bignum.rb#L53 return f end + def test_prepare + assert_instance_of(Bignum, @big) + assert_instance_of(Bignum, T_ZERO) + assert_instance_of(Bignum, T_ONE) + assert_instance_of(Bignum, T_MONE) + assert_instance_of(Bignum, T31) + assert_instance_of(Bignum, T31P) + assert_instance_of(Bignum, T32) + assert_instance_of(Bignum, T32P) + assert_instance_of(Bignum, T64) + assert_instance_of(Bignum, T64P) + assert_instance_of(Bignum, T1024) + assert_instance_of(Bignum, T1024P) + end + def test_bignum $x = fact(40) assert_equal($x, $x) @@ -36,8 +80,10 @@ class TestBignum < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_bignum.rb#L80 assert_equal(335367096786357081410764800000, $x/fact(20)) $x = -$x assert_equal(-815915283247897734345611269596115894272000000000, $x) - assert_equal(2-(2**32), -(2**32-2)) - assert_equal(2**32 - 5, (2**32-3)-2) + + b = 2*BIGNUM_MIN + assert_equal(2-b, -(b-2)) + assert_equal(b - 5, (b-3)-2) for i in 1000..1014 assert_equal(2 ** i, 1 << i) @@ -111,41 +157,6 @@ class TestBignum < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_bignum.rb#L157 assert_match(/\A10{900}9{100}\z/, (10**1000+(10**100-1)).to_s) end - b = 2**64 - b *= b until Bignum === b - - T_ZERO = b.coerce(0).first - T_ONE = b.coerce(1).first - T_MONE = b.coerce(-1).first - T31 = b.coerce(2**31).first # 2147483648 - T31P = b.coerce(T31 - 1).first # 2147483647 - T32 = b.coerce(2**32).first # 4294967296 - T32P = b.coerce(T32 - 1).first # 4294967295 - T64 = b.coerce(2**64).first # 18446744073709551616 - T64P = b.coerce(T64 - 1).first # 18446744073709551615 - T1024 = b.coerce(2**1024).first - T1024P = b.coerce(T1024 - 1).first - - f = b - while Bignum === f-1 - f = f >> 1 - end - FIXNUM_MAX = f-1 - - def test_prepare - assert_instance_of(Bignum, T_ZERO) - assert_instance_of(Bignum, T_ONE) - assert_instance_of(Bignum, T_MONE) - assert_instance_of(Bignum, T31) - assert_instance_of(Bignum, T31P) - assert_instance_of(Bignum, T32) - assert_instance_of(Bignum, T32P) - assert_instance_of(Bignum, T64) - assert_instance_of(Bignum, T64P) - assert_instance_of(Bignum, T1024) - assert_instance_of(Bignum, T1024P) - end - def test_big_2comp assert_equal("-4294967296", (~T32P).to_s) assert_equal("..f00000000", "%x" % -T32) @@ -528,24 +539,26 @@ class TestBignum < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_bignum.rb#L539 end def test_shift2 - assert_equal(2**33, (2**32) << 1) - assert_equal(2**31, (2**32) << -1) - assert_equal(2**33, (2**32) << 1.0) - assert_equal(2**31, (2**32) << -1.0) - assert_equal(2**33, (2**32) << T_ONE) - assert_equal(2**31, (2**32) << T_MONE) - assert_equal(2**31, (2**32) >> 1) - assert_equal(2**33, (2**32) >> -1) - assert_equal(2**31, (2**32) >> 1.0) - assert_equal(2**33, (2**32) >> -1.0) - assert_equal(2**31, (2**32) >> T_ONE) - assert_equal(2**33, (2**32) >> T_MONE) - assert_equal( 0, (2**32) >> (2**32)) - assert_equal(-1, -(2**32) >> (2**32)) - assert_equal( 0, (2**32) >> 128) - assert_equal(-1, -(2**32) >> 128) - assert_equal( 0, (2**31) >> 32) - assert_equal(-1, -(2**31) >> 32) + b = BIGNUM_MIN_BITS + n = BIGNUM_MIN << 1 + assert_equal(2**(b+1), n << 1) + assert_equal(2**(b-1), n << -1) + assert_equal(2**(b+1), n << 1.0) + assert_equal(2**(b-1), n << -1.0) + assert_equal(2**(b+1), n << T_ONE) + assert_equal(2**(b-1), n << T_MONE) + assert_equal(2**(b-1), n >> 1) + assert_equal(2**(b+1), n >> -1) + assert_equal(2**(b-1), n >> 1.0) + assert_equal(2**(b+1), n >> -1.0) + assert_equal(2**(b-1), n >> T_ONE) + assert_equal(2**(b+1), n >> T_MONE) + assert_equal( 0, n >> n) + assert_equal(-1, -n >> n) + assert_equal( 0, n >> (b*4)) + assert_equal(-1, -n >> (b*4)) + assert_equal( 0, (n/2) >> b) + assert_equal(-1, -(n/2) >> b) end def test_shift_bigshift @@ -554,12 +567,12 @@ class TestBignum < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_bignum.rb#L567 end def test_aref - assert_equal(0, (2**32)[0]) - assert_equal(0, (2**32)[2**32]) - assert_equal(0, (2**32)[-(2**32)]) - assert_equal(0, (2**32)[T_ZERO]) - assert_equal(0, (-(2**64))[0]) - assert_equal(1, (-2**256)[256]) + assert_equal(0, BIGNUM_MIN[0]) + assert_equal(0, BIGNUM_MIN[BIGNUM_MIN]) + assert_equal(0, BIGNUM_MIN[-BIGNUM_MIN]) + assert_equal(0, BIGNUM_MIN[T_ZERO]) + assert_equal(0, (-(BIGNUM_MIN*BIGNUM_MIN))[0]) + assert_equal(1, (-2**(BIGNUM_MIN_BITS*4))[BIGNUM_MIN_BITS*4]) end def test_hash @@ -582,13 +595,13 @@ class TestBignum < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_bignum.rb#L595 end def test_odd - assert_equal(true, (2**32+1).odd?) - assert_equal(false, (2**32).odd?) + assert_equal(true, (BIGNUM_MIN+1).odd?) + assert_equal(false, BIGNUM_MIN.odd?) end def test_even - assert_equal(false, (2**32+1).even?) - assert_equal(true, (2**32).even?) + assert_equal(false, (BIGNUM_MIN+1).even?) + assert_equal(true, BIGNUM_MIN.even?) end def test_interrupt_during_to_s Index: ChangeLog =================================================================== --- ChangeLog (revision 54134) +++ ChangeLog (revision 54135) @@ -1,3 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Thu Mar 17 00:45:00 2016 Kenta Murata <mrkn@m...> + + * test/ruby/test_bignum.rb: Make sure to use Bignum values in the tests. + Wed Mar 16 23:10:25 2016 Nobuyoshi Nakada <nobu@r...> * defs/keywords (alias, undef): symbol literals are allowed. -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/