lnd/fn/map_test.go
Ononiwu Maureen f88f120e91
fn: Added map functions
Signed-off-by: Ononiwu Maureen <59079323+Chinwendu20@users.noreply.github.com>
2024-05-10 09:55:16 +01:00

136 lines
2.4 KiB
Go

package fn
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestKeySet(t *testing.T) {
testMap := map[string]int{"a": 1, "b": 2, "c": 3}
expected := NewSet([]string{"a", "b", "c"}...)
require.Equal(t, expected, KeySet(testMap))
}
// TestNewSubMap tests the NewSubMap function with various input cases.
func TestNewSubMap(t *testing.T) {
tests := []struct {
name string
original map[int]string
keys []int
expected map[int]string
wantErr bool
}{
{
name: "Successful submap creation",
original: map[int]string{
1: "apple",
2: "banana",
3: "cherry",
},
keys: []int{1, 3},
expected: map[int]string{
1: "apple",
3: "cherry",
},
wantErr: false,
},
{
name: "Key not found",
original: map[int]string{
1: "apple",
2: "banana",
},
keys: []int{1, 4},
expected: nil,
wantErr: true,
},
{
name: "Empty keys list",
original: map[int]string{
1: "apple",
2: "banana",
},
keys: []int{},
expected: map[int]string{},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := NewSubMap(tt.original, tt.keys)
if tt.wantErr {
require.ErrorContains(
t, err, "NewSubMap: missing key",
)
require.Nil(t, result)
return
}
require.NoError(t, err)
require.Equal(t, tt.expected, result)
})
}
}
// TestNewSubMapIntersect tests the NewSubMapIntersect function for correctness.
func TestNewSubMapIntersect(t *testing.T) {
tests := []struct {
name string
original map[int]string
keys []int
expected map[int]string
}{
{
name: "Successful intersection",
original: map[int]string{
1: "apple",
2: "banana",
3: "cherry",
4: "date",
},
keys: []int{2, 3, 5},
expected: map[int]string{
2: "banana",
3: "cherry",
},
},
{
name: "No intersection",
original: map[int]string{
1: "apple",
2: "banana",
},
keys: []int{3, 4},
expected: map[int]string{},
},
{
name: "Empty original map",
original: map[int]string{},
keys: []int{1, 2},
expected: map[int]string{},
},
{
name: "Empty keys list",
original: map[int]string{
1: "apple",
2: "banana",
},
keys: []int{},
expected: map[int]string{},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
require.Equal(
t, tt.expected,
NewSubMapIntersect(tt.original, tt.keys))
})
}
}