summaryrefslogtreecommitdiff
path: root/tests/common/pearson.py
blob: bb4cf42a9b878e1872336bbd634f1dfcd3f88685 (plain)
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))