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()