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