mirror of https://github.com/golang/go.git
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
// Copyright 2024 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package testing_test
|
|
|
|
import (
|
|
"math/rand/v2"
|
|
"testing"
|
|
)
|
|
|
|
// ExBenchmark shows how to use b.Loop in a benchmark.
|
|
//
|
|
// (If this were a real benchmark, not an example, this would be named
|
|
// BenchmarkSomething.)
|
|
func ExBenchmark(b *testing.B) {
|
|
// Generate a large random slice to use as an input.
|
|
// Since this is done before the first call to b.Loop(),
|
|
// it doesn't count toward the benchmark time.
|
|
input := make([]int, 128<<10)
|
|
for i := range input {
|
|
input[i] = rand.Int()
|
|
}
|
|
|
|
// Perform the benchmark.
|
|
for b.Loop() {
|
|
// Normally, the compiler would be allowed to optimize away the call
|
|
// to sum because it has no side effects and the result isn't used.
|
|
// However, inside a b.Loop loop, the compiler ensures function calls
|
|
// aren't optimized away.
|
|
sum(input)
|
|
}
|
|
|
|
// Outside the loop, the timer is stopped, so we could perform
|
|
// cleanup if necessary without affecting the result.
|
|
}
|
|
|
|
func sum(data []int) int {
|
|
total := 0
|
|
for _, value := range data {
|
|
total += value
|
|
}
|
|
return total
|
|
}
|
|
|
|
func ExampleB_Loop() {
|
|
testing.Benchmark(ExBenchmark)
|
|
}
|