]> Sergey Matveev's repositories - btrtrc.git/blob - internal/cmd/bloom-false-positives/main.go
Add some tools for analysing bloom filter use
[btrtrc.git] / internal / cmd / bloom-false-positives / main.go
1 package main
2
3 import (
4         "bufio"
5         "flag"
6         "fmt"
7         "github.com/willf/bloom"
8         "os"
9 )
10
11 func main() {
12         m := flag.Uint("m", 0, "")
13         k := flag.Uint("k", 0, "")
14         flag.Parse()
15         filter := bloom.New(*m, *k)
16         scanner := bufio.NewScanner(os.Stdin)
17         n := 0
18         collisions := 0
19         for scanner.Scan() {
20                 if filter.TestAndAdd(scanner.Bytes()) {
21                         collisions++
22                 }
23                 n++
24         }
25         if err := scanner.Err(); err != nil {
26                 fmt.Fprintf(os.Stderr, "error reading stdin: %s", err)
27                 os.Exit(1)
28         }
29         fmt.Printf("collisions %d/%d (%f)\n", collisions, n, float64(collisions)/float64(n)*100)
30 }