]> Cypherpunks repositories - gostls13.git/commitdiff
testing: check that tests and benchmarks do not affect GOMAXPROCS
authorDmitriy Vyukov <dvyukov@google.com>
Fri, 3 Jun 2011 17:50:44 +0000 (13:50 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 3 Jun 2011 17:50:44 +0000 (13:50 -0400)
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

src/pkg/sync/rwmutex_test.go
src/pkg/testing/benchmark.go
src/pkg/testing/testing.go

index 9fb89f8e8a32a3c5c63d36099b3e63eb00011c07..0480a6601838b27608b575890238197ddcf99bcf 100644 (file)
@@ -45,6 +45,7 @@ func doTestParallelReaders(numReaders, gomaxprocs int) {
 }
 
 func TestParallelReaders(t *testing.T) {
+       defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(-1))
        doTestParallelReaders(1, 4)
        doTestParallelReaders(3, 4)
        doTestParallelReaders(4, 2)
@@ -102,6 +103,7 @@ func HammerRWMutex(gomaxprocs, numReaders, num_iterations int) {
 }
 
 func TestRWMutex(t *testing.T) {
+       defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(-1))
        n := 1000
        if testing.Short() {
                n = 5
index db4c65941c08ef5491a4e52bd692e6de71d3429b..f8b53e63aed07626f9feeff52cf695e14e3dc7f6 100644 (file)
@@ -143,7 +143,6 @@ func (b *B) run() BenchmarkResult {
                b.runN(n)
        }
        return BenchmarkResult{b.N, b.ns, b.bytes}
-
 }
 
 // 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 {
                return
        }
+       procs := runtime.GOMAXPROCS(-1)
        for _, Benchmark := range benchmarks {
                matched, err := matchString(*matchBenchmarks, Benchmark.Name)
                if err != nil {
@@ -194,7 +194,12 @@ func RunBenchmarks(matchString func(pat, str string) (bool, os.Error), benchmark
                }
                b := &B{benchmark: Benchmark}
                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
+               }
+
        }
 }
 
index 8781b207defcfdfccedbb3c86120af5fd542ce99..3b2dd377afed1b11352668f8eee091dca0091be0 100644 (file)
@@ -171,6 +171,7 @@ func RunTests(matchString func(pat, str string) (bool, os.Error), tests []Intern
        if len(tests) == 0 {
                println("testing: warning: no tests to run")
        }
+       procs := runtime.GOMAXPROCS(-1)
        for i := 0; i < len(tests); i++ {
                matched, err := matchString(*match, tests[i].Name)
                if err != nil {
@@ -190,6 +191,11 @@ func RunTests(matchString func(pat, str string) (bool, os.Error), tests []Intern
                <-t.ch
                ns += time.Nanoseconds()
                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 {
                        println("--- FAIL:", tests[i].Name, tstr)
                        print(t.errors)