test_case.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # coding: utf-8
  2. from pandas.io.msgpack import packb, unpackb
  3. def check(length, obj):
  4. v = packb(obj)
  5. assert len(v) == length, \
  6. "%r length should be %r but get %r" % (obj, length, len(v))
  7. assert unpackb(v, use_list=0) == obj
  8. def test_1():
  9. for o in [None, True, False, 0, 1, (1 << 6), (1 << 7) - 1, -1,
  10. -((1 << 5) - 1), -(1 << 5)]:
  11. check(1, o)
  12. def test_2():
  13. for o in [1 << 7, (1 << 8) - 1, -((1 << 5) + 1), -(1 << 7)]:
  14. check(2, o)
  15. def test_3():
  16. for o in [1 << 8, (1 << 16) - 1, -((1 << 7) + 1), -(1 << 15)]:
  17. check(3, o)
  18. def test_5():
  19. for o in [1 << 16, (1 << 32) - 1, -((1 << 15) + 1), -(1 << 31)]:
  20. check(5, o)
  21. def test_9():
  22. for o in [1 << 32, (1 << 64) - 1, -((1 << 31) + 1), -(1 << 63), 1.0, 0.1,
  23. -0.1, -1.0]:
  24. check(9, o)
  25. def check_raw(overhead, num):
  26. check(num + overhead, b" " * num)
  27. def test_fixraw():
  28. check_raw(1, 0)
  29. check_raw(1, (1 << 5) - 1)
  30. def test_raw16():
  31. check_raw(3, 1 << 5)
  32. check_raw(3, (1 << 16) - 1)
  33. def test_raw32():
  34. check_raw(5, 1 << 16)
  35. def check_array(overhead, num):
  36. check(num + overhead, (None, ) * num)
  37. def test_fixarray():
  38. check_array(1, 0)
  39. check_array(1, (1 << 4) - 1)
  40. def test_array16():
  41. check_array(3, 1 << 4)
  42. check_array(3, (1 << 16) - 1)
  43. def test_array32():
  44. check_array(5, (1 << 16))
  45. def match(obj, buf):
  46. assert packb(obj) == buf
  47. assert unpackb(buf, use_list=0) == obj
  48. def test_match():
  49. cases = [
  50. (None, b'\xc0'),
  51. (False, b'\xc2'),
  52. (True, b'\xc3'),
  53. (0, b'\x00'),
  54. (127, b'\x7f'),
  55. (128, b'\xcc\x80'),
  56. (256, b'\xcd\x01\x00'),
  57. (-1, b'\xff'),
  58. (-33, b'\xd0\xdf'),
  59. (-129, b'\xd1\xff\x7f'),
  60. ({1: 1}, b'\x81\x01\x01'),
  61. (1.0, b"\xcb\x3f\xf0\x00\x00\x00\x00\x00\x00"),
  62. ((), b'\x90'),
  63. (tuple(range(15)), (b"\x9f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09"
  64. b"\x0a\x0b\x0c\x0d\x0e")),
  65. (tuple(range(16)), (b"\xdc\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07"
  66. b"\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f")),
  67. ({}, b'\x80'),
  68. ({x: x for x in range(15)},
  69. (b'\x8f\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07'
  70. b'\x07\x08\x08\t\t\n\n\x0b\x0b\x0c\x0c\r\r\x0e\x0e')),
  71. ({x: x for x in range(16)},
  72. (b'\xde\x00\x10\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06'
  73. b'\x06\x07\x07\x08\x08\t\t\n\n\x0b\x0b\x0c\x0c\r\r\x0e\x0e'
  74. b'\x0f\x0f')),
  75. ]
  76. for v, p in cases:
  77. match(v, p)
  78. def test_unicode():
  79. assert unpackb(packb('foobar'), use_list=1) == b'foobar'