mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 09:53:54 +01:00
139 lines
2.7 KiB
Go
139 lines
2.7 KiB
Go
|
package fn
|
||
|
|
||
|
import (
|
||
|
"slices"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func even(a int) bool { return a%2 == 0 }
|
||
|
func odd(a int) bool { return a%2 != 0 }
|
||
|
|
||
|
func TestAll(t *testing.T) {
|
||
|
x := []int{0, 2, 4, 6, 8}
|
||
|
require.True(t, All(even, x))
|
||
|
require.False(t, All(odd, x))
|
||
|
|
||
|
y := []int{1, 3, 5, 7, 9}
|
||
|
require.False(t, All(even, y))
|
||
|
require.True(t, All(odd, y))
|
||
|
|
||
|
z := []int{0, 2, 4, 6, 9}
|
||
|
require.False(t, All(even, z))
|
||
|
require.False(t, All(odd, z))
|
||
|
}
|
||
|
|
||
|
func TestAny(t *testing.T) {
|
||
|
x := []int{1, 3, 5, 7, 9}
|
||
|
require.False(t, Any(even, x))
|
||
|
require.True(t, Any(odd, x))
|
||
|
|
||
|
y := []int{0, 3, 5, 7, 9}
|
||
|
require.True(t, Any(even, y))
|
||
|
require.True(t, Any(odd, y))
|
||
|
|
||
|
z := []int{0, 2, 4, 6, 8}
|
||
|
require.True(t, Any(even, z))
|
||
|
require.False(t, Any(odd, z))
|
||
|
}
|
||
|
|
||
|
func TestMap(t *testing.T) {
|
||
|
inc := func(i int) int { return i + 1 }
|
||
|
|
||
|
x := []int{0, 2, 4, 6, 8}
|
||
|
|
||
|
y := Map(inc, x)
|
||
|
|
||
|
z := []int{1, 3, 5, 7, 9}
|
||
|
|
||
|
require.True(t, slices.Equal(y, z))
|
||
|
}
|
||
|
|
||
|
func TestFilter(t *testing.T) {
|
||
|
x := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||
|
|
||
|
y := Filter(even, x)
|
||
|
|
||
|
require.True(t, All(even, y))
|
||
|
|
||
|
z := Filter(odd, y)
|
||
|
|
||
|
require.Zero(t, len(z))
|
||
|
}
|
||
|
|
||
|
func TestFoldl(t *testing.T) {
|
||
|
seed := []int{}
|
||
|
stupid := func(s []int, a int) []int { return append(s, a) }
|
||
|
|
||
|
x := []int{0, 1, 2, 3, 4}
|
||
|
|
||
|
r := Foldl(stupid, seed, x)
|
||
|
|
||
|
require.True(t, slices.Equal(x, r))
|
||
|
}
|
||
|
|
||
|
func TestFoldr(t *testing.T) {
|
||
|
seed := []int{}
|
||
|
stupid := func(a int, s []int) []int { return append(s, a) }
|
||
|
|
||
|
x := []int{0, 1, 2, 3, 4}
|
||
|
|
||
|
z := Foldr(stupid, seed, x)
|
||
|
|
||
|
slices.Reverse[[]int](x)
|
||
|
|
||
|
require.True(t, slices.Equal(x, z))
|
||
|
}
|
||
|
|
||
|
func TestFind(t *testing.T) {
|
||
|
x := []int{10, 11, 12, 13, 14, 15}
|
||
|
|
||
|
div3 := func(a int) bool { return a%3 == 0 }
|
||
|
div8 := func(a int) bool { return a%8 == 0 }
|
||
|
|
||
|
require.Equal(t, Find(div3, x), Some(12))
|
||
|
|
||
|
require.Equal(t, Find(div8, x), None[int]())
|
||
|
}
|
||
|
|
||
|
func TestFlatten(t *testing.T) {
|
||
|
x := [][]int{{0}, {1}, {2}}
|
||
|
|
||
|
y := Flatten(x)
|
||
|
|
||
|
require.True(t, slices.Equal(y, []int{0, 1, 2}))
|
||
|
}
|
||
|
|
||
|
func TestReplicate(t *testing.T) {
|
||
|
require.True(t, slices.Equal([]int{1, 1, 1, 1, 1}, Replicate(5, 1)))
|
||
|
}
|
||
|
|
||
|
func TestSpan(t *testing.T) {
|
||
|
x := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||
|
lt5 := func(a int) bool { return a < 5 }
|
||
|
|
||
|
low, high := Span(lt5, x)
|
||
|
|
||
|
require.True(t, slices.Equal(low, []int{0, 1, 2, 3, 4}))
|
||
|
require.True(t, slices.Equal(high, []int{5, 6, 7, 8, 9}))
|
||
|
}
|
||
|
|
||
|
func TestSplitAt(t *testing.T) {
|
||
|
x := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||
|
fst, snd := SplitAt(5, x)
|
||
|
|
||
|
require.True(t, slices.Equal(fst, []int{0, 1, 2, 3, 4}))
|
||
|
require.True(t, slices.Equal(snd, []int{5, 6, 7, 8, 9}))
|
||
|
}
|
||
|
|
||
|
func TestZipWith(t *testing.T) {
|
||
|
eq := func(a, b int) bool { return a == b }
|
||
|
x := []int{0, 1, 2, 3, 4}
|
||
|
y := Replicate(5, 1)
|
||
|
z := ZipWith(eq, x, y)
|
||
|
require.True(t, slices.Equal(
|
||
|
z, []bool{false, true, false, false, false},
|
||
|
))
|
||
|
}
|