Issue #19754: Make pickletools.optimize respect the frame size target.

This commit is contained in:
Alexandre Vassalotti 2013-12-01 16:27:46 -08:00
parent 53dd8167ff
commit 28d271ef6b
3 changed files with 2 additions and 14 deletions

View File

@ -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()

View File

@ -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:

View File

@ -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))