mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-01 00:19:07 +02:00
test: introduce VARINT (de)serialization routines
This commit is contained in:
parent
785649f397
commit
a7911ed101
@ -120,6 +120,26 @@ def deser_compact_size(f):
|
||||
return nit
|
||||
|
||||
|
||||
def ser_varint(l):
|
||||
r = b""
|
||||
while True:
|
||||
r = bytes([(l & 0x7f) | (0x80 if len(r) > 0 else 0x00)]) + r
|
||||
if l <= 0x7f:
|
||||
return r
|
||||
l = (l >> 7) - 1
|
||||
|
||||
|
||||
def deser_varint(f):
|
||||
n = 0
|
||||
while True:
|
||||
dat = f.read(1)[0]
|
||||
n = (n << 7) | (dat & 0x7f)
|
||||
if (dat & 0x80) > 0:
|
||||
n += 1
|
||||
else:
|
||||
return n
|
||||
|
||||
|
||||
def deser_string(f):
|
||||
nit = deser_compact_size(f)
|
||||
return f.read(nit)
|
||||
@ -1913,3 +1933,20 @@ class TestFrameworkScript(unittest.TestCase):
|
||||
check_addrv2("2bqghnldu6mcug4pikzprwhtjjnsyederctvci6klcwzepnjd46ikjyd.onion", CAddress.NET_TORV3)
|
||||
check_addrv2("255fhcp6ajvftnyo7bwz3an3t4a4brhopm3bamyh2iu5r3gnr2rq.b32.i2p", CAddress.NET_I2P)
|
||||
check_addrv2("fc32:17ea:e415:c3bf:9808:149d:b5a2:c9aa", CAddress.NET_CJDNS)
|
||||
|
||||
def test_varint_encode_decode(self):
|
||||
def check_varint(num, expected_encoding_hex):
|
||||
expected_encoding = bytes.fromhex(expected_encoding_hex)
|
||||
self.assertEqual(ser_varint(num), expected_encoding)
|
||||
self.assertEqual(deser_varint(BytesIO(expected_encoding)), num)
|
||||
|
||||
# test cases from serialize_tests.cpp:varint_bitpatterns
|
||||
check_varint(0, "00")
|
||||
check_varint(0x7f, "7f")
|
||||
check_varint(0x80, "8000")
|
||||
check_varint(0x1234, "a334")
|
||||
check_varint(0xffff, "82fe7f")
|
||||
check_varint(0x123456, "c7e756")
|
||||
check_varint(0x80123456, "86ffc7e756")
|
||||
check_varint(0xffffffff, "8efefefe7f")
|
||||
check_varint(0xffffffffffffffff, "80fefefefefefefefe7f")
|
||||
|
Loading…
x
Reference in New Issue
Block a user