-
Notifications
You must be signed in to change notification settings - Fork 0
/
types_test.go
105 lines (88 loc) · 2.04 KB
/
types_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
94
95
96
97
98
99
100
101
102
103
104
105
//go:build goexperiment.rangefunc
package ro_test
import (
"iter"
"testing"
"github.com/alexandreLamarre/ro"
"github.com/samber/lo"
"github.com/stretchr/testify/assert"
)
func empty[T any]() iter.Seq[T] {
return func(_ func(T) bool) {}
}
func TestToSlice(t *testing.T) {
rangeIter := ro.Range(0, 10, 1)
res := ro.ToSlice(
rangeIter,
)
assert.Equal(t, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, res)
emptyIter := empty[int]()
res2 := ro.ToSlice(
emptyIter,
)
assert.Equal(t, []int{}, res2)
}
func TestFromSlice(t *testing.T) {
i := ro.FromSlice([]string{"a", "b", "c"})
res := []string{}
for v := range i {
res = append(res, v)
}
assert.Equal(t, []string{"a", "b", "c"}, res)
i2 := ro.FromSlice([]int{})
res2 := []int{}
for v := range i2 {
res2 = append(res2, v)
}
assert.Equal(t, []int{}, res2)
}
func TestFromString(t *testing.T) {
i := ro.FromString("abc")
res := []rune{}
for v := range i {
res = append(res, v)
}
assert.Equal(t, []rune{'a', 'b', 'c'}, res)
i2 := ro.FromString("")
res2 := []rune{}
for v := range i2 {
res2 = append(res2, v)
}
assert.Equal(t, []rune{}, res2)
i3 := ro.FromString("abc")
res3 := []rune{}
for v := range i3 {
res3 = append(res3, v)
break
}
assert.Equal(t, []rune{'a'}, res3)
}
func iter2ToTuple[U, V any](seq iter.Seq2[U, V]) []lo.Tuple2[U, V] {
res := []lo.Tuple2[U, V]{}
for k, v := range seq {
res = append(res, lo.Tuple2[U, V]{A: k, B: v})
}
return res
}
func TestExtend(t *testing.T) {
i := ro.FromSlice([]int{1, 2, 3})
kv := ro.Extend(i)
assert.Equal(t, []lo.Tuple2[struct{}, int]{
{A: struct{}{}, B: 1},
{A: struct{}{}, B: 2},
{A: struct{}{}, B: 3},
}, iter2ToTuple(kv))
i2 := ro.FromSlice([]string{})
kv2 := ro.Extend(i2)
assert.Equal(t, []lo.Tuple2[struct{}, string]{}, iter2ToTuple(kv2))
i3 := ro.FromSlice([]int{1, 2, 3})
kv3 := ro.Extend(i3)
res3 := []lo.Tuple2[struct{}, int]{}
for k, v := range kv3 {
res3 = append(res3, lo.Tuple2[struct{}, int]{A: k, B: v})
break
}
assert.Equal(t, []lo.Tuple2[struct{}, int]{
{A: struct{}{}, B: 1},
}, res3)
}