Issue #12744: Fix inefficient representation of integers
between 2**31 and 2**63 on systems with a 64-bit C "long".
This commit is contained in:
parent
780199e6a3
commit
3c7e928098
|
@ -1118,6 +1118,16 @@ class AbstractPickleTests(unittest.TestCase):
|
|||
empty = self.loads(b'\x80\x03U\x00q\x00.', encoding='koi8-r')
|
||||
self.assertEqual(empty, '')
|
||||
|
||||
def test_int_pickling_efficiency(self):
|
||||
# Test compacity of int representation (see issue #12744)
|
||||
for proto in protocols:
|
||||
sizes = [len(self.dumps(2**n, proto)) for n in range(70)]
|
||||
# the size function is monotonous
|
||||
self.assertEqual(sorted(sizes), sizes)
|
||||
if proto >= 2:
|
||||
self.assertLessEqual(sizes[-1], 14)
|
||||
|
||||
|
||||
# Test classes for reduce_ex
|
||||
|
||||
class REX_one(object):
|
||||
|
|
|
@ -254,6 +254,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #12744: Fix inefficient representation of integers between 2**31 and
|
||||
2**63 on systems with a 64-bit C "long".
|
||||
|
||||
- Issue #12646: Add an 'eof' attribute to zlib.Decompress, to make it easier to
|
||||
detect truncated input streams.
|
||||
|
||||
|
|
|
@ -1540,7 +1540,7 @@ save_long(PicklerObject *self, PyObject *obj)
|
|||
/* out of range for int pickling */
|
||||
PyErr_Clear();
|
||||
}
|
||||
else
|
||||
else if (val <= 0x7fffffffL && val >= -0x80000000L)
|
||||
return save_int(self, val);
|
||||
|
||||
if (self->proto >= 2) {
|
||||
|
|
Loading…
Reference in New Issue