--- /dev/null
+package main
+
+import (
+ "flag"
+ "fmt"
+ "github.com/willf/bloom"
+)
+
+func main() {
+ n := flag.Int("n", 0, "expected number of items")
+ falsePositiveRate := flag.Float64("fpr", 0, "false positive rate")
+ flag.Parse()
+ filter := bloom.NewWithEstimates(uint(*n), *falsePositiveRate)
+ fmt.Printf("m: %d, k: %d\n", filter.Cap(), filter.K())
+}
--- /dev/null
+package main
+
+import (
+ "bufio"
+ "flag"
+ "fmt"
+ "github.com/willf/bloom"
+ "os"
+)
+
+func main() {
+ m := flag.Uint("m", 0, "")
+ k := flag.Uint("k", 0, "")
+ flag.Parse()
+ filter := bloom.New(*m, *k)
+ scanner := bufio.NewScanner(os.Stdin)
+ n := 0
+ collisions := 0
+ for scanner.Scan() {
+ if filter.TestAndAdd(scanner.Bytes()) {
+ collisions++
+ }
+ n++
+ }
+ if err := scanner.Err(); err != nil {
+ fmt.Fprintf(os.Stderr, "error reading stdin: %s", err)
+ os.Exit(1)
+ }
+ fmt.Printf("collisions %d/%d (%f)\n", collisions, n, float64(collisions)/float64(n)*100)
+}