Files
go-utils/maputils/maputils_test.go
2023-11-06 13:54:50 +08:00

140 lines
2.6 KiB
Go

package maputils_test
import (
"sort"
"testing"
"github.com/stretchr/testify/assert"
"github.com/tx7do/go-utils/maputils"
)
func TestKeys(t *testing.T) {
var daysMap = map[string]int{
"Sunday": 1,
"Monday": 2,
"Tuesday": 3,
"Wednesday": 4,
"Thursday": 5,
"Friday": 6,
"Saturday": 7,
}
keys := maputils.Keys(daysMap)
days := []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
sort.Strings(days)
sort.Strings(keys)
assert.Equal(t, days, keys)
}
func TestValues(t *testing.T) {
var daysMap = map[string]int{
"Sunday": 1,
"Monday": 2,
"Tuesday": 3,
"Wednesday": 4,
"Thursday": 5,
"Friday": 6,
"Saturday": 7,
}
values := maputils.Values(daysMap)
sort.Ints(values)
assert.Equal(t, []int{1, 2, 3, 4, 5, 6, 7}, values)
}
func TestMerge(t *testing.T) {
first := map[string]string{
"George": "Harrison",
"Betty": "Davis",
}
second := map[string]string{
"Ronald": "Reagen",
"Betty": "Stewart",
}
assert.Equal(t,
map[string]string{
"George": "Harrison",
"Betty": "Stewart",
"Ronald": "Reagen",
}, maputils.Merge(first, second))
}
func TestForEach(t *testing.T) {
var daysMap = map[string]int{
"Sunday": 1,
"Monday": 2,
"Tuesday": 3,
"Wednesday": 4,
"Thursday": 5,
"Friday": 6,
"Saturday": 7,
}
sum := 0
maputils.ForEach(daysMap, func(_ string, day int) {
sum += day
})
assert.Equal(t, 28, sum)
}
func TestDrop(t *testing.T) {
var daysMap = map[string]int{
"Sunday": 1,
"Monday": 2,
"Tuesday": 3,
"Wednesday": 4,
"Thursday": 5,
"Friday": 6,
"Saturday": 7,
}
expectedResult := map[string]int{
"Sunday": 1,
"Friday": 6,
}
assert.Equal(t, expectedResult, maputils.Drop(daysMap, []string{"Monday", "Tuesday", "Wednesday", "Thursday", "Saturday"}))
// ensure we do not modify the original value
assert.Equal(t, expectedResult, daysMap)
}
func TestCopy(t *testing.T) {
var daysMap = map[string]int{
"Sunday": 1,
"Monday": 2,
"Tuesday": 3,
"Wednesday": 4,
"Thursday": 5,
"Friday": 6,
"Saturday": 7,
}
daysCopy := maputils.Copy(daysMap)
assert.Equal(t, daysMap, daysCopy)
delete(daysCopy, "Sunday")
assert.NotEqual(t, daysMap, daysCopy)
}
func TestFilter(t *testing.T) {
var daysMap = map[string]int{
"Sunday": 1,
"Monday": 2,
"Tuesday": 3,
"Wednesday": 4,
"Thursday": 5,
"Friday": 6,
"Saturday": 7,
}
var expectedResult = map[string]int{
"Monday": 2,
"Wednesday": 4,
"Friday": 6,
}
filteredDays := maputils.Filter(daysMap, func(_ string, value int) bool {
return value%2 == 0
})
assert.Equal(t, expectedResult, filteredDays)
}