102 lines
2.2 KiB
Go
102 lines
2.2 KiB
Go
package h
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestUnique(t *testing.T) {
|
|
t.Parallel()
|
|
slice := []string{"a", "b", "b", "c", "d", "d", "x"}
|
|
unique := Unique(slice, func(item string) string {
|
|
return item
|
|
})
|
|
assert.Equal(t, []string{"a", "b", "c", "d", "x"}, unique)
|
|
}
|
|
|
|
func TestFilter(t *testing.T) {
|
|
t.Parallel()
|
|
slice := []string{"a", "b", "b", "c", "d", "d", "x"}
|
|
filtered := Filter(slice, func(item string) bool {
|
|
return item == "b"
|
|
})
|
|
assert.Equal(t, []string{"b", "b"}, filtered)
|
|
}
|
|
|
|
func TestMap(t *testing.T) {
|
|
t.Parallel()
|
|
slice := []string{"a", "b", "c"}
|
|
mapped := Map(slice, func(item string) string {
|
|
return strings.ToUpper(item)
|
|
})
|
|
assert.Equal(t, []string{"A", "B", "C"}, mapped)
|
|
}
|
|
|
|
func TestGroupBy(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
type Item struct {
|
|
Name string
|
|
Job string
|
|
}
|
|
|
|
items := []Item{
|
|
{Name: "Alice", Job: "Developer"},
|
|
{Name: "Bob", Job: "Designer"},
|
|
{Name: "Charlie", Job: "Developer"},
|
|
{Name: "David", Job: "Designer"},
|
|
{Name: "Eve", Job: "Developer"},
|
|
{Name: "Frank", Job: "Product Manager"},
|
|
}
|
|
|
|
grouped := GroupBy(items, func(item Item) string {
|
|
return item.Job
|
|
})
|
|
|
|
assert.Equal(t, 3, len(grouped))
|
|
assert.Equal(t, 3, len(grouped["Developer"]))
|
|
assert.Equal(t, 2, len(grouped["Designer"]))
|
|
assert.Equal(t, 1, len(grouped["Product Manager"]))
|
|
}
|
|
|
|
func TestGroupByOrdered(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
type Item struct {
|
|
Name string
|
|
Job string
|
|
}
|
|
|
|
items := []Item{
|
|
{Name: "Alice", Job: "Developer"},
|
|
{Name: "Bob", Job: "Designer"},
|
|
{Name: "Charlie", Job: "Developer"},
|
|
{Name: "David", Job: "Designer"},
|
|
{Name: "Eve", Job: "Developer"},
|
|
{Name: "Frank", Job: "Product Manager"},
|
|
}
|
|
|
|
grouped := GroupByOrdered(items, func(item Item) string {
|
|
return item.Job
|
|
})
|
|
|
|
keys := []string{"Developer", "Designer", "Product Manager"}
|
|
assert.Equal(t, keys, grouped.Keys())
|
|
|
|
devs, ok := grouped.Get("Developer")
|
|
assert.True(t, ok)
|
|
assert.Equal(t, 3, len(devs))
|
|
assert.Equal(t, "Alice", devs[0].Name)
|
|
assert.Equal(t, "Charlie", devs[1].Name)
|
|
assert.Equal(t, "Eve", devs[2].Name)
|
|
}
|
|
|
|
func TestFind(t *testing.T) {
|
|
t.Parallel()
|
|
slice := []string{"a", "b", "c"}
|
|
found := Find(slice, func(item *string) bool {
|
|
return *item == "b"
|
|
})
|
|
assert.Equal(t, "b", *found)
|
|
}
|