Mercurial > hgrepos > Python > apps > py-cutils
diff tests/test_crc32.py @ 255:d852559df523
Wrap zlib.crc32 into a hashlib-compatible interface
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 15 Feb 2025 16:36:05 +0100 |
| parents | |
| children | 1181d8cb4846 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_crc32.py Sat Feb 15 16:36:05 2025 +0100 @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +r"""Unit tests for the vendored crcmod2 package. + +""" + +from __future__ import absolute_import, print_function + +import struct +import sys +import unittest +import zlib + +import _test_setup # noqa: F401 imported but unused + +import cutils.util.crc32 + + +class TestCRC32(unittest.TestCase): + + def test_empty(self): + c1 = cutils.util.crc32.crc32() + c2 = zlib.crc32(b"") + self.assertEqual(c1._crc, c2) + self.assertEqual("00000000", c1.hexdigest()) + self.assertEqual(b"\x00\x00\x00\x00", c1.digest()) + + def test_uint32(self): + c1 = cutils.util.crc32.crc32() + c1._crc = 0xffffffff + self.assertEqual("FFFFFFFF", c1.hexdigest()) + self.assertEqual(b"\xff\xff\xff\xff", c1.digest()) + + @unittest.skipIf(sys.version_info[0] >= 3, "Only for Python 2") + def test_negative_minus_one(self): + # Python2 yields negative numbers in zlib.crc32() + c1 = cutils.util.crc32.crc32() + c1._crc = -1 + self.assertEqual("FFFFFFFF", c1.hexdigest()) + self.assertEqual(b"\xff\xff\xff\xff", c1.digest()) + + def test_postitive_asd(self): + c1 = cutils.util.crc32.crc32(b"asd\n") + c2 = zlib.crc32(b"") + c2 = zlib.crc32(b"asd\n", c2) + self.assertEqual(c1._crc, c2) + self.assertEqual(355327694, c1._crc) + self.assertEqual("152DDECE", c1.hexdigest()) + self.assertEqual(b"\x15\x2d\xde\xce", c1.digest()) + + def test_negative_123456789(self): + c1 = cutils.util.crc32.crc32() + c1.update(b"123456789") + c2 = zlib.crc32(b"123456789") + self.assertEqual(c1._crc, c2) + self.assertEqual("CBF43926", c1.hexdigest()) + self.assertEqual(b"\xcb\xf4\x39\x26", c1.digest()) + + def test_copy(self): + c1 = cutils.util.crc32.crc32(b"123456789") + c2 = c1.copy() + self.assertEqual(c1._crc, c2._crc) + self.assertEqual("CBF43926", c2.hexdigest()) + + def test_copy_parts(self): + c1 = cutils.util.crc32.crc32(b"12345") + c2 = c1.copy() + c2.update(b"6789") + self.assertEqual("CBF43926", c2.hexdigest()) + + def test_equality(self): + c1 = cutils.util.crc32.crc32(b"123") + c2 = c1.copy() + c3 = zlib.crc32(b"123") + self.assertEqual(c2, c1) + self.assertEqual(c1, c2._crc) + self.assertEqual(c1, c3) + self.assertNotEqual(c1, None) + + def test_equality_2(self): + c1 = cutils.util.crc32.crc32(b"123456789") + c2 = c1.copy() + c3 = zlib.crc32(b"123456789") + self.assertEqual(c2, c1) + self.assertEqual(c1, c2._crc) + self.assertEqual(c1, c3) + self.assertNotEqual(c1, None) + + def test_inequality(self): + c1 = cutils.util.crc32.crc32(b"123") + c2 = c1.copy() + c1.update(b"4") + c3 = zlib.crc32(b"12345") + self.assertNotEqual(c2, c1) + self.assertNotEqual(c1, c2._crc) + self.assertNotEqual(c1, c3) + self.assertNotEqual(c1, None) + + def test_inequality_2(self): + c1 = cutils.util.crc32.crc32(b"12345678") + c2 = c1.copy() + c2.update(b"9") + c3 = zlib.crc32(b"1234567") + self.assertNotEqual(c2, c1) + self.assertNotEqual(c1, c2._crc) + self.assertNotEqual(c1, c3) + self.assertNotEqual(c1, None) + + def test_equality_negative_number(self): + c1 = cutils.util.crc32.crc32(b"123456789") + # Py2 yields signed ints + self.assertEqual(c1, -873187034) + # Py3 yields unsigned ints + self.assertEqual(c1, 3421780262) + + def test_as_uint32(self): + self.assertEqual(3421780262, + cutils.util.crc32.crc32.as_uint32(-873187034)) + + def test_struct_pack(self): + self.assertEqual( + struct.pack(">I", 3421780262), + struct.pack(">i", -873187034)) + + +if __name__ == "__main__": + unittest.main()
