7 "github.com/mjl-/mox/mlog"
10func TestBloom(t *testing.T) {
11 if err := BloomValid(3, 10); err == nil {
12 t.Fatalf("missing error for invalid bloom filter size")
15 log := mlog.New("junk", nil)
16 _, err := NewBloom(log, make([]byte, 3), 10)
18 t.Fatalf("missing error for invalid bloom filter size")
21 b, err := NewBloom(log, make([]byte, 256), 5)
23 t.Fatalf("newbloom: %s", err)
26 absent := func(v string) {
29 t.Fatalf("should be absent: %q", v)
33 present := func(v string) {
36 t.Fatalf("should be present: %q", v)
42 t.Fatalf("bloom filter already modified?")
48 for i := 'a'; i <= 'z'; i++ {
49 words = append(words, fmt.Sprintf("%c", i))
51 for _, w := range words {
56 for _, w := range words {
60 t.Fatalf("bloom filter was not modified?")
63 //log.Infof("ones: %d, m %d", b.Ones(), len(b.Bytes())*8)
66func TestBits(t *testing.T) {
67 b := &bits{width: 1, buf: []byte{0xff, 0xff}}
73 b = &bits{width: 2, buf: []byte{0xff, 0xff}}
75 if b.nextPos() != 0b11 {
76 t.Fatalf("pos not 0b11")
80 b = &bits{width: 1, buf: []byte{0b10101010, 0b10101010}}
82 if b.nextPos() != ((i + 1) % 2) {
86 b = &bits{width: 2, buf: []byte{0b10101010, 0b10101010}}
88 if b.nextPos() != 0b10 {
89 t.Fatalf("pos not 0b10")
94func TestSet(t *testing.T) {
109 for i := 8; i < 16; i++ {
114 for i := 16; i < 24; i++ {
119 for i := 24; i < 32; i++ {
127func TestOnes(t *testing.T) {
128 ones := func(b *Bloom, x int) {
132 t.Fatalf("ones: got %d, expected %d", n, x)
135 ones(&Bloom{data: []byte{0b10101010}}, 4)
136 ones(&Bloom{data: []byte{0b01010101}}, 4)
137 ones(&Bloom{data: []byte{0b11111111}}, 8)
138 ones(&Bloom{data: []byte{0b00000000}}, 0)