]> Cypherpunks repositories - keks.git/commitdiff
Split int-related combined tests
authorSergey Matveev <stargrave@stargrave.org>
Sat, 30 Nov 2024 17:49:23 +0000 (20:49 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 30 Nov 2024 19:38:56 +0000 (22:38 +0300)
pyac/tests/test_int.py

index 1a6396d247fcf97449d9ce5bc57c59cacdf9934939d965065308e30d82851c7d..93f047d5ead06cd4e8664bbab39d6bb87d95b5e8afc03045b2875e763e767073 100644 (file)
@@ -1,47 +1,87 @@
 from unittest import TestCase
 
+from hypothesis import given
+
 from pyac import DecodeError
 from pyac import dumps
 from pyac import loads
 from pyac import NotEnoughData
+from tests.strategies import junk_st
 
 
 class TestInt(TestCase):
-    def test_positive(self) -> None:
-        ints: list[int] = [1, 123, 1 << 64, 1 << 130]
-        expected: list[bytes] = [
-            b"\x0c\x81\x01",
-            b"\x0c\x81\x7b",
-            b"\x0c\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00",
-            b"\x0c\x91\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
-        ]
-        for integer, encoded in zip(ints, expected):
-            self.assertSequenceEqual(dumps(integer), encoded)
-            decoded, tail = loads(encoded)
-            self.assertEqual(decoded, integer)
-            self.assertSequenceEqual(tail, b"")
-
-    def test_negative(self) -> None:
-        ints: list[int] = [-1, -123, -(1 << 64), -(1 << 130)]
-        expected: list[bytes] = [
-            b"\x0d\x80",
-            b"\x0d\x81\x7a",
-            b"\x0d\x88\xff\xff\xff\xff\xff\xff\xff\xff",
-            b"\x0d\x91\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
-        ]
-        for integer, encoded in zip(ints, expected):
-            self.assertSequenceEqual(dumps(integer), encoded)
-            decoded, tail = loads(encoded)
-            self.assertEqual(decoded, integer)
-            self.assertSequenceEqual(tail, b"")
-
-    def test_zero(self) -> None:
+    @given(junk_st)
+    def test_0(self, junk: bytes) -> None:
         encoded: bytes = dumps(0)
         self.assertSequenceEqual(encoded, b"\x0c\x80")
         decoded, tail = loads(encoded)
         self.assertEqual(decoded, 0)
         self.assertSequenceEqual(tail, b"")
 
+    @given(junk_st)
+    def test_1(self, junk: bytes) -> None:
+        encoded: bytes = dumps(1)
+        self.assertSequenceEqual(encoded, b"\x0c\x81\x01")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, 1)
+        self.assertSequenceEqual(tail, junk)
+
+    @given(junk_st)
+    def test_123(self, junk: bytes) -> None:
+        encoded: bytes = dumps(123)
+        self.assertSequenceEqual(encoded, b"\x0c\x81\x7b")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, 123)
+        self.assertSequenceEqual(tail, junk)
+
+    @given(junk_st)
+    def test_1s64(self, junk: bytes) -> None:
+        encoded: bytes = dumps(1 << 64)
+        self.assertSequenceEqual(encoded, b"\x0c\x89\x01\x00\x00\x00\x00\x00\x00\x00\x00")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, 1 << 64)
+        self.assertSequenceEqual(tail, junk)
+
+    @given(junk_st)
+    def test_1s130(self, junk: bytes) -> None:
+        encoded: bytes = dumps(1 << 130)
+        self.assertSequenceEqual(encoded, b"\x0c\x91\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, 1 << 130)
+        self.assertSequenceEqual(tail, junk)
+
+    @given(junk_st)
+    def test_m1(self, junk: bytes) -> None:
+        encoded: bytes = dumps(-1)
+        self.assertSequenceEqual(encoded, b"\x0d\x80")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, -1)
+        self.assertSequenceEqual(tail, junk)
+
+    @given(junk_st)
+    def test_m123(self, junk: bytes) -> None:
+        encoded: bytes = dumps(-123)
+        self.assertSequenceEqual(encoded, b"\x0d\x81\x7a")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, -123)
+        self.assertSequenceEqual(tail, junk)
+
+    @given(junk_st)
+    def test_m1s64(self, junk: bytes) -> None:
+        encoded: bytes = dumps(-(1 << 64))
+        self.assertSequenceEqual(encoded, b"\x0d\x88\xff\xff\xff\xff\xff\xff\xff\xff")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, -(1 << 64))
+        self.assertSequenceEqual(tail, junk)
+
+    @given(junk_st)
+    def test_m1s130(self, junk: bytes) -> None:
+        encoded: bytes = dumps(-(1 << 130))
+        self.assertSequenceEqual(encoded, b"\x0d\x91\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, -(1 << 130))
+        self.assertSequenceEqual(tail, junk)
+
     def test_decode_not_enough_data(self) -> None:
         encoded: bytes = b"\x0c\x81"
         with self.assertRaises(NotEnoughData) as err: