From: Rob Pike Date: Tue, 9 Sep 2014 18:45:46 +0000 (-0700) Subject: fmt: fix allocation test X-Git-Tag: go1.4beta1~457 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=eafa4fff5257ed286618d9027eeaf3cce7c6b8d0;p=gostls13.git fmt: fix allocation test With new interface allocation rules, the old counts were wrong and so was the commentary. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/142760044 --- diff --git a/src/fmt/fmt_test.go b/src/fmt/fmt_test.go index 8c577949a1..89dde2b64a 100644 --- a/src/fmt/fmt_test.go +++ b/src/fmt/fmt_test.go @@ -855,6 +855,7 @@ func BenchmarkManyArgs(b *testing.B) { } var mallocBuf bytes.Buffer +var mallocPointer *int // A pointer so we know the interface value won't allocate. var mallocTest = []struct { count int @@ -866,11 +867,13 @@ var mallocTest = []struct { {1, `Sprintf("%x")`, func() { Sprintf("%x", 7) }}, {2, `Sprintf("%s")`, func() { Sprintf("%s", "hello") }}, {1, `Sprintf("%x %x")`, func() { Sprintf("%x %x", 7, 112) }}, - // For %g we use a float32, not float64, to guarantee passing the argument - // does not need to allocate memory to store the result in a pointer-sized word. - {2, `Sprintf("%g")`, func() { Sprintf("%g", float32(3.14159)) }}, - {0, `Fprintf(buf, "%x %x %x")`, func() { mallocBuf.Reset(); Fprintf(&mallocBuf, "%x %x %x", 7, 8, 9) }}, + {2, `Sprintf("%g")`, func() { Sprintf("%g", float32(3.14159)) }}, // TODO: Can this be 1? {1, `Fprintf(buf, "%s")`, func() { mallocBuf.Reset(); Fprintf(&mallocBuf, "%s", "hello") }}, + // If the interface value doesn't need to allocate, amortized allocation overhead should be zero. + {0, `Fprintf(buf, "%x %x %x")`, func() { + mallocBuf.Reset() + Fprintf(&mallocBuf, "%x %x %x", mallocPointer, mallocPointer, mallocPointer) + }}, } var _ bytes.Buffer