mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
Issue #4258: Make it possible to use 30-bit digits for PyLongs:
- new configure option --enable-big-digits - new structseq sys.int_info giving information about the internal format By default, 30-bit digits are enabled on 64-bit machines but disabled on 32-bit machines.
This commit is contained in:
parent
e7f45b8e59
commit
bd7926478d
15 changed files with 865 additions and 68 deletions
|
|
@ -333,6 +333,9 @@ class SysModuleTest(unittest.TestCase):
|
|||
self.assert_(isinstance(sys.executable, str))
|
||||
self.assertEqual(len(sys.float_info), 11)
|
||||
self.assertEqual(sys.float_info.radix, 2)
|
||||
self.assertEqual(len(sys.int_info), 2)
|
||||
self.assert_(sys.int_info.bits_per_digit % 5 == 0)
|
||||
self.assert_(sys.int_info.sizeof_digit >= 1)
|
||||
self.assert_(isinstance(sys.hexversion, int))
|
||||
self.assert_(isinstance(sys.maxsize, int))
|
||||
self.assert_(isinstance(sys.maxunicode, int))
|
||||
|
|
@ -437,6 +440,7 @@ class SizeofTest(unittest.TestCase):
|
|||
if hasattr(sys, "gettotalrefcount"):
|
||||
self.header += '2P'
|
||||
self.vheader += '2P'
|
||||
self.longdigit = sys.int_info.sizeof_digit
|
||||
import _testcapi
|
||||
self.gc_headsize = _testcapi.SIZEOF_PYGC_HEAD
|
||||
self.file = open(test.support.TESTFN, 'wb')
|
||||
|
|
@ -471,7 +475,7 @@ class SizeofTest(unittest.TestCase):
|
|||
size = self.calcsize
|
||||
gc_header_size = self.gc_headsize
|
||||
# bool objects are not gc tracked
|
||||
self.assertEqual(sys.getsizeof(True), size(vh) + self.H)
|
||||
self.assertEqual(sys.getsizeof(True), size(vh) + self.longdigit)
|
||||
# but lists are
|
||||
self.assertEqual(sys.getsizeof([]), size(vh + 'PP') + gc_header_size)
|
||||
|
||||
|
|
@ -479,8 +483,8 @@ class SizeofTest(unittest.TestCase):
|
|||
h = self.header
|
||||
vh = self.vheader
|
||||
size = self.calcsize
|
||||
self.assertEqual(sys.getsizeof(True), size(vh) + self.H)
|
||||
self.assertEqual(sys.getsizeof(True, -1), size(vh) + self.H)
|
||||
self.assertEqual(sys.getsizeof(True), size(vh) + self.longdigit)
|
||||
self.assertEqual(sys.getsizeof(True, -1), size(vh) + self.longdigit)
|
||||
|
||||
def test_objecttypes(self):
|
||||
# check all types defined in Objects/
|
||||
|
|
@ -489,7 +493,7 @@ class SizeofTest(unittest.TestCase):
|
|||
size = self.calcsize
|
||||
check = self.check_sizeof
|
||||
# bool
|
||||
check(True, size(vh) + self.H)
|
||||
check(True, size(vh) + self.longdigit)
|
||||
# buffer
|
||||
# XXX
|
||||
# builtin_function_or_method
|
||||
|
|
@ -607,11 +611,12 @@ class SizeofTest(unittest.TestCase):
|
|||
check(reversed([]), size(h + 'lP'))
|
||||
# long
|
||||
check(0, size(vh))
|
||||
check(1, size(vh) + self.H)
|
||||
check(-1, size(vh) + self.H)
|
||||
check(32768, size(vh) + 2*self.H)
|
||||
check(32768*32768-1, size(vh) + 2*self.H)
|
||||
check(32768*32768, size(vh) + 3*self.H)
|
||||
check(1, size(vh) + self.longdigit)
|
||||
check(-1, size(vh) + self.longdigit)
|
||||
PyLong_BASE = 2**sys.int_info.bits_per_digit
|
||||
check(PyLong_BASE, size(vh) + 2*self.longdigit)
|
||||
check(PyLong_BASE**2-1, size(vh) + 2*self.longdigit)
|
||||
check(PyLong_BASE**2, size(vh) + 3*self.longdigit)
|
||||
# memory
|
||||
check(memoryview(b''), size(h + 'P PP2P2i7P'))
|
||||
# module
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue