| // Copyright 2009 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 vector |
| |
| import ( |
| "fmt" |
| "runtime" |
| "strings" |
| "testing" |
| ) |
| |
| |
| const memTestN = 1000000 |
| |
| |
| func s(n uint64) string { |
| str := fmt.Sprintf("%d", n) |
| lens := len(str) |
| a := make([]string, (lens+2)/3) |
| start := lens |
| for i := range a { |
| start -= 3 |
| if start < 0 { |
| start = 0 |
| } |
| a[len(a)-i-1] = str[start:lens] |
| lens -= 3 |
| } |
| return strings.Join(a, " ") |
| } |
| |
| |
| func TestVectorNums(t *testing.T) { |
| var v Vector |
| c := int(0) |
| runtime.GC() |
| m0 := runtime.MemStats |
| v.Resize(memTestN, memTestN) |
| for i := 0; i < memTestN; i++ { |
| v.Set(i, c) |
| } |
| runtime.GC() |
| m := runtime.MemStats |
| v.Resize(0, 0) |
| runtime.GC() |
| n := m.Alloc - m0.Alloc |
| t.Logf("%T.Push(%#v), n = %s: Alloc/n = %.2f\n", v, c, s(memTestN), float(n)/memTestN) |
| } |
| |
| |
| func TestIntVectorNums(t *testing.T) { |
| var v IntVector |
| c := int(0) |
| runtime.GC() |
| m0 := runtime.MemStats |
| v.Resize(memTestN, memTestN) |
| for i := 0; i < memTestN; i++ { |
| v.Set(i, c) |
| } |
| runtime.GC() |
| m := runtime.MemStats |
| v.Resize(0, 0) |
| runtime.GC() |
| n := m.Alloc - m0.Alloc |
| t.Logf("%T.Push(%#v), n = %s: Alloc/n = %.2f\n", v, c, s(memTestN), float(n)/memTestN) |
| } |
| |
| |
| func TestStringVectorNums(t *testing.T) { |
| var v StringVector |
| c := "" |
| runtime.GC() |
| m0 := runtime.MemStats |
| v.Resize(memTestN, memTestN) |
| for i := 0; i < memTestN; i++ { |
| v.Set(i, c) |
| } |
| runtime.GC() |
| m := runtime.MemStats |
| v.Resize(0, 0) |
| runtime.GC() |
| n := m.Alloc - m0.Alloc |
| t.Logf("%T.Push(%#v), n = %s: Alloc/n = %.2f\n", v, c, s(memTestN), float(n)/memTestN) |
| } |
| |
| |
| func BenchmarkVectorNums(b *testing.B) { |
| c := int(0) |
| var v Vector |
| b.StopTimer() |
| runtime.GC() |
| b.StartTimer() |
| for i := 0; i < b.N; i++ { |
| v.Push(c) |
| } |
| } |
| |
| |
| func BenchmarkIntVectorNums(b *testing.B) { |
| c := int(0) |
| var v IntVector |
| b.StopTimer() |
| runtime.GC() |
| b.StartTimer() |
| for i := 0; i < b.N; i++ { |
| v.Push(c) |
| } |
| } |
| |
| |
| func BenchmarkStringVectorNums(b *testing.B) { |
| c := "" |
| var v StringVector |
| b.StopTimer() |
| runtime.GC() |
| b.StartTimer() |
| for i := 0; i < b.N; i++ { |
| v.Push(c) |
| } |
| } |