github.com/newpanjing/roaring@v0.9.7/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  }