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
|
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.
|
// Returns true if the given string s is prefixed with any string in the given prefix list.
|
||||||
func HasAnyPrefix(s string, prefixList []string) bool {
|
func HasAnyPrefix(s string, prefixList []string) bool {
|
||||||
for _, prefix := range prefixList {
|
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