github.com/MetalBlockchain/metalgo@v1.11.9/utils/math/meter/meter_benchmark_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package meter
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  	"time"
    10  )
    11  
    12  func BenchmarkMeters(b *testing.B) {
    13  	for _, meterDef := range meters {
    14  		period := time.Second + 500*time.Millisecond
    15  		name := fmt.Sprintf("%s-%s", meterDef.name, period)
    16  		b.Run(name, func(b *testing.B) {
    17  			m := meterDef.factory.New(halflife)
    18  			MeterBenchmark(b, m, period)
    19  		})
    20  
    21  		period = time.Millisecond
    22  		name = fmt.Sprintf("%s-%s", meterDef.name, period)
    23  		b.Run(name, func(b *testing.B) {
    24  			m := meterDef.factory.New(halflife)
    25  			MeterBenchmark(b, m, period)
    26  		})
    27  	}
    28  }
    29  
    30  func MeterBenchmark(b *testing.B, m Meter, period time.Duration) {
    31  	currentTime := time.Now()
    32  	m.Inc(currentTime, 1)
    33  
    34  	b.ResetTimer()
    35  	for i := 0; i < b.N; i++ {
    36  		currentTime = currentTime.Add(period)
    37  		m.Read(currentTime)
    38  	}
    39  }