From 148bbc8b2ac40fc62d926cd544a7217b008f3bf8 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Wed, 18 Dec 2013 12:08:35 +0400 Subject: [PATCH] Slices & maps comparision. --- utils/list.go | 34 +++++++++++++++++++++++++++++++++- utils/list_test.go | 21 +++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/utils/list.go b/utils/list.go index e6a259a6..5907350b 100644 --- a/utils/list.go +++ b/utils/list.go @@ -6,7 +6,7 @@ import ( // StringsIsSubset checks that subset is strict subset of full, and returns // error formatted with errorFmt otherwise -func StringsIsSubset(subset []string, full []string, errorFmt string) error { +func StringsIsSubset(subset, full []string, errorFmt string) error { for _, checked := range subset { found := false for _, s := range full { @@ -21,3 +21,35 @@ func StringsIsSubset(subset []string, full []string, errorFmt string) error { } return nil } + +// StrSlicesEqual compares two slices for equality +func StrSlicesEqual(s1, s2 []string) bool { + if len(s1) != len(s2) { + return false + } + + for i, s := range s1 { + if s != s2[i] { + return false + } + } + + return true +} + +// StrMapsEqual compares two map[string]string +func StrMapsEqual(m1, m2 map[string]string) bool { + if len(m1) != len(m2) { + return false + } + + for k, v := range m1 { + v2, ok := m2[k] + if !ok || v != v2 { + return false + } + } + + return true + +} diff --git a/utils/list_test.go b/utils/list_test.go index 0fe335b9..01817054 100644 --- a/utils/list_test.go +++ b/utils/list_test.go @@ -16,3 +16,24 @@ func (s *ListSuite) TestStringsIsSubset(c *C) { err = StringsIsSubset([]string{"b", "a"}, []string{"b", "c"}, "[%s]") c.Assert(err, ErrorMatches, "\\[a\\]") } + +func (s *ListSuite) TestStrSlicesEqual(c *C) { + c.Check(StrSlicesEqual(nil, nil), Equals, true) + c.Check(StrSlicesEqual(nil, []string{}), Equals, true) + c.Check(StrSlicesEqual([]string{}, nil), Equals, true) + c.Check(StrSlicesEqual([]string{"a", "b"}, []string{"a", "b"}), Equals, true) + + c.Check(StrSlicesEqual(nil, []string{"a"}), Equals, false) + c.Check(StrSlicesEqual([]string{"a", "c"}, []string{"a", "b"}), Equals, false) +} + +func (s *ListSuite) TestStrMapsEqual(c *C) { + c.Check(StrMapsEqual(map[string]string{}, nil), Equals, true) + c.Check(StrMapsEqual(nil, map[string]string{}), Equals, true) + c.Check(StrMapsEqual(nil, nil), Equals, true) + c.Check(StrMapsEqual(map[string]string{"a": "1", "b": "2"}, map[string]string{"a": "1", "b": "2"}), Equals, true) + + c.Check(StrMapsEqual(map[string]string{"a": "1", "b": "2"}, map[string]string{"a": "1", "b": "3"}), Equals, false) + c.Check(StrMapsEqual(map[string]string{"a": "1", "b": "2"}, map[string]string{"a": "1", "c": "2"}), Equals, false) + c.Check(StrMapsEqual(map[string]string{"a": "1", "b": "2"}, map[string]string{"a": "1"}), Equals, false) +}