You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
893 B
Go
43 lines
893 B
Go
3 years ago
|
//go:build go1.18
|
||
|
// +build go1.18
|
||
|
|
||
|
package stringx
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"math/rand"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func FuzzReplacerReplace(f *testing.F) {
|
||
|
keywords := make(map[string]string)
|
||
|
for i := 0; i < 20; i++ {
|
||
|
keywords[Randn(rand.Intn(10)+5)] = Randn(rand.Intn(5) + 1)
|
||
|
}
|
||
|
rep := NewReplacer(keywords)
|
||
|
printableKeywords := func() string {
|
||
|
var buf strings.Builder
|
||
|
for k, v := range keywords {
|
||
|
fmt.Fprintf(&buf, "%q: %q,\n", k, v)
|
||
|
}
|
||
|
return buf.String()
|
||
|
}
|
||
|
|
||
|
f.Add(50)
|
||
|
f.Fuzz(func(t *testing.T, n int) {
|
||
|
text := Randn(rand.Intn(n%50+50) + 1)
|
||
|
defer func() {
|
||
|
if r := recover(); r != nil {
|
||
|
t.Errorf("mapping: %s\ntext: %s", printableKeywords(), text)
|
||
|
}
|
||
|
}()
|
||
|
val := rep.Replace(text)
|
||
|
keys := rep.(*replacer).node.find([]rune(val))
|
||
|
if len(keys) > 0 {
|
||
|
t.Errorf("mapping: %s\ntext: %s\nresult: %s\nmatch: %v",
|
||
|
printableKeywords(), text, val, keys)
|
||
|
}
|
||
|
})
|
||
|
}
|