package strings import ( "fmt" "golang.org/x/exp/constraints" "strings" "testing" ) func TestStrJoin(t *testing.T) { type args struct { s []string } tests := []struct { name string args args wantStr string }{ {name: "t1", args: args{s: []string{"a", "b", "c"}}, wantStr: "abc"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if gotStr := Join(tt.args.s...); gotStr != tt.wantStr { t.Errorf("Join() = %v, want %v", gotStr, tt.wantStr) } }) } } func TestToInteger(t *testing.T) { type args[T constraints.Integer] struct { s string z T } type testCase[T constraints.Integer] struct { name string args args[T] want T } tests := []testCase[int64]{ { name: "t1", args: args[int64]{ "10", 0, }, want: int64(10), }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := ToInteger[int64](tt.args.s, tt.args.z); got != tt.want { t.Errorf("StrToInt() = %v, want %v", got, tt.want) } }) } } func TestBuilder_WriteString(t *testing.T) { type fields struct { Builder *strings.Builder } type args struct { s []string } //s :=NewBuilder() tests := []struct { name string fields fields args args wantCount int wantErr bool }{ { name: "t1", fields: fields{ Builder: &strings.Builder{}, }, args: args{s: []string{"11", "22", "不"}}, wantErr: false, wantCount: 7, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { b := &Builder{ Builder: tt.fields.Builder, } gotCount := b.WriteString(tt.args.s...) if gotCount != tt.wantCount { t.Errorf("WriteString() gotCount = %v, want %v", gotCount, tt.wantCount) } fmt.Println(b.String()) }) } } func BenchmarkBuilder_SprintfXX(b *testing.B) { s := NewBuilder() for i := 0; i < b.N; i++ { s.Sprintf("%s %s %s", "a", "b", "c") _ = s.String() } } func BenchmarkSPrintfXX(b *testing.B) { for i := 0; i < b.N; i++ { _ = fmt.Sprintf("%s %s %s", "a", "b", "c") } } func BenchmarkStrJoinXX(b *testing.B) { s := strings.Builder{} for i := 0; i < b.N; i++ { s.WriteString("a ") s.WriteString("b ") s.WriteString("c ") _ = s.String() } } func BenchmarkBuilderJoinXX(b *testing.B) { s := NewBuilder() for i := 0; i < b.N; i++ { s.WriteString("a ", "b ", "c") _ = s.String() } } func TestCutSpecialDuplicate(t *testing.T) { type args struct { s string char string } tests := []struct { name string args args want string }{ { name: "t1", args: args{s: "1 2 3", char: " "}, want: "1 2 3", }, { name: "t2", args: args{s: "1\t\t2\t\t3", char: "\t"}, want: "1\t2\t3", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := CutSpecialDuplicate(tt.args.s, tt.args.char); got != tt.want { t.Errorf("CutDuplicate() = %v, want %v", got, tt.want) } }) } }