Mercurial > hgrepos > Python > apps > py-cutils
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 254:655f9e4bc6f2 | 255:d852559df523 |
|---|---|
| 1 # -*- coding: utf-8 -*- | |
| 2 r"""Unit tests for the vendored crcmod2 package. | |
| 3 | |
| 4 """ | |
| 5 | |
| 6 from __future__ import absolute_import, print_function | |
| 7 | |
| 8 import struct | |
| 9 import sys | |
| 10 import unittest | |
| 11 import zlib | |
| 12 | |
| 13 import _test_setup # noqa: F401 imported but unused | |
| 14 | |
| 15 import cutils.util.crc32 | |
| 16 | |
| 17 | |
| 18 class TestCRC32(unittest.TestCase): | |
| 19 | |
| 20 def test_empty(self): | |
| 21 c1 = cutils.util.crc32.crc32() | |
| 22 c2 = zlib.crc32(b"") | |
| 23 self.assertEqual(c1._crc, c2) | |
| 24 self.assertEqual("00000000", c1.hexdigest()) | |
| 25 self.assertEqual(b"\x00\x00\x00\x00", c1.digest()) | |
| 26 | |
| 27 def test_uint32(self): | |
| 28 c1 = cutils.util.crc32.crc32() | |
| 29 c1._crc = 0xffffffff | |
| 30 self.assertEqual("FFFFFFFF", c1.hexdigest()) | |
| 31 self.assertEqual(b"\xff\xff\xff\xff", c1.digest()) | |
| 32 | |
| 33 @unittest.skipIf(sys.version_info[0] >= 3, "Only for Python 2") | |
| 34 def test_negative_minus_one(self): | |
| 35 # Python2 yields negative numbers in zlib.crc32() | |
| 36 c1 = cutils.util.crc32.crc32() | |
| 37 c1._crc = -1 | |
| 38 self.assertEqual("FFFFFFFF", c1.hexdigest()) | |
| 39 self.assertEqual(b"\xff\xff\xff\xff", c1.digest()) | |
| 40 | |
| 41 def test_postitive_asd(self): | |
| 42 c1 = cutils.util.crc32.crc32(b"asd\n") | |
| 43 c2 = zlib.crc32(b"") | |
| 44 c2 = zlib.crc32(b"asd\n", c2) | |
| 45 self.assertEqual(c1._crc, c2) | |
| 46 self.assertEqual(355327694, c1._crc) | |
| 47 self.assertEqual("152DDECE", c1.hexdigest()) | |
| 48 self.assertEqual(b"\x15\x2d\xde\xce", c1.digest()) | |
| 49 | |
| 50 def test_negative_123456789(self): | |
| 51 c1 = cutils.util.crc32.crc32() | |
| 52 c1.update(b"123456789") | |
| 53 c2 = zlib.crc32(b"123456789") | |
| 54 self.assertEqual(c1._crc, c2) | |
| 55 self.assertEqual("CBF43926", c1.hexdigest()) | |
| 56 self.assertEqual(b"\xcb\xf4\x39\x26", c1.digest()) | |
| 57 | |
| 58 def test_copy(self): | |
| 59 c1 = cutils.util.crc32.crc32(b"123456789") | |
| 60 c2 = c1.copy() | |
| 61 self.assertEqual(c1._crc, c2._crc) | |
| 62 self.assertEqual("CBF43926", c2.hexdigest()) | |
| 63 | |
| 64 def test_copy_parts(self): | |
| 65 c1 = cutils.util.crc32.crc32(b"12345") | |
| 66 c2 = c1.copy() | |
| 67 c2.update(b"6789") | |
| 68 self.assertEqual("CBF43926", c2.hexdigest()) | |
| 69 | |
| 70 def test_equality(self): | |
| 71 c1 = cutils.util.crc32.crc32(b"123") | |
| 72 c2 = c1.copy() | |
| 73 c3 = zlib.crc32(b"123") | |
| 74 self.assertEqual(c2, c1) | |
| 75 self.assertEqual(c1, c2._crc) | |
| 76 self.assertEqual(c1, c3) | |
| 77 self.assertNotEqual(c1, None) | |
| 78 | |
| 79 def test_equality_2(self): | |
| 80 c1 = cutils.util.crc32.crc32(b"123456789") | |
| 81 c2 = c1.copy() | |
| 82 c3 = zlib.crc32(b"123456789") | |
| 83 self.assertEqual(c2, c1) | |
| 84 self.assertEqual(c1, c2._crc) | |
| 85 self.assertEqual(c1, c3) | |
| 86 self.assertNotEqual(c1, None) | |
| 87 | |
| 88 def test_inequality(self): | |
| 89 c1 = cutils.util.crc32.crc32(b"123") | |
| 90 c2 = c1.copy() | |
| 91 c1.update(b"4") | |
| 92 c3 = zlib.crc32(b"12345") | |
| 93 self.assertNotEqual(c2, c1) | |
| 94 self.assertNotEqual(c1, c2._crc) | |
| 95 self.assertNotEqual(c1, c3) | |
| 96 self.assertNotEqual(c1, None) | |
| 97 | |
| 98 def test_inequality_2(self): | |
| 99 c1 = cutils.util.crc32.crc32(b"12345678") | |
| 100 c2 = c1.copy() | |
| 101 c2.update(b"9") | |
| 102 c3 = zlib.crc32(b"1234567") | |
| 103 self.assertNotEqual(c2, c1) | |
| 104 self.assertNotEqual(c1, c2._crc) | |
| 105 self.assertNotEqual(c1, c3) | |
| 106 self.assertNotEqual(c1, None) | |
| 107 | |
| 108 def test_equality_negative_number(self): | |
| 109 c1 = cutils.util.crc32.crc32(b"123456789") | |
| 110 # Py2 yields signed ints | |
| 111 self.assertEqual(c1, -873187034) | |
| 112 # Py3 yields unsigned ints | |
| 113 self.assertEqual(c1, 3421780262) | |
| 114 | |
| 115 def test_as_uint32(self): | |
| 116 self.assertEqual(3421780262, | |
| 117 cutils.util.crc32.crc32.as_uint32(-873187034)) | |
| 118 | |
| 119 def test_struct_pack(self): | |
| 120 self.assertEqual( | |
| 121 struct.pack(">I", 3421780262), | |
| 122 struct.pack(">i", -873187034)) | |
| 123 | |
| 124 | |
| 125 if __name__ == "__main__": | |
| 126 unittest.main() |
