| package util |
| |
| import ( |
| "sort" |
| "testing" |
| |
| "github.com/stretchr/testify/require" |
| ) |
| |
| func TestStringSets(t *testing.T) { |
| ret := NewStringSet([]string{"abc", "abc"}, []string{"efg", "abc"}).Keys() |
| sort.Strings(ret) |
| require.Equal(t, []string{"abc", "efg"}, ret) |
| |
| require.Empty(t, NewStringSet().Keys()) |
| require.Equal(t, []string{"abc"}, NewStringSet([]string{"abc"}).Keys()) |
| require.Equal(t, []string{"abc"}, NewStringSet([]string{"abc", "abc", "abc"}).Keys()) |
| } |
| |
| func TestStringSetCopy(t *testing.T) { |
| someKeys := []string{"gamma", "beta", "alpha"} |
| orig := NewStringSet(someKeys) |
| copy := orig.Copy() |
| |
| delete(orig, "alpha") |
| orig["mu"] = true |
| |
| require.True(t, copy["alpha"]) |
| require.True(t, copy["beta"]) |
| require.True(t, copy["gamma"]) |
| require.False(t, copy["mu"]) |
| |
| delete(copy, "beta") |
| copy["nu"] = true |
| |
| require.False(t, orig["alpha"]) |
| require.True(t, orig["beta"]) |
| require.True(t, orig["gamma"]) |
| require.True(t, orig["mu"]) |
| require.False(t, orig["nu"]) |
| |
| require.Nil(t, (StringSet(nil)).Copy()) |
| } |
| |
| func TestStringSetKeys(t *testing.T) { |
| expectedKeys := []string{"gamma", "beta", "alpha"} |
| s := NewStringSet(append(expectedKeys, expectedKeys...)) |
| keys := s.Keys() |
| require.Equal(t, 3, len(keys)) |
| require.True(t, In("alpha", keys)) |
| require.True(t, In("beta", keys)) |
| require.True(t, In("gamma", keys)) |
| |
| s = nil |
| keys = s.Keys() |
| require.Empty(t, keys) |
| } |
| |
| func TestStringSetIntersect(t *testing.T) { |
| someKeys := []string{"gamma", "beta", "alpha"} |
| otherKeys := []string{"mu", "nu", "omicron"} |
| a := NewStringSet(append(someKeys, otherKeys...)) |
| b := NewStringSet(someKeys) |
| c := a.Intersect(b) |
| |
| keys := c.Keys() |
| require.Equal(t, 3, len(keys)) |
| require.True(t, In("alpha", keys)) |
| require.True(t, In("beta", keys)) |
| require.True(t, In("gamma", keys)) |
| |
| d := b.Intersect(a) |
| keys = d.Keys() |
| require.Equal(t, 3, len(keys)) |
| require.True(t, In("alpha", keys)) |
| require.True(t, In("beta", keys)) |
| require.True(t, In("gamma", keys)) |
| } |
| |
| func TestStringSetComplement(t *testing.T) { |
| someKeys := []string{"gamma", "beta", "alpha"} |
| otherKeys := []string{"mu", "nu", "omicron"} |
| a := NewStringSet(append(someKeys, otherKeys...)) |
| b := NewStringSet(someKeys) |
| c := a.Complement(b) |
| |
| keys := c.Keys() |
| require.Equal(t, 3, len(keys)) |
| require.True(t, In("mu", keys)) |
| require.True(t, In("nu", keys)) |
| require.True(t, In("omicron", keys)) |
| |
| d := b.Complement(a) |
| require.Empty(t, d.Keys()) |
| } |
| |
| func TestStringSetUnion(t *testing.T) { |
| someKeys := []string{"gamma", "beta", "alpha", "zeta"} |
| otherKeys := []string{"mu", "nu", "omicron", "zeta"} |
| a := NewStringSet(otherKeys) |
| b := NewStringSet(someKeys) |
| c := a.Union(b) |
| |
| keys := c.Keys() |
| require.Equal(t, 7, len(keys)) |
| require.True(t, In("alpha", keys)) |
| require.True(t, In("beta", keys)) |
| require.True(t, In("gamma", keys)) |
| require.True(t, In("zeta", keys)) |
| require.True(t, In("mu", keys)) |
| require.True(t, In("nu", keys)) |
| require.True(t, In("omicron", keys)) |
| |
| d := b.Union(a) |
| keys = d.Keys() |
| require.Equal(t, 7, len(keys)) |
| require.True(t, In("alpha", keys)) |
| require.True(t, In("beta", keys)) |
| require.True(t, In("gamma", keys)) |
| require.True(t, In("zeta", keys)) |
| require.True(t, In("mu", keys)) |
| require.True(t, In("nu", keys)) |
| require.True(t, In("omicron", keys)) |
| } |
| |
| func TestStringSetEqual(t *testing.T) { |
| require.True(t, StringSet(nil).Equals(nil)) |
| require.True(t, NewStringSet(nil).Equals(nil)) |
| require.True(t, NewStringSet(nil).Equals(NewStringSet(nil))) |
| require.True(t, NewStringSet([]string{}).Equals(nil)) |
| someKeys := []string{"gamma", "beta", "alpha", "zeta"} |
| require.True(t, NewStringSet(someKeys).Equals(NewStringSet(someKeys))) |
| require.False(t, NewStringSet(someKeys).Equals(NewStringSet(someKeys[:3]))) |
| require.False(t, NewStringSet(someKeys[:3]).Equals(NewStringSet(someKeys))) |
| require.True(t, NewStringSet(someKeys[:1]).Equals(NewStringSet(someKeys[:1]))) |
| require.False(t, NewStringSet(someKeys[:1]).Equals(NewStringSet(someKeys[1:2]))) |
| require.False(t, NewStringSet(someKeys[0:1]).Equals(NewStringSet(someKeys[2:3]))) |
| } |