Esempio n. 1
0
    def test_union_nests(self):
        e1 = element(b"element 1")
        e2 = element(b"element 2")
        e3 = element(b"element 3")

        self.assertEqual(union(e1, e2, e3),
                         union(e1,
                               union(e2, e3)))
Esempio n. 2
0
    def test_intersection_unions(self):
        e1 = element(b"element 1")
        e2 = element(b"element 2")
        e3 = element(b"element 3")

        self.assertEqual(intersection(union(e1, e2, e3),
                                      union(e1, e2)),
                         union(e1, e2))
Esempio n. 3
0
    def test_false_positive_rate(self, item_count=1000, bloom_size=_DEFAULT_FILTER_BITS, bloom_hashes=_DEFAULT_HASH_RUNS):
        bloom = reduce(union,
                       map(lambda c: element(c.to_bytes(c.bit_length(), byteorder='big'),
                                             bloom_size,
                                             bloom_hashes),
                           range(item_count)))
        false_positive_probability = pow(1 - exp(-bloom_hashes / (bloom_size / item_count)), bloom_hashes)

        false_positives = 0
        for c in range(item_count * 2):
            new_c = c + item_count
            e = element(new_c.to_bytes(new_c.bit_length(), byteorder='big'),
                        bloom_size,
                        bloom_hashes)
            if intersection(bloom, e) == e:
                false_positives += 1
        false_positive_ratio = false_positives / (item_count * 2)
        max_deviation = false_positive_probability * 0.075
        self.assertAlmostEqual(false_positive_ratio, false_positive_probability, delta=max_deviation)
Esempio n. 4
0
 def test_len(self):
     bloom = 0b0
     for c in range(1, 1001):
         bloom = union(bloom, element(b"element " + str(c).encode()))
         with self.subTest(c=c):
             self.assertAlmostEqual(bf_len(bloom), c, delta=ceil(c * 0.025))
Esempio n. 5
0
    def test_intersection_duplicates(self):
        e1 = element(b"element 1")

        self.assertEqual(intersection(e1, e1),
                         e1)
Esempio n. 6
0
    def test_element_is_int(self):
        e = element(b"element")

        self.assertTrue(type(e) is int)
Esempio n. 7
0
    def test_element_is_deterministic(self):
        e1 = element(b"element")
        e2 = element(b"element")

        self.assertEqual(e1, e2)