From 2491ad52c1a138a6c09ada53f6703fbdd479cc89 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Tue, 5 Apr 2022 16:34:23 -0700 Subject: [PATCH] Add mksort implementation Bug: 218736658 Test: ./out/rbcrun ./build/make/tests/run.rbc Change-Id: I0069e7059453c16d299cc650f56c320d905f1958 --- core/product_config.rbc | 15 +++++++++++++++ tests/run.rbc | 3 +++ 2 files changed, 18 insertions(+) diff --git a/core/product_config.rbc b/core/product_config.rbc index 018725186a..8617fa178b 100644 --- a/core/product_config.rbc +++ b/core/product_config.rbc @@ -676,6 +676,20 @@ def _mkpatsubst(pattern, replacement, s): return out_words if type(s) == "list" else " ".join(out_words) +def _mksort(input): + """Emulate Make's sort. + + This is unique from a regular sort in that it also strips + the input, and removes duplicate words from the input. + """ + input = sorted(__words(input)) + result = [] + for w in input: + if len(result) == 0 or result[-1] != w: + result.append(w) + return result + + def _mkstrip(s): """Emulates Make's strip. @@ -785,6 +799,7 @@ rblf = struct( mkerror = _mkerror, mkpatsubst = _mkpatsubst, mkwarning = _mkwarning, + mksort = _mksort, mkstrip = _mkstrip, mksubst = _mksubst, notdir = _notdir, diff --git a/tests/run.rbc b/tests/run.rbc index 82a5e727ca..58cc4d6517 100644 --- a/tests/run.rbc +++ b/tests/run.rbc @@ -32,6 +32,9 @@ def assert_eq(expected, actual): fail("Expected '%s', got '%s'" % (expected, actual)) # Unit tests for non-trivial runtime functions +assert_eq(["a", "b", "c"], rblf.mksort("b a c c")) +assert_eq(["a", "b", "c"], rblf.mksort(["b", "a", "c", "c"])) + assert_eq("", rblf.mkstrip(" \n \t ")) assert_eq("a b c", rblf.mkstrip(" a b \n c \t")) assert_eq(1, rblf.mkstrip(1))