bloom_fit 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,152 +0,0 @@
1
- require "helper"
2
-
3
- describe BloomFit do
4
- it "should clear" do
5
- bf = BloomFit.new(:size => 100, :hashes => 2, :bucket => 3, :raise => false)
6
- bf.insert("test")
7
- expect(bf.include?("test")).to be true
8
- bf.clear
9
- expect(bf.include?("test")).to be false
10
- end
11
-
12
- it "should merge" do
13
- bf1 = BloomFit.new(:size => 100, :hashes => 2, :bucket => 3, :raise => false)
14
- bf2 = BloomFit.new(:size => 100, :hashes => 2, :bucket => 3, :raise => false)
15
- bf2.insert("test")
16
- expect(bf1.include?("test")).to be false
17
- bf1.merge!(bf2)
18
- expect(bf1.include?("test")).to be true
19
- expect(bf2.include?("test")).to be true
20
- end
21
-
22
- context "behave like a bloom filter" do
23
- it "should test set membership" do
24
- bf = BloomFit.new(:size => 100, :hashes => 2, :bucket => 3, :raise => false)
25
- bf.insert("test")
26
- bf.insert("test1")
27
-
28
- expect(bf.include?("test")).to be true
29
- expect(bf.include?("abcd")).to be false
30
- expect(bf.include?("test", "test1")).to be true
31
- end
32
-
33
- it "should work with any object's to_s" do
34
- subject.insert(:test)
35
- subject.insert(:test1)
36
- subject.insert(12345)
37
-
38
- expect(subject.include?("test")).to be true
39
- expect(subject.include?("abcd")).to be false
40
- expect(subject.include?("test", "test1", '12345')).to be true
41
- end
42
-
43
- it "should return the number of bits set to 1" do
44
- bf = BloomFit.new(:hashes => 4)
45
- bf.insert("test")
46
- expect(bf.set_bits).to be == 4
47
- bf.delete("test")
48
- expect(bf.set_bits).to be == 0
49
-
50
- bf = BloomFit.new(:hashes => 1)
51
- bf.insert("test")
52
- expect(bf.set_bits).to be == 1
53
- end
54
-
55
- it "should return intersection with other filter" do
56
- bf1 = BloomFit.new
57
- bf1.insert("test")
58
- bf1.insert("test1")
59
-
60
- bf2 = BloomFit.new
61
- bf2.insert("test")
62
- bf2.insert("test2")
63
-
64
- bf3 = bf1 & bf2
65
- expect(bf3.include?("test")).to be true
66
- expect(bf3.include?("test1")).to be false
67
- expect(bf3.include?("test2")).to be false
68
- end
69
-
70
- it "should raise an exception when intersection is to be computed for incompatible filters" do
71
- bf1 = BloomFit.new(:size => 10)
72
- bf1.insert("test")
73
-
74
- bf2 = BloomFit.new(:size => 20)
75
- bf2.insert("test")
76
-
77
- expect { bf1 & bf2 }.to raise_error(BloomFit::ConfigurationMismatch)
78
- end
79
-
80
- it "should return union with other filter" do
81
- bf1 = BloomFit.new
82
- bf1.insert("test")
83
- bf1.insert("test1")
84
-
85
- bf2 = BloomFit.new
86
- bf2.insert("test")
87
- bf2.insert("test2")
88
-
89
- bf3 = bf1 | bf2
90
- expect(bf3.include?("test")).to be true
91
- expect(bf3.include?("test1")).to be true
92
- expect(bf3.include?("test2")).to be true
93
- end
94
-
95
- it "should raise an exception when union is to be computed for incompatible filters" do
96
- bf1 = BloomFit.new(:size => 10)
97
- bf1.insert("test")
98
-
99
- bf2 = BloomFit.new(:size => 20)
100
- bf2.insert("test")
101
-
102
- expect {bf1 | bf2}.to raise_error(BloomFit::ConfigurationMismatch)
103
- end
104
-
105
- it "should output current stats" do
106
- subject.insert('test')
107
- expect { subject.stats }.not_to raise_error
108
- end
109
- end
110
-
111
- context "behave like counting bloom filter" do
112
- it "should delete / decrement keys" do
113
- subject.insert("test")
114
- expect(subject.include?("test")).to be true
115
-
116
- subject.delete("test")
117
- expect(subject.include?("test")).to be false
118
- end
119
- end
120
-
121
- context "serialize" do
122
- after(:each) { File.unlink('bf.out') }
123
-
124
- it "should marshall" do
125
- bf = BloomFit.new
126
- expect { bf.save('bf.out') }.not_to raise_error
127
- end
128
-
129
- it "should load from marshalled" do
130
- subject.insert('foo')
131
- subject.insert('bar')
132
- subject.save('bf.out')
133
-
134
- bf2 = BloomFit.load('bf.out')
135
- expect(bf2.include?('foo')).to be true
136
- expect(bf2.include?('bar')).to be true
137
- expect(bf2.include?('baz')).to be false
138
-
139
- expect(subject.send(:same_parameters?, bf2)).to be true
140
- end
141
-
142
- it "should serialize to a file size proporational its bucket size" do
143
- fs_size = 0
144
- 8.times do |i|
145
- bf = BloomFit.new(size: 10_000, bucket: i+1)
146
- bf.save('bf.out')
147
- prev_size, fs_size = fs_size, File.size('bf.out')
148
- expect(prev_size).to be < fs_size
149
- end
150
- end
151
- end
152
- end
data/spec/helper.rb DELETED
@@ -1,2 +0,0 @@
1
- require "bundler/setup"
2
- require "bloom_fit"