Add mksort implementation

Bug: 218736658
Test: ./out/rbcrun ./build/make/tests/run.rbc
Change-Id: I0069e7059453c16d299cc650f56c320d905f1958
This commit is contained in:
Cole Faust 2022-04-05 16:34:23 -07:00
parent 52233be25c
commit 2491ad52c1
2 changed files with 18 additions and 0 deletions

View File

@ -676,6 +676,20 @@ def _mkpatsubst(pattern, replacement, s):
return out_words if type(s) == "list" else " ".join(out_words) 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): def _mkstrip(s):
"""Emulates Make's strip. """Emulates Make's strip.
@ -785,6 +799,7 @@ rblf = struct(
mkerror = _mkerror, mkerror = _mkerror,
mkpatsubst = _mkpatsubst, mkpatsubst = _mkpatsubst,
mkwarning = _mkwarning, mkwarning = _mkwarning,
mksort = _mksort,
mkstrip = _mkstrip, mkstrip = _mkstrip,
mksubst = _mksubst, mksubst = _mksubst,
notdir = _notdir, notdir = _notdir,

View File

@ -32,6 +32,9 @@ def assert_eq(expected, actual):
fail("Expected '%s', got '%s'" % (expected, actual)) fail("Expected '%s', got '%s'" % (expected, actual))
# Unit tests for non-trivial runtime functions # 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("", rblf.mkstrip(" \n \t "))
assert_eq("a b c", rblf.mkstrip(" a b \n c \t")) assert_eq("a b c", rblf.mkstrip(" a b \n c \t"))
assert_eq(1, rblf.mkstrip(1)) assert_eq(1, rblf.mkstrip(1))