From 9becf401de6080cb9edd524def7e77aeaede4126 Mon Sep 17 00:00:00 2001 From: aimuz Date: Fri, 9 Aug 2024 07:33:36 +0000 Subject: bytes, strings: add Lines, SplitSeq, SplitAfterSeq, FieldsSeq, FieldsFuncSeq Fixes #61901. Change-Id: I4db21c91fd21079f2aa3bc81fb03dd6f40423a38 GitHub-Last-Rev: ed3df560a40ea10cdcb8ad476ba6849463f3c761 GitHub-Pull-Request: golang/go#67543 Reviewed-on: https://go-review.googlesource.com/c/go/+/587095 Auto-Submit: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Carlos Amedee Reviewed-by: Ian Lance Taylor --- src/strings/strings_test.go | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/strings/strings_test.go') diff --git a/src/strings/strings_test.go b/src/strings/strings_test.go index c918372280..acbf3ede7b 100644 --- a/src/strings/strings_test.go +++ b/src/strings/strings_test.go @@ -8,6 +8,7 @@ import ( "bytes" "fmt" "io" + "iter" "math" "math/rand" "slices" @@ -19,6 +20,37 @@ import ( "unsafe" ) +func collect(t *testing.T, seq iter.Seq[string]) []string { + out := slices.Collect(seq) + out1 := slices.Collect(seq) + if !slices.Equal(out, out1) { + t.Fatalf("inconsistent seq:\n%s\n%s", out, out1) + } + return out +} + +type LinesTest struct { + a string + b []string +} + +var linesTests = []LinesTest{ + {a: "abc\nabc\n", b: []string{"abc\n", "abc\n"}}, + {a: "abc\r\nabc", b: []string{"abc\r\n", "abc"}}, + {a: "abc\r\n", b: []string{"abc\r\n"}}, + {a: "\nabc", b: []string{"\n", "abc"}}, + {a: "\nabc\n\n", b: []string{"\n", "abc\n", "\n"}}, +} + +func TestLines(t *testing.T) { + for _, s := range linesTests { + result := slices.Collect(Lines(s.a)) + if !slices.Equal(result, s.b) { + t.Errorf(`slices.Collect(Lines(%q)) = %q; want %q`, s.a, result, s.b) + } + } +} + var abcd = "abcd" var faces = "☺☻☹" var commas = "1,2,3,4" @@ -410,6 +442,12 @@ func TestSplit(t *testing.T) { t.Errorf("Split(%q, %q, %d) = %v; want %v", tt.s, tt.sep, tt.n, a, tt.a) continue } + if tt.n < 0 { + a2 := slices.Collect(SplitSeq(tt.s, tt.sep)) + if !slices.Equal(a2, tt.a) { + t.Errorf(`collect(SplitSeq(%q, %q)) = %v; want %v`, tt.s, tt.sep, a2, tt.a) + } + } if tt.n == 0 { continue } @@ -449,6 +487,12 @@ func TestSplitAfter(t *testing.T) { t.Errorf(`Split(%q, %q, %d) = %v; want %v`, tt.s, tt.sep, tt.n, a, tt.a) continue } + if tt.n < 0 { + a2 := slices.Collect(SplitAfterSeq(tt.s, tt.sep)) + if !slices.Equal(a2, tt.a) { + t.Errorf(`collect(SplitAfterSeq(%q, %q)) = %v; want %v`, tt.s, tt.sep, a2, tt.a) + } + } s := Join(a, "") if s != tt.s { t.Errorf(`Join(Split(%q, %q, %d), %q) = %q`, tt.s, tt.sep, tt.n, tt.sep, s) @@ -492,6 +536,10 @@ func TestFields(t *testing.T) { t.Errorf("Fields(%q) = %v; want %v", tt.s, a, tt.a) continue } + a2 := collect(t, FieldsSeq(tt.s)) + if !slices.Equal(a2, tt.a) { + t.Errorf(`collect(FieldsSeq(%q)) = %v; want %v`, tt.s, a2, tt.a) + } } } @@ -516,6 +564,10 @@ func TestFieldsFunc(t *testing.T) { if !slices.Equal(a, tt.a) { t.Errorf("FieldsFunc(%q) = %v, want %v", tt.s, a, tt.a) } + a2 := collect(t, FieldsFuncSeq(tt.s, pred)) + if !slices.Equal(a2, tt.a) { + t.Errorf(`collect(FieldsFuncSeq(%q)) = %v; want %v`, tt.s, a2, tt.a) + } } } -- cgit v1.3