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 }