func (stringSetSuite) TestUninitialized(c *C) { var uninitialized set.Strings c.Assert(uninitialized.Size(), Equals, 0) c.Assert(uninitialized.IsEmpty(), Equals, true) // You can get values and sorted values from an unitialized set. AssertValues(c, uninitialized) // All contains checks are false c.Assert(uninitialized.Contains("foo"), Equals, false) // Remove works on an uninitialized Strings uninitialized.Remove("foo") var other set.Strings // Union returns a new set that is empty but initialized. c.Assert(uninitialized.Union(other), DeepEquals, set.NewStrings()) c.Assert(uninitialized.Intersection(other), DeepEquals, set.NewStrings()) c.Assert(uninitialized.Difference(other), DeepEquals, set.NewStrings()) other = set.NewStrings("foo", "bar") c.Assert(uninitialized.Union(other), DeepEquals, other) c.Assert(uninitialized.Intersection(other), DeepEquals, set.NewStrings()) c.Assert(uninitialized.Difference(other), DeepEquals, set.NewStrings()) c.Assert(other.Union(uninitialized), DeepEquals, other) c.Assert(other.Intersection(uninitialized), DeepEquals, set.NewStrings()) c.Assert(other.Difference(uninitialized), DeepEquals, other) // Once something is added, the set becomes initialized. uninitialized.Add("foo") AssertValues(c, uninitialized, "foo") }
// Helper methods for the tests. func AssertValues(c *C, s set.Strings, expected ...string) { values := s.Values() // Expect an empty slice, not a nil slice for values. if expected == nil { expected = []string{} } sort.Strings(expected) sort.Strings(values) c.Assert(values, DeepEquals, expected) c.Assert(s.Size(), Equals, len(expected)) // Check the sorted values too. sorted := s.SortedValues() c.Assert(sorted, DeepEquals, expected) }