construct: Add Construct for variable-length int 'GreedyInteger'

We have a number of integers with variable-length encoding, so
add a Construct for this.  Naming inspired by GreedyBytes.

Related to https://github.com/construct/construct/issues/962

Change-Id: Ic6049b74ea3705fda24855f34b4a1d5f2c9327f7
This commit is contained in:
Harald Welte
2022-02-11 18:05:48 +01:00
parent e8d177d88f
commit d0519e0c37
2 changed files with 71 additions and 1 deletions

26
tests/test_construct.py Normal file
View File

@@ -0,0 +1,26 @@
#!/usr/bin/env python3
import unittest
from pySim.construct import GreedyInteger
tests = [
( b'\x80', 0x80 ),
( b'\x80\x01', 0x8001 ),
( b'\x80\x00\x01', 0x800001 ),
( b'\x80\x23\x42\x01', 0x80234201 ),
]
class TestGreedyInt(unittest.TestCase):
def test_GreedyInt_decoder(self):
gi = GreedyInteger()
for t in tests:
self.assertEqual(gi.parse(t[0]), t[1])
def test_GreedyInt_encoder(self):
gi = GreedyInteger()
for t in tests:
self.assertEqual(t[0], gi.build(t[1]))
pass
if __name__ == "__main__":
unittest.main()