3 from cStringIO import StringIO
5 from StringIO import StringIO
6 from random import randint
10 class ElementSizeTestsBase(object):
11 def assert_roundtrip(self, value, min_length=1, max_length=EBMLMaxSizeLength):
12 encoded = encode_element_size(value, min_length=min_length, max_length=max_length)
13 encoded_stream = StringIO(encoded)
14 self.assertEqual(value, read_element_size(encoded_stream, max_length=max_length)[0])
17 class ElementSizeTests(unittest.TestCase, ElementSizeTestsBase):
18 def test_undefined(self):
19 for length in xrange(1, 9):
20 self.assert_roundtrip(None, min_length=length)
22 def test_base_10(self):
23 for value in (10**exp for exp in xrange(1, 16)):
24 self.assert_roundtrip(value)
26 def test_base_2(self):
27 for value in (2**exp for exp in xrange(1, 56)):
28 self.assert_roundtrip(value)
30 def test_max_base_2(self):
31 for value in ((2**exp) - 2 for exp in xrange(1, 57)):
32 self.assert_roundtrip(value)
34 def test_random(self):
36 for value in (randint(0, maximum) for i in xrange(0, 200)):
37 self.assert_roundtrip(value)
40 class LargeElementSizeTests(unittest.TestCase, ElementSizeTestsBase): # tests values that WILL be longer than 8 bytes (EBMLMaxSizeLength)
41 def test_base_10(self):
42 for value in (10**exp for exp in xrange(17, 300)):
43 self.assert_roundtrip(value, max_length=1024)
45 def test_base_2(self):
46 for value in (2**exp for exp in xrange(56, 1024)):
47 self.assert_roundtrip(value, max_length=1024)
49 def test_max_base_2(self):
50 for value in ((2**exp) - 2 for exp in xrange(57, 1024)):
51 self.assert_roundtrip(value, max_length=1024)
53 def test_random(self):
54 for value in (randint(2**56 - 1, 2**10240) for i in xrange(0, 200)):
55 self.assert_roundtrip(value, max_length=10240)
58 # class ElementIDTests(unittest.TestCase):
59 # def assert_roundtrip(self, value, max_length=EBMLMaxIDLength):
60 # encoded = encode_element_id(value, max_length=max_length)
62 if __name__ == '__main__':