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.
- checksums.yaml +4 -4
- data/README.md +17 -14
- data/ext/cbloomfilter/cbloomfilter.c +104 -194
- data/ext/cbloomfilter/extconf.rb +0 -1
- data/lib/bloom_fit/configuration_mismatch.rb +4 -0
- data/lib/bloom_fit/version.rb +1 -1
- data/lib/bloom_fit.rb +96 -65
- data/lib/cbloomfilter.bundle +0 -0
- data/test/bloom_fit_test.rb +344 -0
- data/test/test_helper.rb +6 -0
- metadata +12 -69
- data/Rakefile +0 -12
- data/spec/bloom_fit_spec.rb +0 -152
- data/spec/helper.rb +0 -2
data/spec/bloom_fit_spec.rb
DELETED
|
@@ -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