Add util method HasIntersection(...)

Introduces a util method `HasIntersection(...)`, which returns true if
the two input lists have non-empty intersection.

Test: m nothing --no-skip-soong-tests
Bug: 338660802
Change-Id: I861a60e1973c92a773c127dfc595ad7514d7972f
This commit is contained in:
Jihoon Kang
2024-06-26 22:11:02 +00:00
parent f86fe9a876
commit b7e1a48376
2 changed files with 55 additions and 0 deletions

View File

@@ -201,6 +201,12 @@ func ListSetDifference[T comparable](l1, l2 []T) (bool, []T, []T) {
return listsDiffer, diff1, diff2
}
// Returns true if the two lists have common elements.
func HasIntersection[T comparable](l1, l2 []T) bool {
_, a, b := ListSetDifference(l1, l2)
return len(a)+len(b) < len(setFromList(l1))+len(setFromList(l2))
}
// Returns true if the given string s is prefixed with any string in the given prefix list.
func HasAnyPrefix(s string, prefixList []string) bool {
for _, prefix := range prefixList {

View File

@@ -818,3 +818,52 @@ func TestReverseSlice(t *testing.T) {
})
}
}
var hasIntersectionTestCases = []struct {
name string
l1 []string
l2 []string
expected bool
}{
{
name: "empty",
l1: []string{"a", "b", "c"},
l2: []string{},
expected: false,
},
{
name: "both empty",
l1: []string{},
l2: []string{},
expected: false,
},
{
name: "identical",
l1: []string{"a", "b", "c"},
l2: []string{"a", "b", "c"},
expected: true,
},
{
name: "duplicates",
l1: []string{"a", "a", "a"},
l2: []string{"a", "b", "c"},
expected: true,
},
{
name: "duplicates with no intersection",
l1: []string{"d", "d", "d", "d"},
l2: []string{"a", "b", "c"},
expected: false,
},
}
func TestHasIntersection(t *testing.T) {
for _, testCase := range hasIntersectionTestCases {
t.Run(testCase.name, func(t *testing.T) {
hasIntersection := HasIntersection(testCase.l1, testCase.l2)
if !reflect.DeepEqual(hasIntersection, testCase.expected) {
t.Errorf("expected %#v, got %#v", testCase.expected, hasIntersection)
}
})
}
}