mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-11-10 14:31:04 +00:00
Packer.pack_array/map_header to correspond to read functions
This commit is contained in:
parent
0431a766f4
commit
9d9c3eecb8
2 changed files with 40 additions and 0 deletions
|
|
@ -178,6 +178,17 @@ cdef class Packer(object):
|
||||||
self.pk.length = 0
|
self.pk.length = 0
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
|
cpdef pack_array_header(self, size_t size):
|
||||||
|
msgpack_pack_array(&self.pk, size)
|
||||||
|
buf = PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
|
||||||
|
self.pk.length = 0
|
||||||
|
return buf
|
||||||
|
|
||||||
|
cpdef pack_map_header(self, size_t size):
|
||||||
|
msgpack_pack_map(&self.pk, size)
|
||||||
|
buf = PyBytes_FromStringAndSize(self.pk.buf, self.pk.length)
|
||||||
|
self.pk.length = 0
|
||||||
|
return buf
|
||||||
|
|
||||||
def pack(object o, object stream, default=None, encoding='utf-8', unicode_errors='strict'):
|
def pack(object o, object stream, default=None, encoding='utf-8', unicode_errors='strict'):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,35 @@ def testPackFloat():
|
||||||
assert_equal(packb(1.0, use_single_float=True), b'\xca' + struct.pack('>f', 1.0))
|
assert_equal(packb(1.0, use_single_float=True), b'\xca' + struct.pack('>f', 1.0))
|
||||||
assert_equal(packb(1.0, use_single_float=False), b'\xcb' + struct.pack('>d', 1.0))
|
assert_equal(packb(1.0, use_single_float=False), b'\xcb' + struct.pack('>d', 1.0))
|
||||||
|
|
||||||
|
def testArraySize(sizes=[0, 5, 50, 1000]):
|
||||||
|
bio = six.BytesIO()
|
||||||
|
packer = Packer()
|
||||||
|
for size in sizes:
|
||||||
|
bio.write(packer.pack_array_header(size))
|
||||||
|
for i in range(size):
|
||||||
|
bio.write(packer.pack(i))
|
||||||
|
|
||||||
|
bio.seek(0)
|
||||||
|
unpacker = Unpacker(bio)
|
||||||
|
for size in sizes:
|
||||||
|
assert unpacker.unpack() == tuple(range(size))
|
||||||
|
|
||||||
|
def testMapSize(sizes=[0, 5, 50, 1000]):
|
||||||
|
bio = six.BytesIO()
|
||||||
|
packer = Packer()
|
||||||
|
for size in sizes:
|
||||||
|
bio.write(packer.pack_map_header(size))
|
||||||
|
for i in range(size):
|
||||||
|
bio.write(packer.pack(i)) # key
|
||||||
|
bio.write(packer.pack(i * 2)) # value
|
||||||
|
|
||||||
|
bio.seek(0)
|
||||||
|
unpacker = Unpacker(bio)
|
||||||
|
for size in sizes:
|
||||||
|
assert unpacker.unpack() == {i: i * 2 for i in range(size)}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class odict(dict):
|
class odict(dict):
|
||||||
'''Reimplement OrderedDict to run test on Python 2.6'''
|
'''Reimplement OrderedDict to run test on Python 2.6'''
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue