aboutsummaryrefslogtreecommitdiff
path: root/test/init1.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2015-02-13 08:06:36 -0800
committerBrad Fitzpatrick <bradfitz@golang.org>2015-02-13 22:13:56 +0000
commitb5b11bdbc6be59c0449f95949d68dd4151a3a8d6 (patch)
treea989266fed8289b4d1c8239008f519d5feee81c1 /test/init1.go
parentad73dc349bcb796ec99e1adb25973671d2204fba (diff)
downloadgo-b5b11bdbc6be59c0449f95949d68dd4151a3a8d6.tar.gz
go-b5b11bdbc6be59c0449f95949d68dd4151a3a8d6.zip
test: deflake init1.go test, tighten its bounds
Per the comment at top, this test is about whether the GC runs during init, but it was testing more than that, and testing how much the GC collected in a certain amount of time. Instead, loosen this test to just see whether it ran at all and not how well it did. Fixes #9848 Change-Id: I31da7dd769140d7b49aa6c149a543fae6076aa5e Reviewed-on: https://go-review.googlesource.com/4820 Reviewed-by: Rick Hudson <rlh@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'test/init1.go')
-rw-r--r--test/init1.go26
1 files changed, 17 insertions, 9 deletions
diff --git a/test/init1.go b/test/init1.go
index 83e9149f4c..62dfb72bf9 100644
--- a/test/init1.go
+++ b/test/init1.go
@@ -17,22 +17,30 @@ func init() {
go send(c)
<-c
- const chunk = 1 << 20
- memstats := new(runtime.MemStats)
- runtime.ReadMemStats(memstats)
- sys := memstats.Sys
- b := make([]byte, chunk)
+ const N = 1000
+ const MB = 1 << 20
+ b := make([]byte, MB)
for i := range b {
b[i] = byte(i%10 + '0')
}
s := string(b)
- for i := 0; i < 1000; i++ {
+
+ memstats := new(runtime.MemStats)
+ runtime.ReadMemStats(memstats)
+ sys, numGC := memstats.Sys, memstats.NumGC
+
+ // Generate 1,000 MB of garbage, only retaining 1 MB total.
+ for i := 0; i < N; i++ {
x = []byte(s)
}
+
+ // Verify that the garbage collector ran by seeing if we
+ // allocated fewer than N*MB bytes from the system.
runtime.ReadMemStats(memstats)
- sys1 := memstats.Sys
- if sys1-sys > chunk*500 {
- println("allocated 1000 chunks of", chunk, "and used ", sys1-sys, "memory")
+ sys1, numGC1 := memstats.Sys, memstats.NumGC
+ if sys1-sys >= N*MB || numGC1 == numGC {
+ println("allocated 1000 chunks of", MB, "and used ", sys1-sys, "memory")
+ println("numGC went", numGC, "to", numGC)
panic("init1")
}
}