github.com/RexLetRock/roaring@v0.0.0-20220909044051-543c31bc5e2b/benchmark_memory_test.go (about) 1 //go:build go1.13 2 // +build go1.13 3 4 package roaring 5 6 import ( 7 "math/rand" 8 "runtime" 9 "testing" 10 11 "github.com/bits-and-blooms/bitset" 12 ) 13 14 // go test -bench BenchmarkMemoryUsage -run - 15 func BenchmarkMemoryUsage(b *testing.B) { 16 b.StopTimer() 17 bitmaps := make([]*Bitmap, 0, 10) 18 19 incr := uint32(1 << 16) 20 max := uint32(1<<32 - 1) 21 for x := 0; x < 10; x++ { 22 rb := NewBitmap() 23 24 var i uint32 25 for i = 0; i <= max-incr; i += incr { 26 rb.Add(i) 27 } 28 29 bitmaps = append(bitmaps, rb) 30 } 31 32 var stats runtime.MemStats 33 runtime.ReadMemStats(&stats) 34 b.ReportMetric(float64(stats.HeapInuse), "HeapInUse") 35 b.ReportMetric(float64(stats.HeapObjects), "HeapObjects") 36 b.StartTimer() 37 } 38 39 // go test -bench BenchmarkSize -run - 40 func BenchmarkSizeBitset(b *testing.B) { 41 b.StopTimer() 42 r := rand.New(rand.NewSource(0)) 43 s1 := bitset.New(0) 44 sz := 150000 45 initsize := 65000 46 for i := 0; i < initsize; i++ { 47 s1.Set(uint(r.Int31n(int32(sz)))) 48 } 49 s2 := bitset.New(0) 50 sz = 100000000 51 initsize = 65000 52 for i := 0; i < initsize; i++ { 53 s2.Set(uint(r.Int31n(int32(sz)))) 54 } 55 b.ReportMetric(float64(s1.BinaryStorageSize()+s2.BinaryStorageSize())/(1024.0*1024), "BitsetSizeInMB") 56 } 57 58 // go test -bench BenchmarkSize -run - 59 func BenchmarkSizeRoaring(b *testing.B) { 60 b.StopTimer() 61 r := rand.New(rand.NewSource(0)) 62 s1 := NewBitmap() 63 sz := 150000 64 initsize := 65000 65 for i := 0; i < initsize; i++ { 66 s1.Add(uint32(r.Int31n(int32(sz)))) 67 } 68 s2 := NewBitmap() 69 sz = 100000000 70 initsize = 65000 71 for i := 0; i < initsize; i++ { 72 s2.Add(uint32(r.Int31n(int32(sz)))) 73 } 74 b.ReportMetric(float64(s1.GetSerializedSizeInBytes()+s2.GetSerializedSizeInBytes())/(1024.0*1024), "RoaringSizeInMB") 75 }