]> Cypherpunks repositories - gostls13.git/commitdiff
fmt: fix allocation test
authorRob Pike <r@golang.org>
Tue, 9 Sep 2014 18:45:46 +0000 (11:45 -0700)
committerRob Pike <r@golang.org>
Tue, 9 Sep 2014 18:45:46 +0000 (11:45 -0700)
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

src/fmt/fmt_test.go

index 8c577949a109e765d8dc2be9bb856f9f0dbd62b8..89dde2b64aac522a969771cc785ff386441a6ac1 100644 (file)
@@ -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