1+ """BloomFilter unit tests."""
2+
3+ from random import random
4+ import uuid
5+ from splitio .engine .filters .bloom_filter import BloomFilter
6+
7+ class BloomFilterTests (object ):
8+ """StandardRecorderTests test cases."""
9+
10+ def test_bloom_filter_methods (self , mocker ):
11+ bloom_filter = BloomFilter ()
12+ key1 = str (uuid .uuid4 ())
13+ key2 = str (uuid .uuid4 ())
14+ bloom_filter .add (key1 )
15+
16+ assert (bloom_filter .contains (key1 ))
17+ assert (not bloom_filter .contains (key2 ))
18+
19+ bloom_filter .clear ()
20+ assert (not bloom_filter .contains (key1 ))
21+
22+ bloom_filter .add (key1 )
23+ bloom_filter .add (key2 )
24+ assert (bloom_filter .contains (key1 ))
25+ assert (bloom_filter .contains (key2 ))
26+
27+ def test_bloom_filter_error_percentage (self , mocker ):
28+ arr_storage = []
29+ total_sample = 20000
30+ error_rate = 0.01
31+ bloom_filter = BloomFilter (total_sample , error_rate )
32+
33+ for x in range (1 , total_sample ):
34+ myuuid = str (uuid .uuid4 ())
35+ bloom_filter .add (myuuid )
36+ arr_storage .append (myuuid )
37+
38+ false_positive_count = 0
39+ for x in range (1 , total_sample ):
40+ y = int (random ()* total_sample * 5 )
41+ if y > total_sample - 2 :
42+ myuuid = str (uuid .uuid4 ())
43+ if myuuid in arr_storage :
44+ # False Negative
45+ assert (bloom_filter .contains (myuuid ))
46+ else :
47+ if bloom_filter .contains (myuuid ):
48+ # False Positive
49+ false_positive_count = false_positive_count + 1
50+ else :
51+ myuuid = arr_storage [y ]
52+ assert (bloom_filter .contains (myuuid ))
53+ # False Negative
54+
55+ assert (false_positive_count / total_sample <= error_rate )
0 commit comments