Esempio n. 1
0
def test_less_or_equal():
    """test the mathematical 'less than or equal to' operator"""
    assert_equals("True", interpret('(<= 1 2)', env))
    assert_equals("True", interpret('(<= 1.1 2.0)', env))
    assert_equals("True", interpret('(<= 1.75 2)', env))
    assert_equals("True", interpret('(<= 2 2)', env))
    assert_equals("False", interpret('(<= 2 1)', env))
Esempio n. 2
0
def test_map():
    """'map' creates a new list by applying a function to each element of another"""
    interpret("""
        (def inc
            (lambda (x) (+ 1 x)))
    """, env)
    assert_equals("(2 3 4)", interpret("(map inc '(1 2 3))", env))
Esempio n. 3
0
def test_insert_sort():
    """'insert-sort' the elements of a list
    
    A simple implementation for insert sort on a linked list of numbers.
    """
    assert_equals("(1 2 3 4 5 6 7)",
                  interpret("(insert-sort '(6 3 7 2 4 1 5))", env))
    assert_equals("()", interpret("'()", env))
Esempio n. 4
0
def test_str_split():
    """'str_split' a string into a list of strings
    """
    assert_equals(
        "'" + '("slow" "loris" "is" "almost" "a" "language")',
        interpret('(str_split "slow loris is almost a language" " ")'))
    assert_equals("'" + '("rock" "lobster" "dinner")',
                  interpret('(str_split "rock lobster dinner" " ")'))
Esempio n. 5
0
def test_filter():
    """'filter' should apply a predicate to every element of a list and return only
    those elements that evaluate 'True'
    """
    interpret(
        """
        (def even
            (lambda (x)
                (eq (mod x 2) 0)))
    """, env)
    assert_equals("(2 4 6)", interpret("(filter even '(1 2 3 4 5 6))", env))
def test_gcd():
    """Tests Greates Common Dividor (GCD)."""

    program = """
        (def gcd
            (lambda (a b)
                (if (eq b 0)
                    a 
                    (gcd b (mod a b)))))
    """

    env = Environment()
    interpret(program, env)

    assert_equals("6", interpret("(gcd 108 30)", env))
    assert_equals("1", interpret("(gcd 17 5)", env))
Esempio n. 7
0
def test_gcd():
    """Tests Greates Common Dividor (GCD)."""

    program = """
        (def gcd
            (lambda (a b)
                (if (eq b 0)
                    a 
                    (gcd b (mod a b)))))
    """

    env = Environment()
    interpret(program, env)

    assert_equals("6", interpret("(gcd 108 30)", env))
    assert_equals("1", interpret("(gcd 17 5)", env))
Esempio n. 8
0
def test_getting_tail_of_rlist():
    """`tail` returns the reverse of the tail of the list.

    That is all the elements except the last."""

    assert_equals("(1 2)", interpret("(rtail '(1 2 3))", Environment()))
    assert_equals([1, 2], evaluate(parse("(rtail '(1 2 3))"), Environment()))
    assert_equals([1, 2], evaluate(['rtail', ['quote', [1, 2, 3]]], Environment()))
Esempio n. 9
0
def test_getting_tail_of_list():
    """`tail` returns the tail of the list.

    The tail is the list retained after removing the first element."""

    assert_equals("(2 3)", interpret("(tail '(1 2 3))", Environment()))
    assert_equals([2, 3], evaluate(parse("(tail '(1 2 3))"), Environment()))
    assert_equals([2, 3], evaluate(['tail', ['quote', [1, 2, 3]]], Environment()))
Esempio n. 10
0
def test_and():
    """test the logical 'and' operator"""
    assert_equals("False", interpret('(and False False)', env))
    assert_equals("False", interpret('(and True False)', env))
    assert_equals("False", interpret('(and False True)', env))
    assert_equals("True", interpret('(and True True)', env))
Esempio n. 11
0
def test_append():
    """'append' should combine two lists together, in the given order"""
    assert_equals("(1 2 3 4 5)", interpret("(append '(1 2) '(3 4 5))", env))
    assert_equals("(True False 'maybe)",
                  interpret("(append '(True) '(False 'maybe))", env))
    assert_equals("()", interpret("(append '() '())", env))
Esempio n. 12
0
def test_reverse():
    """create a list by 'reversing' the order of the elements of another"""
    assert_equals("(4 3 2 1)", interpret("(reverse '(1 2 3 4))", env))
    assert_equals("()", interpret("(reverse '())", env))
Esempio n. 13
0
def test_sum():
    """sum all of the elements in a list using the '+' operator"""
    assert_equals("5", interpret("(sum '(1 1 1 1 1))", env))
    assert_equals("6.5", interpret("(sum '(1.1 1.2 1.3 1.4 1.5))", env))
    assert_equals("10", interpret("(sum '(1 2 3 4))", env))
    assert_equals("0", interpret("(sum '())", env))
Esempio n. 14
0
def test_length():
    """determine the length of a list"""
    assert_equals("5", interpret("(length '(1 2 3 4 5))", env))
    assert_equals("3", interpret("(length '(True '(1 2 3) 'foo-bar))", env))
    assert_equals("0", interpret("(length '())", env))
Esempio n. 15
0
def test_range():
    """'range' creats a list of integers from 'start' to 'end'"""
    assert_equals("(1 2 3 4 5)", interpret("(range 1 5)", env))
    assert_equals("(1)", interpret("(range 1 1)", env))
    assert_equals("()", interpret("(range 2 1)", env))
Esempio n. 16
0
def test_less_than():
    """test the mathematical 'less than' operator"""
    assert_equals("True", interpret('(< 1 2)', env))
    assert_equals("False", interpret('(< 2 2)', env))
    assert_equals("False", interpret('(< 2 1)', env))
Esempio n. 17
0
def test_greater_or_equal():
    """test the mathematical 'greater than or equal to' operator"""
    assert_equals("False", interpret('(>= 1 2)', env))
    assert_equals("True", interpret('(>= 2 2)', env))
    assert_equals("True", interpret('(>= 2 1)', env))
Esempio n. 18
0
def test_xor():
    """test the logical 'exclusive or' operator"""
    assert_equals("False", interpret('(xor False False)', env))
    assert_equals("True", interpret('(xor True False)', env))
    assert_equals("True", interpret('(xor False True)', env))
    assert_equals("False", interpret('(xor True True)', env))
Esempio n. 19
0
def test_range_step():
    """'range-step' creats a list of integers from 'start' to 'end'"""
    assert_equals("(1 5 9 13)", interpret("(range-step 1 15 4)", env))
    assert_equals("(1)", interpret("(range-step 1 1 1)", env))
    assert_equals("()", interpret("(range-step 2 1 1)", env))
Esempio n. 20
0
def test_not():
    """logical operator 'not' should return opposite of given boolean value"""
    assert_equals("True", interpret('(not False)', env))
    assert_equals("False", interpret('(not True)', env))
Esempio n. 21
0
def test_str_append():
    """'str_append' two strings to create a new string
    """
    assert_equals('"hello world"', interpret('(str_append "hello " "world")'))
    assert_equals('"#loveyou"', interpret('(str_append "#" "loveyou")'))