From 1461c4dbcaca93880bf326346f74c5ff4e3b6376 Mon Sep 17 00:00:00 2001 From: Martin Stjernholm Date: Sat, 27 Mar 2021 19:04:05 +0000 Subject: [PATCH] Add FilterListPred. Test: cd build/soong; go test ./android Change-Id: Ibbdd3cbdb822bd2e843096a22cdd08c827b70526 --- android/util.go | 11 +++++++++++ android/util_test.go | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/android/util.go b/android/util.go index 506f8f7b7..a0394f638 100644 --- a/android/util.go +++ b/android/util.go @@ -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) { diff --git a/android/util_test.go b/android/util_test.go index fa26c77ac..09bec01cc 100644 --- a/android/util_test.go +++ b/android/util_test.go @@ -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"}