Add FilterListPred.

Test: cd build/soong; go test ./android
Change-Id: Ibbdd3cbdb822bd2e843096a22cdd08c827b70526
This commit is contained in:
Martin Stjernholm 2021-03-27 19:04:05 +00:00
parent 32312eb75a
commit 1461c4dbca
2 changed files with 20 additions and 0 deletions

View File

@ -193,6 +193,17 @@ func FilterList(list []string, filter []string) (remainder []string, filtered []
return
}
// FilterListPred returns the elements of the given list for which the predicate
// returns true. Order is kept.
func FilterListPred(list []string, pred func(s string) bool) (filtered []string) {
for _, l := range list {
if pred(l) {
filtered = append(filtered, l)
}
}
return
}
// RemoveListFromList removes the strings belonging to the filter list from the
// given list and returns the result
func RemoveListFromList(list []string, filter_out []string) (result []string) {

View File

@ -18,6 +18,7 @@ import (
"fmt"
"reflect"
"strconv"
"strings"
"testing"
)
@ -299,6 +300,14 @@ func TestFilterList(t *testing.T) {
}
}
func TestFilterListPred(t *testing.T) {
pred := func(s string) bool { return strings.HasPrefix(s, "a/") }
AssertArrayString(t, "filter", FilterListPred([]string{"a/c", "b/a", "a/b"}, pred), []string{"a/c", "a/b"})
AssertArrayString(t, "filter", FilterListPred([]string{"b/c", "a/a", "b/b"}, pred), []string{"a/a"})
AssertArrayString(t, "filter", FilterListPred([]string{"c/c", "b/a", "c/b"}, pred), []string{})
AssertArrayString(t, "filter", FilterListPred([]string{"a/c", "a/a", "a/b"}, pred), []string{"a/c", "a/a", "a/b"})
}
func TestRemoveListFromList(t *testing.T) {
input := []string{"a", "b", "c", "d", "a", "c", "d"}
filter := []string{"a", "c"}