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:
@@ -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 {
|
||||
|
@@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user