[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]