Slices & maps comparision.

This commit is contained in:
Andrey Smirnov
2013-12-18 12:08:35 +04:00
parent 0b3ab49602
commit 148bbc8b2a
2 changed files with 54 additions and 1 deletions

View File

@@ -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
}

View File

@@ -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)
}