From 0eacd26615693e9a51445f96cfa3684729966149 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Fri, 9 Sep 2022 14:12:16 -0700 Subject: [PATCH] pkgs/misc: add Merge function (MR 22) For keys/values from one dict into another --- pkgs/misc/misc.go | 10 +++++- pkgs/misc/misc_test.go | 71 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 pkgs/misc/misc_test.go diff --git a/pkgs/misc/misc.go b/pkgs/misc/misc.go index 4b41184..2908b55 100644 --- a/pkgs/misc/misc.go +++ b/pkgs/misc/misc.go @@ -1,4 +1,4 @@ -// Copyright 2021 Clayton Craft +// Copyright 2022 Clayton Craft // SPDX-License-Identifier: GPL-3.0-or-later package misc @@ -48,3 +48,11 @@ func FreeSpace(path string) (uint64, error) { size := stat.Bavail * uint64(stat.Bsize) 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 + } +} diff --git a/pkgs/misc/misc_test.go b/pkgs/misc/misc_test.go new file mode 100644 index 0000000..2d5e9b8 --- /dev/null +++ b/pkgs/misc/misc_test.go @@ -0,0 +1,71 @@ +// Copyright 2022 Clayton Craft +// 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) + } + }) + } +}