mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* bignum.c (rb_big_lshift, rb_big_rshift): separated functions
to get rid of infinite recursion. fixed calculation in edge cases. [ruby-dev:31244] * numeric.c (rb_fix_lshift, rb_fix_rshift): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12814 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ec6e26742c
commit
09ce106ab3
6 changed files with 147 additions and 26 deletions
|
@ -93,6 +93,14 @@ class TestInteger < Test::Unit::TestCase
|
|||
|
||||
#VS.map! {|v| 0x4000000000000000.coerce(v)[0] }
|
||||
|
||||
BDSIZE = 0x4000000000000000.coerce(0)[0].size
|
||||
def self.bdsize(x)
|
||||
((x + 1) / 8 + BDSIZE) / BDSIZE * BDSIZE
|
||||
end
|
||||
def bdsize(x)
|
||||
self.class.bdsize(x)
|
||||
end
|
||||
|
||||
def test_aref
|
||||
VS.each {|a|
|
||||
100.times {|i|
|
||||
|
@ -233,6 +241,11 @@ class TestInteger < Test::Unit::TestCase
|
|||
end
|
||||
}
|
||||
}
|
||||
assert_equal(0, 1 << -0x40000000)
|
||||
assert_equal(0, 1 << -0x40000001)
|
||||
assert_equal(0, 1 << -0x80000000)
|
||||
assert_equal(0, 1 << -0x80000001)
|
||||
# assert_equal(bdsize(0x80000000), (1 << 0x80000000).size)
|
||||
end
|
||||
|
||||
def test_rshift
|
||||
|
@ -248,6 +261,12 @@ class TestInteger < Test::Unit::TestCase
|
|||
end
|
||||
}
|
||||
}
|
||||
# assert_equal(bdsize(0x40000001), (1 >> -0x40000001).size)
|
||||
assert((1 >> 0x80000000).zero?)
|
||||
assert((1 >> 0xffffffff).zero?)
|
||||
assert((1 >> 0x100000000).zero?)
|
||||
# assert_equal((1 << 0x40000000), (1 >> -0x40000000))
|
||||
# assert_equal((1 << 0x40000001), (1 >> -0x40000001))
|
||||
end
|
||||
|
||||
def test_succ
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue