1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-16 18:52:27 +08:00

refactor: clean code

This commit is contained in:
dudaodong
2023-06-01 16:58:42 +08:00
parent a8761eefb0
commit b1c6614549

View File

@@ -128,42 +128,46 @@ func TestEqualWith(t *testing.T) {
} }
func TestEvery(t *testing.T) { func TestEvery(t *testing.T) {
assert := internal.NewAssert(t, "TestEvery")
nums := []int{1, 2, 3, 5} nums := []int{1, 2, 3, 5}
isEven := func(i, num int) bool { isEven := func(i, num int) bool {
return num%2 == 0 return num%2 == 0
} }
assert := internal.NewAssert(t, "TestEvery")
assert.Equal(false, Every(nums, isEven)) assert.Equal(false, Every(nums, isEven))
} }
func TestNone(t *testing.T) { func TestNone(t *testing.T) {
assert := internal.NewAssert(t, "TestNone")
nums := []int{1, 2, 3, 5} nums := []int{1, 2, 3, 5}
check := func(i, num int) bool { check := func(i, num int) bool {
return num%2 == 1 return num%2 == 1
} }
assert := internal.NewAssert(t, "TestNone")
assert.Equal(false, None(nums, check)) assert.Equal(false, None(nums, check))
} }
func TestSome(t *testing.T) { func TestSome(t *testing.T) {
assert := internal.NewAssert(t, "TestSome")
nums := []int{1, 2, 3, 5} nums := []int{1, 2, 3, 5}
hasEven := func(i, num int) bool { hasEven := func(i, num int) bool {
return num%2 == 0 return num%2 == 0
} }
assert := internal.NewAssert(t, "TestSome")
assert.Equal(true, Some(nums, hasEven)) assert.Equal(true, Some(nums, hasEven))
} }
func TestFilter(t *testing.T) { func TestFilter(t *testing.T) {
assert := internal.NewAssert(t, "TestFilter")
nums := []int{1, 2, 3, 4, 5} nums := []int{1, 2, 3, 4, 5}
isEven := func(i, num int) bool { isEven := func(i, num int) bool {
return num%2 == 0 return num%2 == 0
} }
assert := internal.NewAssert(t, "TestFilter")
assert.Equal([]int{2, 4}, Filter(nums, isEven)) assert.Equal([]int{2, 4}, Filter(nums, isEven))
type student struct { type student struct {
@@ -189,17 +193,16 @@ func TestFilter(t *testing.T) {
} }
func TestGroupBy(t *testing.T) { func TestGroupBy(t *testing.T) {
assert := internal.NewAssert(t, "TestGroupBy")
nums := []int{1, 2, 3, 4, 5, 6} nums := []int{1, 2, 3, 4, 5, 6}
evenFunc := func(i, num int) bool { evenFunc := func(i, num int) bool {
return (num % 2) == 0 return (num % 2) == 0
} }
expectedEven := []int{2, 4, 6}
expectedOdd := []int{1, 3, 5}
even, odd := GroupBy(nums, evenFunc) even, odd := GroupBy(nums, evenFunc)
assert := internal.NewAssert(t, "TestGroupBy") assert.Equal([]int{2, 4, 6}, even)
assert.Equal(expectedEven, even) assert.Equal([]int{1, 3, 5}, odd)
assert.Equal(expectedOdd, odd)
} }
func TestGroupWith(t *testing.T) { func TestGroupWith(t *testing.T) {
@@ -240,65 +243,64 @@ func TestFind(t *testing.T) {
even := func(i, num int) bool { even := func(i, num int) bool {
return num%2 == 0 return num%2 == 0
} }
res, ok := Find(nums, even) result, ok := Find(nums, even)
if !ok {
t.Fatal("found nothing")
}
assert := internal.NewAssert(t, "TestFind") assert := internal.NewAssert(t, "TestFind")
assert.Equal(2, *res) assert.Equal(true, ok)
assert.Equal(2, *result)
} }
func TestFindBy(t *testing.T) { func TestFindBy(t *testing.T) {
assert := internal.NewAssert(t, "TestFindBy") assert := internal.NewAssert(t, "TestFindBy")
nums := []int{1, 2, 3, 4, 5} nums := []int{1, 2, 3, 4, 5}
even := func(i, num int) bool {
return num%2 == 0
}
res, ok := FindBy(nums, even)
if !ok {
t.Fatal("found nothing")
}
assert.Equal(2, res)
res, ok = FindBy(nums, func(_ int, v int) bool { result, ok := FindBy(nums, func(i, num int) bool {
return num%2 == 0
})
assert.Equal(true, ok)
assert.Equal(2, result)
result, ok = FindBy(nums, func(_ int, v int) bool {
return v == 6 return v == 6
}) })
assert.Equal(res == 0 && ok == false, true) assert.Equal(false, ok)
assert.Equal(0, result)
} }
func TestFindLastBy(t *testing.T) { func TestFindLastBy(t *testing.T) {
assert := internal.NewAssert(t, "TestFindBy") assert := internal.NewAssert(t, "TestFindLastBy")
nums := []int{1, 2, 3, 4, 5} nums := []int{1, 2, 3, 4, 5}
even := func(i, num int) bool { even := func(i, num int) bool {
return num%2 == 0 return num%2 == 0
} }
res, ok := FindLastBy(nums, even) result, ok := FindLastBy(nums, even)
if !ok { if !ok {
t.Fatal("found nothing") t.Fatal("found nothing")
} }
assert.Equal(4, res) assert.Equal(4, result)
res, ok = FindLastBy(nums, func(_ int, v int) bool { result, ok = FindLastBy(nums, func(_ int, v int) bool {
return v == 6 return v == 6
}) })
assert.Equal(res == 0 && ok == false, true)
assert.Equal(result == 0 && ok == false, true)
} }
func TestFindLast(t *testing.T) { func TestFindLast(t *testing.T) {
assert := internal.NewAssert(t, "TestFindLast")
nums := []int{1, 2, 3, 4, 5} nums := []int{1, 2, 3, 4, 5}
even := func(i, num int) bool { even := func(i, num int) bool {
return num%2 == 0 return num%2 == 0
} }
res, ok := FindLast(nums, even) result, ok := FindLast(nums, even)
if !ok { if !ok {
t.Fatal("found nothing") t.Fatal("found nothing")
} }
assert := internal.NewAssert(t, "TestFindLast") assert.Equal(4, *result)
assert.Equal(4, *res)
} }
func TestFindFoundNothing(t *testing.T) { func TestFindFoundNothing(t *testing.T) {
@@ -307,45 +309,47 @@ func TestFindFoundNothing(t *testing.T) {
return num > 1 return num > 1
} }
_, ok := Find(nums, findFunc) _, ok := Find(nums, findFunc)
// if ok {
// t.Fatal("found something")
// }
assert := internal.NewAssert(t, "TestFindFoundNothing") assert := internal.NewAssert(t, "TestFindFoundNothing")
assert.Equal(false, ok) assert.Equal(false, ok)
} }
func TestFlatten(t *testing.T) { func TestFlatten(t *testing.T) {
assert := internal.NewAssert(t, "TestFlatten")
input := [][][]string{{{"a", "b"}}, {{"c", "d"}}} input := [][][]string{{{"a", "b"}}, {{"c", "d"}}}
expected := [][]string{{"a", "b"}, {"c", "d"}} expected := [][]string{{"a", "b"}, {"c", "d"}}
assert := internal.NewAssert(t, "TestFlatten")
assert.Equal(expected, Flatten(input)) assert.Equal(expected, Flatten(input))
} }
func TestFlattenDeep(t *testing.T) { func TestFlattenDeep(t *testing.T) {
assert := internal.NewAssert(t, "TestFlattenDeep")
input := [][][]string{{{"a", "b"}}, {{"c", "d"}}} input := [][][]string{{{"a", "b"}}, {{"c", "d"}}}
expected := []string{"a", "b", "c", "d"} expected := []string{"a", "b", "c", "d"}
assert := internal.NewAssert(t, "TestFlattenDeep")
assert.Equal(expected, FlattenDeep(input)) assert.Equal(expected, FlattenDeep(input))
} }
func TestForEach(t *testing.T) { func TestForEach(t *testing.T) {
numbers := []int{1, 2, 3, 4, 5} assert := internal.NewAssert(t, "TestForEach")
expected := []int{3, 4, 5, 6, 7}
var numbersAddTwo []int numbers := []int{1, 2, 3, 4, 5}
var result []int
addTwo := func(index int, value int) { addTwo := func(index int, value int) {
numbersAddTwo = append(numbersAddTwo, value+2) result = append(result, value+2)
} }
ForEach(numbers, addTwo) ForEach(numbers, addTwo)
assert := internal.NewAssert(t, "TestForEach") assert.Equal([]int{3, 4, 5, 6, 7}, result)
assert.Equal(expected, numbersAddTwo)
} }
func TestForEachWithBreak(t *testing.T) { func TestForEachWithBreak(t *testing.T) {
assert := internal.NewAssert(t, "TestForEach")
numbers := []int{1, 2, 3, 4, 5} numbers := []int{1, 2, 3, 4, 5}
var sum int var sum int
@@ -358,17 +362,17 @@ func TestForEachWithBreak(t *testing.T) {
return true return true
}) })
assert := internal.NewAssert(t, "TestForEach")
assert.Equal(6, sum) assert.Equal(6, sum)
} }
func TestMap(t *testing.T) { func TestMap(t *testing.T) {
assert := internal.NewAssert(t, "TestMap")
nums := []int{1, 2, 3, 4} nums := []int{1, 2, 3, 4}
multiplyTwo := func(i, num int) int { multiplyTwo := func(i, num int) int {
return num * 2 return num * 2
} }
assert := internal.NewAssert(t, "TestMap")
assert.Equal([]int{2, 4, 6, 8}, Map(nums, multiplyTwo)) assert.Equal([]int{2, 4, 6, 8}, Map(nums, multiplyTwo))
type student struct { type student struct {
@@ -424,6 +428,8 @@ func TestFlatMap(t *testing.T) {
} }
func TestReduce(t *testing.T) { func TestReduce(t *testing.T) {
assert := internal.NewAssert(t, "TestReduce")
cases := [][]int{ cases := [][]int{
{}, {},
{1}, {1},
@@ -435,8 +441,6 @@ func TestReduce(t *testing.T) {
return v1 + v2 return v1 + v2
} }
assert := internal.NewAssert(t, "TestReduce")
for i := 0; i < len(cases); i++ { for i := 0; i < len(cases); i++ {
actual := Reduce(cases[i], f, 0) actual := Reduce(cases[i], f, 0)
assert.Equal(expected[i], actual) assert.Equal(expected[i], actual)
@@ -460,7 +464,7 @@ func TestReduceBy(t *testing.T) {
} }
func TestReduceRight(t *testing.T) { func TestReduceRight(t *testing.T) {
assert := internal.NewAssert(t, "ReduceRight") assert := internal.NewAssert(t, "TestReduceRight")
result := ReduceRight([]int{1, 2, 3, 4}, "", func(_ int, item int, agg string) string { result := ReduceRight([]int{1, 2, 3, 4}, "", func(_ int, item int, agg string) string {
return agg + fmt.Sprintf("%v", item) return agg + fmt.Sprintf("%v", item)
@@ -470,26 +474,29 @@ func TestReduceRight(t *testing.T) {
} }
func TestIntSlice(t *testing.T) { func TestIntSlice(t *testing.T) {
assert := internal.NewAssert(t, "TestIntSlice")
var nums []any var nums []any
nums = append(nums, 1, 2, 3) nums = append(nums, 1, 2, 3)
assert := internal.NewAssert(t, "TestIntSlice")
assert.Equal([]int{1, 2, 3}, IntSlice(nums)) assert.Equal([]int{1, 2, 3}, IntSlice(nums))
} }
func TestStringSlice(t *testing.T) { func TestStringSlice(t *testing.T) {
assert := internal.NewAssert(t, "TestStringSlice")
var strs []any var strs []any
strs = append(strs, "a", "b", "c") strs = append(strs, "a", "b", "c")
assert := internal.NewAssert(t, "TestStringSlice")
assert.Equal([]string{"a", "b", "c"}, StringSlice(strs)) assert.Equal([]string{"a", "b", "c"}, StringSlice(strs))
} }
func TestInterfaceSlice(t *testing.T) { func TestInterfaceSlice(t *testing.T) {
assert := internal.NewAssert(t, "TestInterfaceSlice")
strs := []string{"a", "b", "c"} strs := []string{"a", "b", "c"}
expect := []any{"a", "b", "c"} expect := []any{"a", "b", "c"}
assert := internal.NewAssert(t, "TestInterfaceSlice")
assert.Equal(expect, InterfaceSlice(strs)) assert.Equal(expect, InterfaceSlice(strs))
} }
@@ -657,6 +664,8 @@ func TestMerge(t *testing.T) {
} }
func TestIntersection(t *testing.T) { func TestIntersection(t *testing.T) {
assert := internal.NewAssert(t, "TestIntersection")
s1 := []int{1, 2, 2, 3} s1 := []int{1, 2, 2, 3}
s2 := []int{1, 2, 3, 4} s2 := []int{1, 2, 3, 4}
s3 := []int{0, 2, 3, 5, 6} s3 := []int{0, 2, 3, 5, 6}
@@ -668,17 +677,15 @@ func TestIntersection(t *testing.T) {
{1, 2, 3}, {1, 2, 3},
{}, {},
} }
res := []any{ result := []any{
Intersection(s1, s2, s3), Intersection(s1, s2, s3),
Intersection(s1, s2), Intersection(s1, s2),
Intersection(s1), Intersection(s1),
Intersection(s1, s4), Intersection(s1, s4),
} }
assert := internal.NewAssert(t, "TestIntersection") for i := 0; i < len(result); i++ {
assert.Equal(expected[i], result[i])
for i := 0; i < len(res); i++ {
assert.Equal(expected[i], res[i])
} }
} }
@@ -711,6 +718,7 @@ func TestDifference(t *testing.T) {
s1 := []int{1, 2, 3, 4, 5} s1 := []int{1, 2, 3, 4, 5}
s2 := []int{4, 5, 6} s2 := []int{4, 5, 6}
assert.Equal([]int{1, 2, 3}, Difference(s1, s2)) assert.Equal([]int{1, 2, 3}, Difference(s1, s2))
} }
@@ -722,6 +730,7 @@ func TestDifferenceWith(t *testing.T) {
isDouble := func(v1, v2 int) bool { isDouble := func(v1, v2 int) bool {
return v2 == 2*v1 return v2 == 2*v1
} }
assert.Equal([]int{1, 5}, DifferenceWith(s1, s2, isDouble)) assert.Equal([]int{1, 5}, DifferenceWith(s1, s2, isDouble))
} }
@@ -733,6 +742,7 @@ func TestDifferenceBy(t *testing.T) {
addOne := func(i int, v int) int { addOne := func(i int, v int) int {
return v + 1 return v + 1
} }
assert.Equal([]int{1, 2}, DifferenceBy(s1, s2, addOne)) assert.Equal([]int{1, 2}, DifferenceBy(s1, s2, addOne))
} }
@@ -848,7 +858,7 @@ func TestSortByFielDesc(t *testing.T) {
err := SortByField(students, "age", "desc") err := SortByField(students, "age", "desc")
assert.IsNil(err) assert.IsNil(err)
assert.Equal(students, studentsOfSortByAge) assert.Equal(studentsOfSortByAge, students)
} }
func TestSortByFieldAsc(t *testing.T) { func TestSortByFieldAsc(t *testing.T) {
@@ -874,7 +884,7 @@ func TestSortByFieldAsc(t *testing.T) {
err := SortByField(students, "age") err := SortByField(students, "age")
assert.IsNil(err) assert.IsNil(err)
assert.Equal(students, studentsOfSortByAge) assert.Equal(studentsOfSortByAge, students)
} }
func TestWithout(t *testing.T) { func TestWithout(t *testing.T) {
@@ -886,10 +896,10 @@ func TestWithout(t *testing.T) {
func TestShuffle(t *testing.T) { func TestShuffle(t *testing.T) {
assert := internal.NewAssert(t, "TestShuffle") assert := internal.NewAssert(t, "TestShuffle")
s := []int{1, 2, 3, 4, 5} numbers := []int{1, 2, 3, 4, 5}
res := Shuffle(s) result := Shuffle(numbers)
assert.Equal(5, len(res)) assert.Equal(5, len(result))
} }
func TestIndexOf(t *testing.T) { func TestIndexOf(t *testing.T) {
@@ -1000,13 +1010,12 @@ func TestKeyBy(t *testing.T) {
return len(str) return len(str)
}) })
assert.Equal(result, map[int]string{1: "a", 2: "ab", 3: "abc"}) assert.Equal(map[int]string{1: "a", 2: "ab", 3: "abc"}, result)
} }
func TestRepeat(t *testing.T) { func TestRepeat(t *testing.T) {
assert := internal.NewAssert(t, "TestRepeat") assert := internal.NewAssert(t, "TestRepeat")
result := Repeat("a", 6) assert.Equal([]string{}, Repeat("a", 0))
assert.Equal([]string{"a", "a", "a", "a", "a", "a"}, Repeat("a", 6))
assert.Equal(result, []string{"a", "a", "a", "a", "a", "a"})
} }