package bloom import ( "math/rand" "strconv" "testing" "github.com/RoaringBitmap/roaring/roaring64" ) func TestBasic(t *testing.T) { f := NewWithEstimates(1000000000, 0.00001) n1 := "Bess" n2 := "Jane" n3 := "Tony" n4 := "Algo" f.AddString(n1) f.AddString(n2) f.AddString(n3) f.Flush() n1b := f.TestString(n1) n2b := f.TestString(n2) n3b := f.TestString(n3) n4b := f.TestString(n4) if !n1b { t.Errorf("%v should be in.", n1) } if !n2b { t.Errorf("%v should be in.", n2) } if !n3b { t.Errorf("%v should be in.", n3) } if n4b { t.Errorf("%v should be not in.", n4) } } func TestFile(t *testing.T) { f := NewWithEstimates(1000000000, 0.00001) n1 := "Bess" n2 := "Jane" n3 := "Tony" n4 := "Algo" f.AddString(n1) f.AddString(n2) f.AddString(n3) const tmpfile = "//tmp//bloomtest.bin" err := f.SaveToFile(tmpfile) if err != nil { t.Errorf("save file error %v", err) } f, err = LoadFromFile(tmpfile, false) if err != nil { t.Errorf("load file error %v", err) } n1b := f.TestString(n1) n2b := f.TestString(n2) n3b := f.TestString(n3) n4b := f.TestString(n4) if !n1b { t.Errorf("%v should be in.", n1) } if !n2b { t.Errorf("%v should be in.", n2) } if !n3b { t.Errorf("%v should be in.", n3) } if n4b { t.Errorf("%v should be not in.", n4) } } func Test10W(t *testing.T) { f := NewWithEstimates(100000, 0.00001) for i := uint64(0); i < 100000; i++ { f.AddString(strconv.FormatUint(i, 10)) } const tmpfile = "//tmp//bloomtest.bin" err := f.SaveToFile(tmpfile) if err != nil { t.Errorf("save file error %v", err) } f, err = LoadFromFile(tmpfile, false) if err != nil { t.Errorf("load file error %v", err) } for i := uint64(0); i < 100000; i++ { ns := f.TestString(strconv.FormatUint(i, 10)) if !ns { t.Errorf("%v should be in.", ns) } } } func TestStat(t *testing.T) { f := NewWithEstimates(1000000000, 0.00000001) t.Errorf("%v", f.GetStat()) } func BenchmarkNormal(b *testing.B) { f := NewWithEstimates(1000000000, 0.00001) for n := 0; n < b.N; n++ { f.AddString(strconv.FormatUint(uint64(n), 10)) } } func BenchmarkRoaringBitmap(b *testing.B) { f := roaring64.New() r := rand.New(rand.NewSource(99)) x := uint64(0) b.Run("Add", func(b *testing.B) { for n := 0; n < b.N; n++ { x = r.Uint64() % 23962645944 f.Add(x) } }) b.Errorf("%v aa\n", f.GetSizeInBytes()) }