// Copyright 2021 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 strings_test import ( "reflect" "strings" "testing" "unsafe" ) func TestClone(t *testing.T) { var cloneTests = []string{ "", "short", strings.Repeat("a", 42), } for _, input := range cloneTests { clone := strings.Clone(input) if clone != input { t.Errorf("Clone(%q) = %q; want %q", input, clone, input) } inputHeader := (*reflect.StringHeader)(unsafe.Pointer(&input)) cloneHeader := (*reflect.StringHeader)(unsafe.Pointer(&clone)) if inputHeader.Data == cloneHeader.Data { t.Errorf("Clone(%q) return value should not reference inputs backing memory.", input) } } } func BenchmarkClone(b *testing.B) { var str = strings.Repeat("a", 42) b.ReportAllocs() for i := 0; i < b.N; i++ { stringSink = strings.Clone(str) } }