From 0e59c36d03dfeeec4176c17afc65216464b35680 Mon Sep 17 00:00:00 2001 From: Natasha Sarkar Date: Mon, 2 Nov 2020 18:08:27 -0800 Subject: [PATCH] added StringList set --- kyaml/sets/sets_test.go | 54 +++++++++++++++++++++++++++++++ kyaml/sets/{sets.go => string.go} | 0 kyaml/sets/stringlist.go | 44 +++++++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 kyaml/sets/sets_test.go rename kyaml/sets/{sets.go => string.go} (100%) create mode 100644 kyaml/sets/stringlist.go diff --git a/kyaml/sets/sets_test.go b/kyaml/sets/sets_test.go new file mode 100644 index 000000000..8fe5b1692 --- /dev/null +++ b/kyaml/sets/sets_test.go @@ -0,0 +1,54 @@ +// Copyright 2019 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package sets + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestStringList_Len(t *testing.T) { + var sl0 StringList = [][]string{} + assert.Equal(t, 0, sl0.Len()) + + var sl1 StringList = [][]string{ + {""}, + } + assert.Equal(t, 1, sl1.Len()) + + var sl2 StringList = [][]string{ + {"a", "b"}, + {"b", "c"}, + } + assert.Equal(t, 2, sl2.Len()) +} + +func TestStringList_Insert(t *testing.T) { + var sl StringList + assert.Equal(t, 0, sl.Len()) + + sl = sl.Insert([]string{"a", "b", "c"}) + assert.Equal(t, 1, sl.Len()) + + sl = sl.Insert([]string{"c", "b", "a"}) + assert.Equal(t, 2, sl.Len()) + + sl = sl.Insert([]string{"a", "b", "c"}) + assert.Equal(t, 2, sl.Len()) +} + +func TestStringList_Has(t *testing.T) { + var sl StringList + + assert.False(t, sl.Has([]string{})) + assert.False(t, sl.Has([]string{"a", "b", "c"})) + + sl = sl.Insert([]string{"a", "b", "c"}) + assert.True(t, sl.Has([]string{"a", "b", "c"})) + assert.False(t, sl.Has([]string{"b", "c", "a"})) + + sl = sl.Insert([]string{}) + assert.True(t, sl.Has([]string{})) +} diff --git a/kyaml/sets/sets.go b/kyaml/sets/string.go similarity index 100% rename from kyaml/sets/sets.go rename to kyaml/sets/string.go diff --git a/kyaml/sets/stringlist.go b/kyaml/sets/stringlist.go new file mode 100644 index 000000000..c3181cac9 --- /dev/null +++ b/kyaml/sets/stringlist.go @@ -0,0 +1,44 @@ +// Copyright 2019 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package sets + +// StringList is a set, where each element of +// the set is a string slice. +type StringList [][]string + +func (s StringList) Len() int { + return len(s) +} + +func (s StringList) Insert(val []string) StringList { + if !s.Has(val) { + return append(s, val) + } + return s +} + +func (s StringList) Has(val []string) bool { + if len(s) == 0 { + return false + } + + for i := range s { + if isStringSliceEqual(s[i], val) { + return true + } + } + return false +} + +func isStringSliceEqual (s []string, t []string) bool { + if len(s) != len(t) { + return false + } + for i := range s { + if s[i] != t[i] { + return false + } + } + return true +}