def test_map(given, expected):
    lst = LIST
    for el in reversed(given):
        lst = PREPEND(lst)(el)
    result = MAP(ADD(TWO))(lst)
    decoded = [decode_number(n) for n in decode_list(result)]
    assert decoded == expected
def test_filter(given, expected):
    lst = LIST
    for el in given:
        lst = APPEND(lst)(el)
    result = FILTER(LTE(TWO))(lst)
    decoded = [decode_number(n) for n in decode_list(result)]
    assert decoded == expected
def test_range(start, end, expected):
    result = RANGE(start)(end)
    decoded = [decode_number(n) for n in decode_list(result)]
    assert decoded == expected
def test_reverse(given):
    lst = LIST
    for el in given:
        lst = PREPEND(lst)(el)
    assert decode_list(REVERSE(lst)) == given
def test_append(given):
    lst = LIST
    for el in given:
        lst = APPEND(lst)(el)
    assert decode_list(lst) == given
def test_prepend(given):
    lst = LIST
    for el in reversed(given):
        lst = PREPEND(lst)(el)
    assert decode_list(lst) == given
def test_take(given, number, expected):
    lst = LIST
    for el in given:
        lst = APPEND(lst)(el)
    result = TAKE(number)(lst)
    assert decode_list(result) == expected