-from typing import List
from unittest import TestCase
+from hypothesis import given
+
from pyac import dumps
from pyac import loads
from pyac import NotEnoughData
from pyac import Raw
+from tests.strategies import junk_st
+
class TestFloat(TestCase):
def test_throws_when_dumps_float(self) -> None:
dumps(1.5)
self.assertEqual(str(err.exception), "no FLOAT* support")
- def test_float_loads(self) -> None:
- floats: List[bytes] = [
- b"\x10" + b"\x11" * 2,
- b"\x11" + b"\x11" * 4,
- b"\x12" + b"\x11" * 8,
- b"\x13" + b"\x11" * 16,
- b"\x14" + b"\x11" * 32,
- ]
- expecteds: List[Raw] = [
- Raw(0x10, b"\x11" * 2),
- Raw(0x11, b"\x11" * 4),
- Raw(0x12, b"\x11" * 8),
- Raw(0x13, b"\x11" * 16),
- Raw(0x14, b"\x11" * 32),
- ]
- for _float, expected in zip(floats, expecteds):
- decoded, tail = loads(_float)
- self.assertSequenceEqual(decoded, expected)
- self.assertSequenceEqual(tail, b"")
-
- def test_float_not_enough_data(self) -> None:
- floats: List[bytes] = [
- b"\x10" + b"\x11" * 1,
- b"\x11" + b"\x11" * 3,
- b"\x12" + b"\x11" * 7,
- b"\x13" + b"\x11" * 15,
- b"\x14" + b"\x11" * 31,
- ]
- for fl in floats:
- with self.assertRaises(NotEnoughData):
- loads(fl)
+ @given(junk_st)
+ def test_loads_16(self, junk: bytes) -> None:
+ decoded, tail = loads((b"\x10" + b"\x11" * 2) + junk)
+ self.assertEqual(decoded, Raw(0x10, b"\x11" * 2))
+ self.assertSequenceEqual(tail, junk)
+
+ @given(junk_st)
+ def test_loads_32(self, junk: bytes) -> None:
+ decoded, tail = loads((b"\x11" + b"\x11" * 4) + junk)
+ self.assertEqual(decoded, Raw(0x11, b"\x11" * 4))
+ self.assertSequenceEqual(tail, junk)
+
+ @given(junk_st)
+ def test_loads_64(self, junk: bytes) -> None:
+ decoded, tail = loads((b"\x12" + b"\x11" * 8) + junk)
+ self.assertEqual(decoded, Raw(0x12, b"\x11" * 8))
+ self.assertSequenceEqual(tail, junk)
+
+ @given(junk_st)
+ def test_loads_128(self, junk: bytes) -> None:
+ decoded, tail = loads((b"\x13" + b"\x11" * 16) + junk)
+ self.assertEqual(decoded, Raw(0x13, b"\x11" * 16))
+ self.assertSequenceEqual(tail, junk)
+
+ @given(junk_st)
+ def test_loads_256(self, junk: bytes) -> None:
+ decoded, tail = loads((b"\x14" + b"\x11" * 32) + junk)
+ self.assertEqual(decoded, Raw(0x14, b"\x11" * 32))
+ self.assertSequenceEqual(tail, junk)
+
+ def test_not_enough_data_16(self) -> None:
+ with self.assertRaises(NotEnoughData) as err:
+ loads(b"\x10" + b"\x11" * (2-1))
+ self.assertEqual(err.exception.n, 1+2)
+
+ def test_not_enough_data_32(self) -> None:
+ with self.assertRaises(NotEnoughData) as err:
+ loads(b"\x11" + b"\x11" * (4-1))
+ self.assertEqual(err.exception.n, 1+4)
+
+ def test_not_enough_data_64(self) -> None:
+ with self.assertRaises(NotEnoughData) as err:
+ loads(b"\x12" + b"\x11" * (8-1))
+ self.assertEqual(err.exception.n, 1+8)
+
+ def test_not_enough_data_128(self) -> None:
+ with self.assertRaises(NotEnoughData) as err:
+ loads(b"\x13" + b"\x11" * (16-1))
+ self.assertEqual(err.exception.n, 1+16)
+
+ def test_not_enough_data_256(self) -> None:
+ with self.assertRaises(NotEnoughData) as err:
+ loads(b"\x14" + b"\x11" * (32-1))
+ self.assertEqual(err.exception.n, 1+32)