mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-10-19 20:03:16 +00:00

The following steps have been taken: 1. Black was updated to latest version. The code has been formatted with the new version. 2. The pyupgrade utility is installed. This helped to remove all the code that was needed to support Python < 3.7. Fix #541. Co-authored-by: Inada Naoki <songofacandy@gmail.com>
136 lines
2.9 KiB
Python
136 lines
2.9 KiB
Python
#!/usr/bin/env python
|
|
from msgpack import packb, unpackb
|
|
|
|
|
|
def check(length, obj, use_bin_type=True):
|
|
v = packb(obj, use_bin_type=use_bin_type)
|
|
assert len(v) == length, f"{obj!r} length should be {length!r} but get {len(v)!r}"
|
|
assert unpackb(v, use_list=0, raw=not use_bin_type) == obj
|
|
|
|
|
|
def test_1():
|
|
for o in [
|
|
None,
|
|
True,
|
|
False,
|
|
0,
|
|
1,
|
|
(1 << 6),
|
|
(1 << 7) - 1,
|
|
-1,
|
|
-((1 << 5) - 1),
|
|
-(1 << 5),
|
|
]:
|
|
check(1, o)
|
|
|
|
|
|
def test_2():
|
|
for o in [1 << 7, (1 << 8) - 1, -((1 << 5) + 1), -(1 << 7)]:
|
|
check(2, o)
|
|
|
|
|
|
def test_3():
|
|
for o in [1 << 8, (1 << 16) - 1, -((1 << 7) + 1), -(1 << 15)]:
|
|
check(3, o)
|
|
|
|
|
|
def test_5():
|
|
for o in [1 << 16, (1 << 32) - 1, -((1 << 15) + 1), -(1 << 31)]:
|
|
check(5, o)
|
|
|
|
|
|
def test_9():
|
|
for o in [
|
|
1 << 32,
|
|
(1 << 64) - 1,
|
|
-((1 << 31) + 1),
|
|
-(1 << 63),
|
|
1.0,
|
|
0.1,
|
|
-0.1,
|
|
-1.0,
|
|
]:
|
|
check(9, o)
|
|
|
|
|
|
def check_raw(overhead, num):
|
|
check(num + overhead, b" " * num, use_bin_type=False)
|
|
|
|
|
|
def test_fixraw():
|
|
check_raw(1, 0)
|
|
check_raw(1, (1 << 5) - 1)
|
|
|
|
|
|
def test_raw16():
|
|
check_raw(3, 1 << 5)
|
|
check_raw(3, (1 << 16) - 1)
|
|
|
|
|
|
def test_raw32():
|
|
check_raw(5, 1 << 16)
|
|
|
|
|
|
def check_array(overhead, num):
|
|
check(num + overhead, (None,) * num)
|
|
|
|
|
|
def test_fixarray():
|
|
check_array(1, 0)
|
|
check_array(1, (1 << 4) - 1)
|
|
|
|
|
|
def test_array16():
|
|
check_array(3, 1 << 4)
|
|
check_array(3, (1 << 16) - 1)
|
|
|
|
|
|
def test_array32():
|
|
check_array(5, (1 << 16))
|
|
|
|
|
|
def match(obj, buf):
|
|
assert packb(obj) == buf
|
|
assert unpackb(buf, use_list=0, strict_map_key=False) == obj
|
|
|
|
|
|
def test_match():
|
|
cases = [
|
|
(None, b"\xc0"),
|
|
(False, b"\xc2"),
|
|
(True, b"\xc3"),
|
|
(0, b"\x00"),
|
|
(127, b"\x7f"),
|
|
(128, b"\xcc\x80"),
|
|
(256, b"\xcd\x01\x00"),
|
|
(-1, b"\xff"),
|
|
(-33, b"\xd0\xdf"),
|
|
(-129, b"\xd1\xff\x7f"),
|
|
({1: 1}, b"\x81\x01\x01"),
|
|
(1.0, b"\xcb\x3f\xf0\x00\x00\x00\x00\x00\x00"),
|
|
((), b"\x90"),
|
|
(
|
|
tuple(range(15)),
|
|
b"\x9f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e",
|
|
),
|
|
(
|
|
tuple(range(16)),
|
|
b"\xdc\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
|
|
),
|
|
({}, b"\x80"),
|
|
(
|
|
{x: x for x in range(15)},
|
|
b"\x8f\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07\x07\x08\x08\t\t\n\n\x0b\x0b\x0c\x0c\r\r\x0e\x0e",
|
|
),
|
|
(
|
|
{x: x for x in range(16)},
|
|
b"\xde\x00\x10\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07\x07\x08\x08\t\t\n\n\x0b\x0b\x0c\x0c\r\r\x0e\x0e\x0f\x0f",
|
|
),
|
|
]
|
|
|
|
for v, p in cases:
|
|
match(v, p)
|
|
|
|
|
|
def test_unicode():
|
|
assert unpackb(packb("foobar"), use_list=1) == "foobar"
|