1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
from chrysacase import ChrysalideTestCase
from pychrysalide.common import pearson_permutations, pearson
class TestPearsonHash(ChrysalideTestCase):
"""TestCase for common Pearson hash.*"""
def testPearsonDefaultPermutations(self):
"""Check the default permutations for Pearson hashing."""
table = pearson_permutations()
self.assertEqual(256, len(table))
for i in range(256):
self.assertTrue(i in table)
def testPearsonPefectHashing(self):
"""Compute Pearson pefect hashing."""
perfect_table = bytes([
39, 159, 180, 252, 71, 6, 13, 164, 232, 35, 226, 155, 98, 120, 154, 69,
157, 24, 137, 29, 147, 78, 121, 85, 112, 8, 248, 130, 55, 117, 190, 160,
176, 131, 228, 64, 211, 106, 38, 27, 140, 30, 88, 210, 227, 104, 84, 77,
75, 107, 169, 138, 195, 184, 70, 90, 61, 166, 7, 244, 165, 108, 219, 51,
9, 139, 209, 40, 31, 202, 58, 179, 116, 33, 207, 146, 76, 60, 242, 124,
254, 197, 80, 167, 153, 145, 129, 233, 132, 48, 246, 86, 156, 177, 36, 187,
45, 1, 96, 18, 19, 62, 185, 234, 99, 16, 218, 95, 128, 224, 123, 253,
42, 109, 4, 247, 72, 5, 151, 136, 0, 152, 148, 127, 204, 133, 17, 14,
182, 217, 54, 199, 119, 174, 82, 57, 215, 41, 114, 208, 206, 110, 239, 23,
189, 15, 3, 22, 188, 79, 113, 172, 28, 2, 222, 21, 251, 225, 237, 105,
102, 32, 56, 181, 126, 83, 230, 53, 158, 52, 59, 213, 118, 100, 67, 142,
220, 170, 144, 115, 205, 26, 125, 168, 249, 66, 175, 97, 255, 92, 229, 91,
214, 236, 178, 243, 46, 44, 201, 250, 135, 186, 150, 221, 163, 216, 162, 43,
11, 101, 34, 37, 194, 25, 50, 12, 87, 198, 173, 240, 193, 171, 143, 231,
111, 141, 191, 103, 74, 245, 223, 20, 161, 235, 122, 63, 89, 149, 73, 238,
134, 68, 93, 183, 241, 81, 196, 49, 192, 65, 212, 94, 203, 10, 200, 47
])
perfect_words = [
'a', 'and', 'are', 'as', 'at', 'be', 'but', 'by',
'for', 'from', 'had', 'have', 'he', 'her', 'his', 'i',
'in', 'is', 'it', 'not', 'of', 'on', 'or', 'that',
'the', 'this', 'to', 'was', 'which', 'with', 'you'
]
for i in range(len(perfect_words)):
self.assertEqual(i + 1, pearson(perfect_words[i], perfect_table))
|