2 from __future__ import absolute_import
4 from itertools import combinations_with_replacement
11 def encode_and_decode_vuint(x):
13 vint.write_vuint(f, x)
14 return vint.read_vuint(BytesIO(f.getvalue()))
18 for x in (0, 1, 42, 128, 10**16, 10**100):
19 WVPASSEQ(encode_and_decode_vuint(x), x)
20 WVEXCEPT(Exception, vint.write_vuint, BytesIO(), -1)
21 WVEXCEPT(EOFError, vint.read_vuint, BytesIO())
24 def encode_and_decode_vint(x):
27 return vint.read_vint(BytesIO(f.getvalue()))
31 values = (0, 1, 42, 64, 10**16, 10**100)
33 WVPASSEQ(encode_and_decode_vint(x), x)
34 for x in [-x for x in values]:
35 WVPASSEQ(encode_and_decode_vint(x), x)
36 WVEXCEPT(EOFError, vint.read_vint, BytesIO())
37 WVEXCEPT(EOFError, vint.read_vint, BytesIO(b"\x80\x80"))
40 def encode_and_decode_bvec(x):
43 return vint.read_bvec(BytesIO(f.getvalue()))
47 values = (b'', b'x', b'foo', b'\0', b'\0foo', b'foo\0bar\0')
49 WVPASSEQ(encode_and_decode_bvec(x), x)
50 WVEXCEPT(EOFError, vint.read_bvec, BytesIO())
52 for x in (b'foo', b'bar', b'baz', b'bax'):
53 vint.write_bvec(outf, x)
54 inf = BytesIO(outf.getvalue())
55 WVPASSEQ(vint.read_bvec(inf), b'foo')
56 WVPASSEQ(vint.read_bvec(inf), b'bar')
58 WVPASSEQ(vint.read_bvec(inf), b'bax')
61 def pack_and_unpack(types, *values):
62 data = vint.pack(types, *values)
63 return vint.unpack(types, data)
66 def test_pack_and_unpack():
67 candidates = (('s', b''),
79 WVPASSEQ(pack_and_unpack(''), [])
80 for f, v in candidates:
81 WVPASSEQ(pack_and_unpack(f, v), [v])
82 for (f1, v1), (f2, v2) in combinations_with_replacement(candidates, r=2):
83 WVPASSEQ(pack_and_unpack(f1 + f2, v1, v2), [v1, v2])
84 WVEXCEPT(Exception, vint.pack, 's')
85 WVEXCEPT(Exception, vint.pack, 's', 'foo', 'bar')
86 WVEXCEPT(Exception, vint.pack, 'x', 1)
87 WVEXCEPT(Exception, vint.unpack, 's', '')
88 WVEXCEPT(Exception, vint.unpack, 'x', '')