1
0
mirror of https://github.com/golang/go synced 2024-11-19 17:04:41 -07:00

testing: check that tests and benchmarks do not affect GOMAXPROCS

Plus fix spoiling of GOMAXPROCS in 2 existing rwmutex tests.
Plus fix benchmark output to stdout (now it outputs to stderr like all other output).

R=rsc
CC=golang-dev
https://golang.org/cl/4529111
This commit is contained in:
Dmitriy Vyukov 2011-06-03 13:50:44 -04:00 committed by Russ Cox
parent 9baaa6f742
commit 79b397b27e
3 changed files with 15 additions and 2 deletions

View File

@ -45,6 +45,7 @@ func doTestParallelReaders(numReaders, gomaxprocs int) {
} }
func TestParallelReaders(t *testing.T) { func TestParallelReaders(t *testing.T) {
defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(-1))
doTestParallelReaders(1, 4) doTestParallelReaders(1, 4)
doTestParallelReaders(3, 4) doTestParallelReaders(3, 4)
doTestParallelReaders(4, 2) doTestParallelReaders(4, 2)
@ -102,6 +103,7 @@ func HammerRWMutex(gomaxprocs, numReaders, num_iterations int) {
} }
func TestRWMutex(t *testing.T) { func TestRWMutex(t *testing.T) {
defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(-1))
n := 1000 n := 1000
if testing.Short() { if testing.Short() {
n = 5 n = 5

View File

@ -143,7 +143,6 @@ func (b *B) run() BenchmarkResult {
b.runN(n) b.runN(n)
} }
return BenchmarkResult{b.N, b.ns, b.bytes} return BenchmarkResult{b.N, b.ns, b.bytes}
} }
// The results of a benchmark run. // The results of a benchmark run.
@ -183,6 +182,7 @@ func RunBenchmarks(matchString func(pat, str string) (bool, os.Error), benchmark
if len(*matchBenchmarks) == 0 { if len(*matchBenchmarks) == 0 {
return return
} }
procs := runtime.GOMAXPROCS(-1)
for _, Benchmark := range benchmarks { for _, Benchmark := range benchmarks {
matched, err := matchString(*matchBenchmarks, Benchmark.Name) matched, err := matchString(*matchBenchmarks, Benchmark.Name)
if err != nil { if err != nil {
@ -194,7 +194,12 @@ func RunBenchmarks(matchString func(pat, str string) (bool, os.Error), benchmark
} }
b := &B{benchmark: Benchmark} b := &B{benchmark: Benchmark}
r := b.run() r := b.run()
fmt.Printf("%s\t%v\n", Benchmark.Name, r) print(fmt.Sprintf("%s\t%v\n", Benchmark.Name, r))
if p := runtime.GOMAXPROCS(-1); p != procs {
print(fmt.Sprintf("%s left GOMAXPROCS set to %d\n", Benchmark.Name, p))
procs = p
}
} }
} }

View File

@ -171,6 +171,7 @@ func RunTests(matchString func(pat, str string) (bool, os.Error), tests []Intern
if len(tests) == 0 { if len(tests) == 0 {
println("testing: warning: no tests to run") println("testing: warning: no tests to run")
} }
procs := runtime.GOMAXPROCS(-1)
for i := 0; i < len(tests); i++ { for i := 0; i < len(tests); i++ {
matched, err := matchString(*match, tests[i].Name) matched, err := matchString(*match, tests[i].Name)
if err != nil { if err != nil {
@ -190,6 +191,11 @@ func RunTests(matchString func(pat, str string) (bool, os.Error), tests []Intern
<-t.ch <-t.ch
ns += time.Nanoseconds() ns += time.Nanoseconds()
tstr := fmt.Sprintf("(%.2f seconds)", float64(ns)/1e9) tstr := fmt.Sprintf("(%.2f seconds)", float64(ns)/1e9)
if p := runtime.GOMAXPROCS(-1); t.failed == false && p != procs {
t.failed = true
t.errors = fmt.Sprintf("%s left GOMAXPROCS set to %d\n", tests[i].Name, p)
procs = p
}
if t.failed { if t.failed {
println("--- FAIL:", tests[i].Name, tstr) println("--- FAIL:", tests[i].Name, tstr)
print(t.errors) print(t.errors)