From 3d56fe6d9411ace303b18bf930a0200518886ab6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?H=C3=A5vard=20Haugen?= Date: Wed, 14 Jan 2015 22:31:59 +0100 Subject: [PATCH] testing: pad benchmark names to align results Fixes #8780 Change-Id: I09cf01ff9722eed49086992a12774f2de81d16f2 Reviewed-on: https://go-review.googlesource.com/2840 Reviewed-by: Andrew Gerrand --- src/testing/benchmark.go | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/testing/benchmark.go b/src/testing/benchmark.go index ffd5376844..62e696d221 100644 --- a/src/testing/benchmark.go +++ b/src/testing/benchmark.go @@ -280,6 +280,14 @@ func (r BenchmarkResult) MemString() string { r.AllocedBytesPerOp(), r.AllocsPerOp()) } +// benchmarkName returns full name of benchmark including procs suffix. +func benchmarkName(name string, n int) string { + if n != 1 { + return fmt.Sprintf("%s-%d", name, n) + } + return name +} + // An internal function but exported because it is cross-package; part of the implementation // of the "go test" command. func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark) { @@ -287,15 +295,30 @@ func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks [ if len(*matchBenchmarks) == 0 { return } + // Collect matching benchmarks and determine longest name. + maxprocs := 1 + for _, procs := range cpuList { + if procs > maxprocs { + maxprocs = procs + } + } + maxlen := 0 + var bs []InternalBenchmark for _, Benchmark := range benchmarks { matched, err := matchString(*matchBenchmarks, Benchmark.Name) if err != nil { fmt.Fprintf(os.Stderr, "testing: invalid regexp for -test.bench: %s\n", err) os.Exit(1) } - if !matched { - continue + if matched { + bs = append(bs, Benchmark) + benchName := benchmarkName(Benchmark.Name, maxprocs) + if l := len(benchName); l > maxlen { + maxlen = l + } } + } + for _, Benchmark := range bs { for _, procs := range cpuList { runtime.GOMAXPROCS(procs) b := &B{ @@ -304,11 +327,8 @@ func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks [ }, benchmark: Benchmark, } - benchName := Benchmark.Name - if procs != 1 { - benchName = fmt.Sprintf("%s-%d", Benchmark.Name, procs) - } - fmt.Printf("%s\t", benchName) + benchName := benchmarkName(Benchmark.Name, procs) + fmt.Printf("%-*s\t", maxlen, benchName) r := b.run() if b.failed { // The output could be very long here, but probably isn't. -- 2.48.1