mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: move test programs out of source code, coalesce
Now there are just three programs to compile instead of many, and repeated tests can reuse the compilation result instead of rebuilding it. Combined, these changes reduce the time spent testing runtime during all.bash on my laptop from about 60 to about 30 seconds. (All.bash itself runs in 5½ minutes.) For #10571. Change-Id: Ie2c1798b847f1a635a860d11dcdab14375319ae9 Reviewed-on: https://go-review.googlesource.com/18085 Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Austin Clements <austin@google.com>
This commit is contained in:
parent
a699320512
commit
8d5ff2e182
24 changed files with 994 additions and 820 deletions
|
|
@ -19,59 +19,13 @@ func TestGcSys(t *testing.T) {
|
|||
if os.Getenv("GOGC") == "off" {
|
||||
t.Skip("skipping test; GOGC=off in environment")
|
||||
}
|
||||
data := struct{ Short bool }{testing.Short()}
|
||||
got := executeTest(t, testGCSysSource, &data)
|
||||
got := runTestProg(t, "testprog", "GCSys")
|
||||
want := "OK\n"
|
||||
if got != want {
|
||||
t.Fatalf("expected %q, but got %q", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
const testGCSysSource = `
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
func main() {
|
||||
runtime.GOMAXPROCS(1)
|
||||
memstats := new(runtime.MemStats)
|
||||
runtime.GC()
|
||||
runtime.ReadMemStats(memstats)
|
||||
sys := memstats.Sys
|
||||
|
||||
runtime.MemProfileRate = 0 // disable profiler
|
||||
|
||||
itercount := 1000000
|
||||
{{if .Short}}
|
||||
itercount = 100000
|
||||
{{end}}
|
||||
for i := 0; i < itercount; i++ {
|
||||
workthegc()
|
||||
}
|
||||
|
||||
// Should only be using a few MB.
|
||||
// We allocated 100 MB or (if not short) 1 GB.
|
||||
runtime.ReadMemStats(memstats)
|
||||
if sys > memstats.Sys {
|
||||
sys = 0
|
||||
} else {
|
||||
sys = memstats.Sys - sys
|
||||
}
|
||||
if sys > 16<<20 {
|
||||
fmt.Printf("using too much memory: %d bytes\n", sys)
|
||||
return
|
||||
}
|
||||
fmt.Printf("OK\n")
|
||||
}
|
||||
|
||||
func workthegc() []byte {
|
||||
return make([]byte, 1029)
|
||||
}
|
||||
`
|
||||
|
||||
func TestGcDeepNesting(t *testing.T) {
|
||||
type T [2][2][2][2][2][2][2][2][2][2]*int
|
||||
a := new(T)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue