aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/malloc_test.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-09-08 00:08:51 -0400
committerRuss Cox <rsc@golang.org>2014-09-08 00:08:51 -0400
commitc007ce824d9a4fccb148f9204e04c23ed2984b71 (patch)
tree7dcac257114ef5c446be5b7b68c27dea230b7c09 /src/pkg/runtime/malloc_test.go
parent220a6de47eced55956eb8af8d643d4f5b67fd634 (diff)
downloadgo-c007ce824d9a4fccb148f9204e04c23ed2984b71.tar.xz
build: move package sources from src/pkg to src
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.
Diffstat (limited to 'src/pkg/runtime/malloc_test.go')
-rw-r--r--src/pkg/runtime/malloc_test.go189
1 files changed, 0 insertions, 189 deletions
diff --git a/src/pkg/runtime/malloc_test.go b/src/pkg/runtime/malloc_test.go
deleted file mode 100644
index b7795aa1d6..0000000000
--- a/src/pkg/runtime/malloc_test.go
+++ /dev/null
@@ -1,189 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package runtime_test
-
-import (
- "flag"
- . "runtime"
- "testing"
- "time"
- "unsafe"
-)
-
-func TestMemStats(t *testing.T) {
- // Test that MemStats has sane values.
- st := new(MemStats)
- ReadMemStats(st)
-
- // Everything except HeapReleased and HeapIdle, because they indeed can be 0.
- if st.Alloc == 0 || st.TotalAlloc == 0 || st.Sys == 0 || st.Lookups == 0 ||
- st.Mallocs == 0 || st.Frees == 0 || st.HeapAlloc == 0 || st.HeapSys == 0 ||
- st.HeapInuse == 0 || st.HeapObjects == 0 || st.StackInuse == 0 ||
- st.StackSys == 0 || st.MSpanInuse == 0 || st.MSpanSys == 0 || st.MCacheInuse == 0 ||
- st.MCacheSys == 0 || st.BuckHashSys == 0 || st.GCSys == 0 || st.OtherSys == 0 ||
- st.NextGC == 0 || st.NumGC == 0 {
- t.Fatalf("Zero value: %+v", *st)
- }
-
- if st.Alloc > 1e10 || st.TotalAlloc > 1e11 || st.Sys > 1e10 || st.Lookups > 1e10 ||
- st.Mallocs > 1e10 || st.Frees > 1e10 || st.HeapAlloc > 1e10 || st.HeapSys > 1e10 ||
- st.HeapIdle > 1e10 || st.HeapInuse > 1e10 || st.HeapObjects > 1e10 || st.StackInuse > 1e10 ||
- st.StackSys > 1e10 || st.MSpanInuse > 1e10 || st.MSpanSys > 1e10 || st.MCacheInuse > 1e10 ||
- st.MCacheSys > 1e10 || st.BuckHashSys > 1e10 || st.GCSys > 1e10 || st.OtherSys > 1e10 ||
- st.NextGC > 1e10 || st.NumGC > 1e9 {
- t.Fatalf("Insanely high value (overflow?): %+v", *st)
- }
-
- if st.Sys != st.HeapSys+st.StackSys+st.MSpanSys+st.MCacheSys+
- st.BuckHashSys+st.GCSys+st.OtherSys {
- t.Fatalf("Bad sys value: %+v", *st)
- }
-
- if st.HeapIdle+st.HeapInuse != st.HeapSys {
- t.Fatalf("HeapIdle(%d) + HeapInuse(%d) should be equal to HeapSys(%d), but isn't.", st.HeapIdle, st.HeapInuse, st.HeapSys)
- }
-}
-
-var mallocSink uintptr
-
-func BenchmarkMalloc8(b *testing.B) {
- var x uintptr
- for i := 0; i < b.N; i++ {
- p := new(int64)
- x ^= uintptr(unsafe.Pointer(p))
- }
- mallocSink = x
-}
-
-func BenchmarkMalloc16(b *testing.B) {
- var x uintptr
- for i := 0; i < b.N; i++ {
- p := new([2]int64)
- x ^= uintptr(unsafe.Pointer(p))
- }
- mallocSink = x
-}
-
-func BenchmarkMallocTypeInfo8(b *testing.B) {
- var x uintptr
- for i := 0; i < b.N; i++ {
- p := new(struct {
- p [8 / unsafe.Sizeof(uintptr(0))]*int
- })
- x ^= uintptr(unsafe.Pointer(p))
- }
- mallocSink = x
-}
-
-func BenchmarkMallocTypeInfo16(b *testing.B) {
- var x uintptr
- for i := 0; i < b.N; i++ {
- p := new(struct {
- p [16 / unsafe.Sizeof(uintptr(0))]*int
- })
- x ^= uintptr(unsafe.Pointer(p))
- }
- mallocSink = x
-}
-
-type LargeStruct struct {
- x [16][]byte
-}
-
-func BenchmarkMallocLargeStruct(b *testing.B) {
- var x uintptr
- for i := 0; i < b.N; i++ {
- p := make([]LargeStruct, 2)
- x ^= uintptr(unsafe.Pointer(&p[0]))
- }
- mallocSink = x
-}
-
-var n = flag.Int("n", 1000, "number of goroutines")
-
-func BenchmarkGoroutineSelect(b *testing.B) {
- quit := make(chan struct{})
- read := func(ch chan struct{}) {
- for {
- select {
- case _, ok := <-ch:
- if !ok {
- return
- }
- case <-quit:
- return
- }
- }
- }
- benchHelper(b, *n, read)
-}
-
-func BenchmarkGoroutineBlocking(b *testing.B) {
- read := func(ch chan struct{}) {
- for {
- if _, ok := <-ch; !ok {
- return
- }
- }
- }
- benchHelper(b, *n, read)
-}
-
-func BenchmarkGoroutineForRange(b *testing.B) {
- read := func(ch chan struct{}) {
- for range ch {
- }
- }
- benchHelper(b, *n, read)
-}
-
-func benchHelper(b *testing.B, n int, read func(chan struct{})) {
- m := make([]chan struct{}, n)
- for i := range m {
- m[i] = make(chan struct{}, 1)
- go read(m[i])
- }
- b.StopTimer()
- b.ResetTimer()
- GC()
-
- for i := 0; i < b.N; i++ {
- for _, ch := range m {
- if ch != nil {
- ch <- struct{}{}
- }
- }
- time.Sleep(10 * time.Millisecond)
- b.StartTimer()
- GC()
- b.StopTimer()
- }
-
- for _, ch := range m {
- close(ch)
- }
- time.Sleep(10 * time.Millisecond)
-}
-
-func BenchmarkGoroutineIdle(b *testing.B) {
- quit := make(chan struct{})
- fn := func() {
- <-quit
- }
- for i := 0; i < *n; i++ {
- go fn()
- }
-
- GC()
- b.ResetTimer()
-
- for i := 0; i < b.N; i++ {
- GC()
- }
-
- b.StopTimer()
- close(quit)
- time.Sleep(10 * time.Millisecond)
-}