Compress small text messages by just restricting the alphabet. Adds bidict.
[python_utils.git] / tests / letter_compress_test.py
diff --git a/tests/letter_compress_test.py b/tests/letter_compress_test.py
new file mode 100755 (executable)
index 0000000..a466277
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+
+import random
+import math
+import unittest
+
+import bootstrap
+import letter_compress
+import unittest_utils as uu
+
+
+class TestLetterCompress(unittest.TestCase):
+
+    def test_with_random_strings(self):
+        alphabet = 'abcdefghijklmnopqrstuvwxyz .,"-'
+        for n in range(20):
+            message = ""
+            for letter in random.choices(alphabet, k=random.randrange(10, 5000)):
+                message += letter
+            mlen = len(message)
+            compressed = letter_compress.compress(message)
+            clen = len(compressed)
+            self.assertEqual(math.ceil(mlen * 5.0 / 8.0), clen)
+            decompressed = letter_compress.decompress(compressed)
+            self.assertEqual(decompressed, message, f'The bad message string was "{message}"')
+
+
+if __name__ == '__main__':
+    bootstrap.initialize(unittest.main)()