pkgs/misc: add Merge function (MR 22)
For keys/values from one dict into another
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021 Clayton Craft <clayton@craftyguy.net>
|
// Copyright 2022 Clayton Craft <clayton@craftyguy.net>
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
package misc
|
package misc
|
||||||
@@ -48,3 +48,11 @@ func FreeSpace(path string) (uint64, error) {
|
|||||||
size := stat.Bavail * uint64(stat.Bsize)
|
size := stat.Bavail * uint64(stat.Bsize)
|
||||||
return size, nil
|
return size, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Merge the contents of "b" into "a", overwriting any previously existing keys
|
||||||
|
// in "a"
|
||||||
|
func Merge(a map[string]string, b map[string]string) {
|
||||||
|
for k, v := range b {
|
||||||
|
a[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
71
pkgs/misc/misc_test.go
Normal file
71
pkgs/misc/misc_test.go
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
// Copyright 2022 Clayton Craft <clayton@craftyguy.net>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
package misc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMerge(t *testing.T) {
|
||||||
|
subtests := []struct {
|
||||||
|
name string
|
||||||
|
inA map[string]string
|
||||||
|
inB map[string]string
|
||||||
|
expected map[string]string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "empty B",
|
||||||
|
inA: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
"banana": "airplane",
|
||||||
|
},
|
||||||
|
inB: map[string]string{},
|
||||||
|
expected: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
"banana": "airplane",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "empty A",
|
||||||
|
inA: map[string]string{},
|
||||||
|
inB: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
"banana": "airplane",
|
||||||
|
},
|
||||||
|
expected: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
"banana": "airplane",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "both populated, some duplicates",
|
||||||
|
inA: map[string]string{
|
||||||
|
"bar": "bazz",
|
||||||
|
"banana": "yellow",
|
||||||
|
"guava": "green",
|
||||||
|
},
|
||||||
|
inB: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
"banana": "airplane",
|
||||||
|
},
|
||||||
|
expected: map[string]string{
|
||||||
|
"foo": "bar",
|
||||||
|
"guava": "green",
|
||||||
|
"banana": "airplane",
|
||||||
|
"bar": "bazz",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, st := range subtests {
|
||||||
|
t.Run(st.name, func(t *testing.T) {
|
||||||
|
out := st.inA
|
||||||
|
Merge(out, st.inB)
|
||||||
|
if !reflect.DeepEqual(st.expected, out) {
|
||||||
|
t.Fatalf("expected: %q, got: %q\n", st.expected, out)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user