140 lines
2.6 KiB
Go
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)
|
|
}
|