2009-06-29 09:31:43 +09:00
|
|
|
#!/usr/bin/env python
|
2012-07-04 14:58:36 +09:00
|
|
|
from msgpack import packb, unpackb
|
2009-06-29 09:31:43 +09:00
|
|
|
|
2009-12-17 17:58:41 +09:00
|
|
|
|
2019-12-05 21:34:10 +09:00
|
|
|
def check(length, obj, use_bin_type=True):
|
|
|
|
v = packb(obj, use_bin_type=use_bin_type)
|
2023-05-23 18:41:08 +02:00
|
|
|
assert len(v) == length, f"{obj!r} length should be {length!r} but get {len(v)!r}"
|
2019-12-05 21:34:10 +09:00
|
|
|
assert unpackb(v, use_list=0, raw=not use_bin_type) == obj
|
2009-06-29 09:31:43 +09:00
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_1():
|
2019-12-05 18:51:45 +09:00
|
|
|
for o in [
|
|
|
|
None,
|
|
|
|
True,
|
|
|
|
False,
|
|
|
|
0,
|
|
|
|
1,
|
|
|
|
(1 << 6),
|
|
|
|
(1 << 7) - 1,
|
|
|
|
-1,
|
|
|
|
-((1 << 5) - 1),
|
|
|
|
-(1 << 5),
|
|
|
|
]:
|
2009-06-29 09:31:43 +09:00
|
|
|
check(1, o)
|
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_2():
|
2019-12-05 18:51:45 +09:00
|
|
|
for o in [1 << 7, (1 << 8) - 1, -((1 << 5) + 1), -(1 << 7)]:
|
2009-06-29 09:31:43 +09:00
|
|
|
check(2, o)
|
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_3():
|
2019-12-05 18:51:45 +09:00
|
|
|
for o in [1 << 8, (1 << 16) - 1, -((1 << 7) + 1), -(1 << 15)]:
|
2009-06-29 09:31:43 +09:00
|
|
|
check(3, o)
|
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_5():
|
2019-12-05 18:51:45 +09:00
|
|
|
for o in [1 << 16, (1 << 32) - 1, -((1 << 15) + 1), -(1 << 31)]:
|
2009-06-29 09:31:43 +09:00
|
|
|
check(5, o)
|
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_9():
|
2019-12-05 18:51:45 +09:00
|
|
|
for o in [
|
|
|
|
1 << 32,
|
|
|
|
(1 << 64) - 1,
|
|
|
|
-((1 << 31) + 1),
|
|
|
|
-(1 << 63),
|
|
|
|
1.0,
|
|
|
|
0.1,
|
|
|
|
-0.1,
|
|
|
|
-1.0,
|
|
|
|
]:
|
2009-06-29 09:31:43 +09:00
|
|
|
check(9, o)
|
|
|
|
|
|
|
|
|
|
|
|
def check_raw(overhead, num):
|
2019-12-05 21:34:10 +09:00
|
|
|
check(num + overhead, b" " * num, use_bin_type=False)
|
2009-06-29 09:31:43 +09:00
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_fixraw():
|
|
|
|
check_raw(1, 0)
|
2019-12-05 18:51:45 +09:00
|
|
|
check_raw(1, (1 << 5) - 1)
|
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
|
|
|
|
def test_raw16():
|
2019-12-05 18:51:45 +09:00
|
|
|
check_raw(3, 1 << 5)
|
|
|
|
check_raw(3, (1 << 16) - 1)
|
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
|
|
|
|
def test_raw32():
|
2019-12-05 18:51:45 +09:00
|
|
|
check_raw(5, 1 << 16)
|
2009-06-29 09:31:43 +09:00
|
|
|
|
|
|
|
|
|
|
|
def check_array(overhead, num):
|
2009-12-17 17:58:41 +09:00
|
|
|
check(num + overhead, (None,) * num)
|
2009-06-29 09:31:43 +09:00
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_fixarray():
|
|
|
|
check_array(1, 0)
|
|
|
|
check_array(1, (1 << 4) - 1)
|
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_array16():
|
|
|
|
check_array(3, 1 << 4)
|
2019-12-05 18:51:45 +09:00
|
|
|
check_array(3, (1 << 16) - 1)
|
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
|
|
|
|
def test_array32():
|
2019-12-05 18:51:45 +09:00
|
|
|
check_array(5, (1 << 16))
|
2009-06-29 09:31:43 +09:00
|
|
|
|
|
|
|
|
|
|
|
def match(obj, buf):
|
2012-12-29 11:24:25 +09:00
|
|
|
assert packb(obj) == buf
|
2019-12-06 22:23:15 +09:00
|
|
|
assert unpackb(buf, use_list=0, strict_map_key=False) == obj
|
2009-06-29 09:31:43 +09:00
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
|
2009-06-29 09:31:43 +09:00
|
|
|
def test_match():
|
|
|
|
cases = [
|
2019-12-05 18:51:45 +09:00
|
|
|
(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"),
|
2012-06-19 13:55:14 +09:00
|
|
|
(1.0, b"\xcb\x3f\xf0\x00\x00\x00\x00\x00\x00"),
|
2019-12-05 18:51:45 +09:00
|
|
|
((), 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"),
|
|
|
|
(
|
2023-05-23 18:41:08 +02:00
|
|
|
{x: x for x in range(15)},
|
2019-12-05 18:51:45 +09:00
|
|
|
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",
|
|
|
|
),
|
|
|
|
(
|
2023-05-23 18:41:08 +02:00
|
|
|
{x: x for x in range(16)},
|
2019-12-05 18:51:45 +09:00
|
|
|
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",
|
|
|
|
),
|
|
|
|
]
|
2009-06-29 09:31:43 +09:00
|
|
|
|
|
|
|
for v, p in cases:
|
|
|
|
match(v, p)
|
|
|
|
|
2010-10-07 03:07:52 +09:00
|
|
|
|
2019-12-05 18:51:45 +09:00
|
|
|
def test_unicode():
|
2023-05-21 09:26:39 +02:00
|
|
|
assert unpackb(packb("foobar"), use_list=1) == "foobar"
|