-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBloomFilterTest.sc
More file actions
37 lines (26 loc) · 1.02 KB
/
BloomFilterTest.sc
File metadata and controls
37 lines (26 loc) · 1.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// scala-cli run --server=false BloomFilterTest.sc
// BloomFilterTest.sc
import scala.util.hashing.MurmurHash3
case class RitualItem(name: String, isClean: Boolean)
class LeviticalValidator(size: Int) {
private val cleanRegistry = new Array[Boolean](size)
private def getHashes(itemName: String): Seq[Int] = {
Seq(
Math.abs(MurmurHash3.stringHash(itemName, 1) % size),
Math.abs(MurmurHash3.stringHash(itemName, 2) % size)
)
}
def register(name: String): Unit =
getHashes(name).foreach(cleanRegistry(_) = true)
def isClean(name: String): Boolean =
getHashes(name).forall(cleanRegistry(_))
}
// Action Section - We add println here to see the results
val tabernacle = new LeviticalValidator(64)
println("--- Levitical Audit Starting ---")
tabernacle.register("Lamb")
println(s"Is Lamb clean? ${tabernacle.isClean("Lamb")}")
tabernacle.register("Ox")
println(s"Is Ox clean? ${tabernacle.isClean("Ox")}")
println(s"Is Swine clean? ${tabernacle.isClean("Swine")}")
println("--- Audit Complete ---")