Exemplo n.º 1
0
    def test_can_create_new_function(self):
        # Create a square function (which will be added to the environment)
        env = Environment()
        square_function = "(defun square(x)(* x x)))"
        Evaluator.evaluate(Parser.parse(Tokenizer.tokenize(square_function)), env)
        self.assertTrue(env.get("square"))

        # Call the square function
        call_square_function = "(square 9)"
        returned_value = Evaluator.evaluate(Parser.parse(Tokenizer.tokenize(call_square_function)), env)
        self.assertEqual(returned_value, 81)
Exemplo n.º 2
0
 def test_can_parse_function_definition(self):
     tokens = ["(", "defun", "square", "(", "x", ")", "(", "*", "x", "x", ")", ")" ]
     parse_tree = Parser.parse(tokens)
     self.assertEqual(len(parse_tree), 1)
     self.assertEqual(type(parse_tree[0]), Procedure) 
     self.assertEqual("square", parse_tree[0].name)
     self.assertEqual(len(parse_tree[0].arguments), 1)
Exemplo n.º 3
0
 def test_can_parse_simple_tokens(self):
     tokens = ["(", "*", "a", "b", ")"]
     parse_tree = Parser.parse(tokens)
     self.assertEqual(type(parse_tree), list)
     self.assertEqual(len(parse_tree), 3)
     self.assertEqual(type(parse_tree[0]), Operator) 
     self.assertEqual(type(parse_tree[1]), Symbol) 
     self.assertEqual(type(parse_tree[2]), Symbol) 
Exemplo n.º 4
0
 def test_can_parse_nested_expression(self):
     tokens = ["(", "+", "2.3", "(", "*", "4.5", "3", ")", ")"]
     parse_tree = Parser.parse(tokens)
     self.assertEqual(len(parse_tree), 3)
     self.assertEqual(type(parse_tree[0]), Operator) 
     self.assertEqual(type(parse_tree[1]), Number) 
     self.assertEqual(type(parse_tree[2]), list)
     self.assertEqual(len(parse_tree[2]), 3)
     self.assertEqual(type(parse_tree[2][0]), Operator)
Exemplo n.º 5
0
 def test_can_parse_floating_point_numbers(self):
     tokens = ["(", "3.14", ")"]
     parse_tree = Parser.parse(tokens)
     self.assertEqual(len(parse_tree), 1)
     self.assertEqual(type(parse_tree[0]), Number)