// 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) }