1 package funk
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 )
8
9 var f = &Foo{
10 ID: 1,
11 FirstName: "Dark",
12 LastName: "Vador",
13 Age: 30,
14 Bar: &Bar{
15 Name: "Test",
16 },
17 }
18
19 var b = &Foo{
20 ID: 2,
21 FirstName: "Florent",
22 LastName: "Messa",
23 Age: 28,
24 }
25 var c = &Foo{
26 ID: 3,
27 FirstName: "Harald",
28 LastName: "Nordgren",
29 Age: 27,
30 }
31
32 var results = []*Foo{f, c}
33
34 type Person struct {
35 name string
36 age int
37 }
38
39 func TestContains(t *testing.T) {
40 is := assert.New(t)
41
42 is.True(Contains([]string{"foo", "bar"}, "bar"))
43 is.True(Contains([...]string{"foo", "bar"}, "bar"))
44 is.Panics(func() { Contains(1, 2) })
45
46 is.True(Contains(results, f))
47 is.False(Contains(results, nil))
48 is.False(Contains(results, b))
49
50 is.True(Contains("florent", "rent"))
51 is.False(Contains("florent", "gilles"))
52
53 mapping := ToMap(results, "ID")
54
55 is.True(Contains(mapping, 1))
56 is.False(Contains(mapping, 2))
57
58 is.False(Contains(mapping, func (key int, val *Foo) bool {
59 return key == 4
60 }))
61 is.True(Contains(mapping, func (key int, val *Foo) bool {
62 return key == 1
63 }))
64
65 is.False(Contains(mapping, func (_ int, val *Foo) bool {
66 return val.FirstName == "NotPresent"
67 }))
68 is.True(Contains(mapping, func (_ int, val *Foo) bool {
69 return val.FirstName == "Harald"
70 }))
71 }
72
73 func TestEvery(t *testing.T) {
74 is := assert.New(t)
75
76 is.True(Every([]string{"foo", "bar", "baz"}, "bar", "foo"))
77
78 is.True(Every(results, f, c))
79 is.False(Every(results, nil))
80 is.False(Every(results, f, b))
81
82 is.True(Every("florent", "rent", "flo"))
83 is.False(Every("florent", "rent", "gilles"))
84
85 mapping := ToMap(results, "ID")
86
87 is.True(Every(mapping, 1, 3))
88 is.False(Every(mapping, 2, 3))
89 }
90
91 func TestSome(t *testing.T) {
92 is := assert.New(t)
93
94 is.True(Some([]string{"foo", "bar", "baz"}, "foo"))
95 is.True(Some([]string{"foo", "bar", "baz"}, "foo", "qux"))
96
97 is.True(Some(results, f))
98 is.False(Some(results, b))
99 is.False(Some(results, nil))
100 is.True(Some(results, f, b))
101
102 is.True(Some("zeeshan", "zee", "tam"))
103 is.False(Some("zeeshan", "zi", "tam"))
104
105 persons := []Person{
106 Person{
107 name: "Zeeshan",
108 age: 23,
109 },
110 Person{
111 name: "Bob",
112 age: 26,
113 },
114 }
115
116 person := Person{"Zeeshan", 23}
117 person2 := Person{"Alice", 23}
118 person3 := Person{"John", 26}
119
120 is.True(Some(persons, person, person2))
121 is.False(Some(persons, person2, person3))
122
123 mapping := ToMap(results, "ID")
124
125 is.True(Some(mapping, 1, 2))
126 is.True(Some(mapping, 4, 1))
127 is.False(Some(mapping, 4, 5))
128 }
129
130 func TestIndexOf(t *testing.T) {
131 is := assert.New(t)
132
133 is.Equal(IndexOf([]string{"foo", "bar"}, "bar"), 1)
134 is.Equal(IndexOf([]string{"foo", "bar"}, func (value string) bool {
135 return value == "bar"
136 }), 1)
137
138 is.Equal(IndexOf(results, f), 0)
139 is.Equal(IndexOf(results, b), -1)
140 }
141
142 func TestLastIndexOf(t *testing.T) {
143 is := assert.New(t)
144
145 is.Equal(LastIndexOf([]string{"foo", "bar", "bar"}, "bar"), 2)
146 is.Equal(LastIndexOf([]string{"foo", "bar", "bar"}, func (value string) bool {
147 return value == "bar"
148 }), 2)
149 is.Equal(LastIndexOf([]int{1, 2, 2, 3}, 2), 2)
150 is.Equal(LastIndexOf([]int{1, 2, 2, 3}, 4), -1)
151 }
152
153 func TestFilter(t *testing.T) {
154 is := assert.New(t)
155
156 r := Filter([]int{1, 2, 3, 4}, func(x int) bool {
157 return x%2 == 0
158 })
159
160 is.Equal(r, []int{2, 4})
161 }
162
163 func TestFind(t *testing.T) {
164 is := assert.New(t)
165
166 r := Find([]int{1, 2, 3, 4}, func(x int) bool {
167 return x%2 == 0
168 })
169
170 is.Equal(r, 2)
171
172 }
173 func TestFindKey(t *testing.T) {
174 is := assert.New(t)
175
176 k, r := FindKey(map[string]int{"a": 1, "b": 2, "c": 3, "d": 4}, func(x int) bool {
177 return x == 2
178 })
179
180 is.Equal(r, 2)
181 is.Equal(k, "b")
182
183 k1, r1 := FindKey([]int{1, 2, 3, 4}, func(x int) bool {
184 return x%2 == 0
185 })
186 is.Equal(r1, 2)
187 is.Equal(k1, 1)
188 }
189
View as plain text