8
8
. "bytes"
9
9
"fmt"
10
10
"internal/testenv"
11
+ "iter"
11
12
"math"
12
13
"math/rand"
13
14
"slices"
@@ -26,6 +27,37 @@ func sliceOfString(s [][]byte) []string {
26
27
return result
27
28
}
28
29
30
+ func collect (t * testing.T , seq iter.Seq [[]byte ]) [][]byte {
31
+ out := slices .Collect (seq )
32
+ out1 := slices .Collect (seq )
33
+ if ! slices .Equal (sliceOfString (out ), sliceOfString (out1 )) {
34
+ t .Fatalf ("inconsistent seq:\n %s\n %s" , out , out1 )
35
+ }
36
+ return out
37
+ }
38
+
39
+ type LinesTest struct {
40
+ a string
41
+ b []string
42
+ }
43
+
44
+ var linesTests = []LinesTest {
45
+ {a : "abc\n abc\n " , b : []string {"abc\n " , "abc\n " }},
46
+ {a : "abc\r \n abc" , b : []string {"abc\r \n " , "abc" }},
47
+ {a : "abc\r \n " , b : []string {"abc\r \n " }},
48
+ {a : "\n abc" , b : []string {"\n " , "abc" }},
49
+ {a : "\n abc\n \n " , b : []string {"\n " , "abc\n " , "\n " }},
50
+ }
51
+
52
+ func TestLines (t * testing.T ) {
53
+ for _ , s := range linesTests {
54
+ result := sliceOfString (slices .Collect (Lines ([]byte (s .a ))))
55
+ if ! slices .Equal (result , s .b ) {
56
+ t .Errorf (`slices.Collect(Lines(%q)) = %q; want %q` , s .a , result , s .b )
57
+ }
58
+ }
59
+ }
60
+
29
61
// For ease of reading, the test cases use strings that are converted to byte
30
62
// slices before invoking the functions.
31
63
@@ -800,6 +832,14 @@ func TestSplit(t *testing.T) {
800
832
t .Errorf (`Split(%q, %q, %d) = %v; want %v` , tt .s , tt .sep , tt .n , result , tt .a )
801
833
continue
802
834
}
835
+
836
+ if tt .n < 0 {
837
+ b := sliceOfString (slices .Collect (SplitSeq ([]byte (tt .s ), []byte (tt .sep ))))
838
+ if ! slices .Equal (b , tt .a ) {
839
+ t .Errorf (`collect(SplitSeq(%q, %q)) = %v; want %v` , tt .s , tt .sep , b , tt .a )
840
+ }
841
+ }
842
+
803
843
if tt .n == 0 || len (a ) == 0 {
804
844
continue
805
845
}
@@ -859,6 +899,13 @@ func TestSplitAfter(t *testing.T) {
859
899
continue
860
900
}
861
901
902
+ if tt .n < 0 {
903
+ b := sliceOfString (slices .Collect (SplitAfterSeq ([]byte (tt .s ), []byte (tt .sep ))))
904
+ if ! slices .Equal (b , tt .a ) {
905
+ t .Errorf (`collect(SplitAfterSeq(%q, %q)) = %v; want %v` , tt .s , tt .sep , b , tt .a )
906
+ }
907
+ }
908
+
862
909
if want := tt .a [len (tt .a )- 1 ] + "z" ; string (x ) != want {
863
910
t .Errorf ("last appended result was %s; want %s" , x , want )
864
911
}
@@ -912,6 +959,11 @@ func TestFields(t *testing.T) {
912
959
continue
913
960
}
914
961
962
+ result2 := sliceOfString (collect (t , FieldsSeq ([]byte (tt .s ))))
963
+ if ! slices .Equal (result2 , tt .a ) {
964
+ t .Errorf (`collect(FieldsSeq(%q)) = %v; want %v` , tt .s , result2 , tt .a )
965
+ }
966
+
915
967
if string (b ) != tt .s {
916
968
t .Errorf ("slice changed to %s; want %s" , string (b ), tt .s )
917
969
}
@@ -954,6 +1006,11 @@ func TestFieldsFunc(t *testing.T) {
954
1006
t .Errorf ("FieldsFunc(%q) = %v, want %v" , tt .s , a , tt .a )
955
1007
}
956
1008
1009
+ result2 := sliceOfString (collect (t , FieldsFuncSeq ([]byte (tt .s ), pred )))
1010
+ if ! slices .Equal (result2 , tt .a ) {
1011
+ t .Errorf (`collect(FieldsFuncSeq(%q)) = %v; want %v` , tt .s , result2 , tt .a )
1012
+ }
1013
+
957
1014
if string (b ) != tt .s {
958
1015
t .Errorf ("slice changed to %s; want %s" , b , tt .s )
959
1016
}
0 commit comments