]> Cypherpunks repositories - keks.git/commitdiff
Combine encode/decode tests
authorSergey Matveev <stargrave@stargrave.org>
Sat, 30 Nov 2024 18:35:15 +0000 (21:35 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 30 Nov 2024 19:38:56 +0000 (22:38 +0300)
Because output data of the encode test is the input for the decode one.
Actually tests separation could be useful to determine where we are
failing, but verbose assertEqual failed message will show exactly where
we failed (either during encode or decode).

pyac/tests/test_list.py
pyac/tests/test_map.py

index 20ae090e568d1880d133944e0ffee2ffdd233de06bbe41ddf9a37816e6a213af..820e974613464a172318bdfa355346f4c91534b73cbf85020c2075c905188a06 100644 (file)
@@ -8,35 +8,31 @@ from pyac import dumps
 from pyac import loads
 from pyac import NotEnoughData
 from tests.strategies import any_st
+from tests.strategies import everything_st
 from tests.strategies import junk_st
 
 
 class TestList(TestCase):
-    def test_encode_empty(self) -> None:
+    @given(junk_st)
+    def test_empty(self, junk: bytes) -> None:
         encoded = dumps([])
         self.assertSequenceEqual(encoded, b"\x08\x00")
+        decoded, tail = loads(encoded + junk)
+        self.assertEqual(decoded, [])
+        self.assertSequenceEqual(tail, junk)
 
-    @given(lists(any_st, max_size=4))
-    def test_encode_non_empty(self, test_list: List) -> None:
+    @given(lists(everything_st, max_size=4), junk_st)
+    def test_symmetric(self, test_list: List, junk: bytes) -> None:
         encoded = dumps(test_list)
         self.assertSequenceEqual(
-            encoded, b"\x08" + b"".join(dumps(i) for i in test_list) + b"\x00"
+            encoded,
+            b"\x08" + b"".join(dumps(i) for i in test_list) + b"\x00",
         )
-
-    def test_decode_empty(self) -> None:
-        encoded = b"\x08\x00"
-        decoded, tail = loads(encoded)
-        self.assertEqual(decoded, [])
-        self.assertSequenceEqual(tail, b"")
-
-    @given(lists(any_st, max_size=4), junk_st)
-    def test_decode_non_empty(self, test_list: List, junk: bytes) -> None:
-        encoded = b"\x08" + b"".join(dumps(i) for i in test_list) + b"\x00" + junk
-        decoded, tail = loads(encoded)
+        decoded, tail = loads(encoded + junk)
         self.assertEqual(decoded, test_list)
         self.assertSequenceEqual(tail, junk)
 
-    @given(lists(any_st, max_size=4))
+    @given(lists(any_st, max_size=2))
     def test_no_eoc(self, test_list: List) -> None:
         encoded = dumps(test_list)[:-1]
         with self.assertRaises(NotEnoughData) as err:
index fd7692ad03d8a00806f689da464fd37b6fa736274052164949779c99ba9ac2aa..f7d482e15dbe09bc3d48d9d636d37d8480f9e373260a221b4c7517e177860a5c 100644 (file)
@@ -1,3 +1,5 @@
+from typing import Any
+from typing import Mapping
 from unittest import TestCase
 
 from hypothesis import given
@@ -13,8 +15,8 @@ from tests.strategies import mapkey_st
 
 
 class TestMap(TestCase):
-    @given(dictionaries(keys=mapkey_st, values=any_st, max_size=4))
-    def test_encode(self, test_map):
+    @given(dictionaries(keys=mapkey_st, values=any_st, max_size=4), junk_st)
+    def test_symmetric(self, test_map: Mapping[str, Any], junk: bytes):
         encoded = dumps(test_map)
         expected = (
             b"\x09" +
@@ -27,21 +29,7 @@ class TestMap(TestCase):
             b"\x00"
         )
         self.assertSequenceEqual(encoded, expected)
-
-    @given(dictionaries(keys=mapkey_st, values=any_st, max_size=4), junk_st)
-    def test_decode(self, test_map, junk):
-        encoded = (
-            b"\x09" +
-            b"".join(
-                [
-                    b"".join([dumps(key), dumps(test_map[key])])
-                    for key in sorted(test_map.keys(), key=lambda x: [len(x), x])
-                ]
-            ) +
-            b"\x00" +
-            junk
-        )
-        decoded, tail = loads(encoded)
+        decoded, tail = loads(encoded + junk)
         self.assertEqual(decoded, test_map)
         self.assertSequenceEqual(tail, junk)