-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
proj_test.go
93 lines (87 loc) · 1.71 KB
/
proj_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package iterutil_test
import (
"fmt"
"slices"
"testing"
"github.com/jub0bs/iterutil"
)
func ExampleLeft() {
seq := slices.All([]string{"zero", "one", "two", "three", "four"})
for i := range iterutil.Left(seq) {
fmt.Println(i)
}
// Output:
// 0
// 1
// 2
// 3
// 4
}
func TestLeft(t *testing.T) {
cases := []struct {
desc string
elems []string
breakWhen func(int) bool
want []int
}{
{
desc: "no break",
elems: []string{"foo", "bar", "baz"},
breakWhen: alwaysFalse[int],
want: []int{0, 1, 2},
}, {
desc: "break early",
elems: []string{"foo", "bar", "baz"},
breakWhen: equal(1),
want: []int{0},
},
}
for _, tc := range cases {
f := func(t *testing.T) {
seq := slices.All(tc.elems)
got := iterutil.Left(seq)
assertEqual(t, got, tc.want, tc.breakWhen)
}
t.Run(tc.desc, f)
}
}
func ExampleRight() {
seq := slices.All([]string{"zero", "one", "two", "three", "four"})
for s := range iterutil.Right(seq) {
fmt.Println(s)
}
// Output:
// zero
// one
// two
// three
// four
}
func TestRight(t *testing.T) {
cases := []struct {
desc string
elems []string
breakWhen func(string) bool
want []string
}{
{
desc: "no break",
elems: []string{"foo", "bar", "baz"},
breakWhen: alwaysFalse[string],
want: []string{"foo", "bar", "baz"},
}, {
desc: "break early",
elems: []string{"foo", "bar", "baz"},
breakWhen: falseAfterN[string](1),
want: []string{"foo"},
},
}
for _, tc := range cases {
f := func(t *testing.T) {
seq := slices.All(tc.elems)
got := iterutil.Right(seq)
assertEqual(t, got, tc.want, tc.breakWhen)
}
t.Run(tc.desc, f)
}
}