mirror of
https://github.com/python/cpython.git
synced 2024-12-12 19:33:52 +08:00
Issue #19754: Make pickletools.optimize respect the frame size target.
This commit is contained in:
parent
53dd8167ff
commit
28d271ef6b
@ -2313,6 +2313,7 @@ def optimize(p):
|
||||
buf.start_framing()
|
||||
for start, stop, putid in opcodes:
|
||||
if putid in gets:
|
||||
#buf.commit_frame()
|
||||
buf.write(p[start:stop])
|
||||
if proto >= 4:
|
||||
buf.end_framing()
|
||||
|
@ -1343,12 +1343,6 @@ class AbstractPickleTests(unittest.TestCase):
|
||||
pickled = self.dumps(obj, proto)
|
||||
unpickled = self.loads(pickled)
|
||||
self.assertEqual(obj, unpickled)
|
||||
# Test the framing heuristic is sane,
|
||||
# assuming a given frame size target.
|
||||
if self.optimized:
|
||||
# These assumptions are currently invalid for optimized
|
||||
# pickles (see e.g. issue19754).
|
||||
continue
|
||||
bytes_per_frame = (len(pickled) /
|
||||
count_opcode(pickle.FRAME, pickled))
|
||||
self.assertGreater(bytes_per_frame,
|
||||
@ -1365,12 +1359,7 @@ class AbstractPickleTests(unittest.TestCase):
|
||||
unpickled = self.loads(pickled)
|
||||
self.assertEqual(obj, unpickled)
|
||||
n_frames = count_opcode(pickle.FRAME, pickled)
|
||||
if self.optimized:
|
||||
# At least one frame was emitted (see issue19754).
|
||||
self.assertGreaterEqual(n_frames, 1)
|
||||
else:
|
||||
# At least one frame was emitted per large bytes object.
|
||||
self.assertGreaterEqual(n_frames, len(obj))
|
||||
self.assertGreaterEqual(n_frames, len(obj))
|
||||
|
||||
def test_optional_frames(self):
|
||||
if pickle.HIGHEST_PROTOCOL < 4:
|
||||
|
@ -6,8 +6,6 @@ from test.pickletester import AbstractPickleModuleTests
|
||||
|
||||
class OptimizedPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
|
||||
|
||||
optimized = True
|
||||
|
||||
def dumps(self, arg, proto=None):
|
||||
return pickletools.optimize(pickle.dumps(arg, proto))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user