aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2024-04-23 15:42:22 -0700
committerGopher Robot <gobot@golang.org>2024-04-24 13:36:51 +0000
commit62dfa43101ce0abe5c919b4c996a9ba157e6a5e0 (patch)
tree9ad8440c6ef1cf71007cc509145ef7034f9e7dff
parentfc6a5ea88c913cbeb9af432c1ec16b4c72f4b4ba (diff)
downloadgo-62dfa43101ce0abe5c919b4c996a9ba157e6a5e0.tar.gz
go-62dfa43101ce0abe5c919b4c996a9ba157e6a5e0.zip
bytes: add test to ensure shallow copy of NewBuffer does not allocate
At present, there is no API to reset the underlying []byte of an existing Buffer struct, except to shallow copy the entire Buffer struct. Updates #67004 Change-Id: I08998f7a95ae5bde0897d86247d47f23cd784583 Reviewed-on: https://go-review.googlesource.com/c/go/+/581297 Auto-Submit: Joseph Tsai <joetsai@digital-static.net> Reviewed-by: Joedian Reid <joedian@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@google.com> Run-TryBot: Joseph Tsai <joetsai@digital-static.net> Reviewed-by: Keith Randall <khr@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
-rw-r--r--src/bytes/buffer_test.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/bytes/buffer_test.go b/src/bytes/buffer_test.go
index 845e5e2209..322e7367c7 100644
--- a/src/bytes/buffer_test.go
+++ b/src/bytes/buffer_test.go
@@ -94,6 +94,21 @@ func TestNewBuffer(t *testing.T) {
check(t, "NewBuffer", buf, testString)
}
+var buf Buffer
+
+// Calling NewBuffer and immediately shallow copying the Buffer struct
+// should not result in any allocations.
+// This can be used to reset the underlying []byte of an existing Buffer.
+func TestNewBufferShallow(t *testing.T) {
+ n := testing.AllocsPerRun(1000, func() {
+ buf = *NewBuffer(testBytes)
+ })
+ if n > 0 {
+ t.Errorf("allocations occurred while shallow copying")
+ }
+ check(t, "NewBuffer", &buf, testString)
+}
+
func TestNewBufferString(t *testing.T) {
buf := NewBufferString(testString)
check(t, "NewBufferString", buf, testString)