blob: 4c071665ea229a55e11f18f5dfe81b0c63cbccac [file] [log] [blame] [edit]
package stringsbuilder
import "strings"
// basic test
func _() {
var s strings.Builder
s.WriteString("before")
for range 10 {
s.WriteString("in") // want "using string \\+= string in a loop is inefficient"
s.WriteString("in2")
}
s.WriteString("after")
print(s.String())
}
// with initializer
func _() {
var s strings.Builder
s.WriteString("a")
for range 10 {
s.WriteString("b") // want "using string \\+= string in a loop is inefficient"
}
print(s.String())
}
// with empty initializer
func _() {
var s strings.Builder
for range 10 {
s.WriteString("b") // want "using string \\+= string in a loop is inefficient"
}
print(s.String())
}
// with short decl
func _() {
var s strings.Builder
s.WriteString("a")
for range 10 {
s.WriteString("b") // want "using string \\+= string in a loop is inefficient"
}
print(s.String())
}
// with short decl and empty initializer
func _() {
var s strings.Builder
for range 10 {
s.WriteString("b") // want "using string \\+= string in a loop is inefficient"
}
print(s.String())
}
// nope: += must appear at least once within a loop.
func _() {
var s string
s += "a"
s += "b"
s += "c"
print(s)
}
// nope: the declaration of s is not in a block.
func _() {
if s := "a"; true {
for range 10 {
s += "x"
}
print(s)
}
}
// in a switch (special case of "in a block" logic)
func _() {
switch {
default:
var s strings.Builder
s.WriteString("a")
for range 10 {
s.WriteString("b") // want "using string \\+= string in a loop is inefficient"
}
print(s.String())
}
}
// nope: don't handle direct assignments to the string (only +=).
func _(x string) string {
var s string
s = x
for range 3 {
s += "" + x
}
return s
}
// Regression test for bug in a GenDecl with parens.
func issue75318(slice []string) string {
var (
msg strings.Builder
)
for _, s := range slice {
msg.WriteString(s) // want "using string \\+= string in a loop is inefficient"
}
return msg.String()
}