Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2491ad52 authored by Cole Faust's avatar Cole Faust
Browse files

Add mksort implementation

Bug: 218736658
Test: ./out/rbcrun ./build/make/tests/run.rbc
Change-Id: I0069e7059453c16d299cc650f56c320d905f1958
parent 52233be2
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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,
+3 −0
Original line number Diff line number Diff line
@@ -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))