1
1
import unittest
2
+ import random
3
+ import string
2
4
3
5
import pybloomer
4
6
5
7
class TestBloomFilter (unittest .TestCase ):
6
8
def test_basic (self ):
7
- filter = pybloomer .BloomFilter (
8
- max_false_positive_rate = 0.01 ,
9
- num_hashes = 4 ,
10
- layer_size = 32000000 ,
11
- )
9
+ filter = pybloomer .BloomFilter ()
12
10
13
11
self .assertEqual (filter .false_positive_rate , 0 )
14
12
@@ -26,12 +24,10 @@ def test_basic(self):
26
24
self .assertTrue (filter .exists ('bar' ))
27
25
self .assertGreater (filter .false_positive_rate , 0 )
28
26
27
+ self .assertFalse (filter .exists ('baz' ))
28
+
29
29
def test_exists_or_insert (self ):
30
- filter = pybloomer .BloomFilter (
31
- max_false_positive_rate = 0.01 ,
32
- num_hashes = 4 ,
33
- layer_size = 32000000 ,
34
- )
30
+ filter = pybloomer .BloomFilter ()
35
31
36
32
self .assertFalse (filter .exists_or_insert ('foo' ))
37
33
@@ -43,4 +39,30 @@ def test_exists_or_insert(self):
43
39
44
40
self .assertFalse (filter .exists_or_insert ('baz' ))
45
41
46
- self .assertTrue (filter .exists_or_insert ('baz' ))
42
+ self .assertTrue (filter .exists_or_insert ('baz' ))
43
+
44
+ def test_autoscaling (self ):
45
+ random .seed (0 )
46
+
47
+ filter = pybloomer .BloomFilter (
48
+ max_false_positive_rate = 0.01 ,
49
+ num_hashes = 4 ,
50
+ layer_size = 320000 ,
51
+ )
52
+
53
+ self .assertEqual (filter .num_layers , 1 )
54
+
55
+ filter .insert ('foo' )
56
+
57
+ for i in range (0 , 100000 ):
58
+ filter .insert ('' .join (random .choice (string .ascii_letters ) for j in range (20 )))
59
+
60
+ filter .insert ('bar' )
61
+
62
+ self .assertEqual (filter .num_layers , 3 )
63
+ self .assertLessEqual (filter .false_positive_rate , 0.01 )
64
+ self .assertLessEqual (filter .utilization , 1.0 )
65
+
66
+ self .assertTrue (filter .exists ('foo' ))
67
+ self .assertTrue (filter .exists ('bar' ))
68
+ self .assertFalse (filter .exists ('father' ))
0 commit comments