def test_basics(self): code = """ (set! x 3) (+ x 2) (if y p q) (define a (if (= 2 3) (* 3 3) (* 4 4))) """ tokens = tokenize(code) actT = [] while tokens: actT.append(parse(tokens)) expT = [['set!', 'x', 3], ['+', 'x', 2], ['if', 'y', 'p', 'q'], ['define', 'a', ['if', ['=', 2, 3], ['*', 3, 3], ['*', 4, 4]]]] self.assertEqual(expT, actT)
def test_empty_expression(self): code = '()' tokens = tokenize(code) self.assertEqual(tokens, ['(', ')'])
def test_expression_with_constant(self): code = '(set! x 23)' tokens = tokenize(code) self.assertEqual(tokens, ['(', 'set!', 'x', '23', ')'])
def test_set_expression(self): code = '(+ x y)' tokens = tokenize(code) self.assertEqual(tokens, ['(', '+', 'x', 'y', ')'])