Example #1
0
    def test_eval_string_recursion(self):
        area = eval_string('''
            (define fact (lambda n (if (<= n 1) 1 (* n (fact (- n 1))))))
            (fact 10)
        ''')
        self.assertEqual(area, 3628800)

        expected = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
        self.assertEqual(eval_string('(fact 100)'), expected)
Example #2
0
    def test_expr_from_tokens(self):
        self.assertEqual(
            expr_from_tokens(['(', '1', '2', '3', ')']),
            [1, 2, 3]
        )

        with self.assertRaises(SyntaxError) as cm:
            eval_string('(')
        with self.assertRaises(SyntaxError):
            expr_from_tokens([')'])
        self.assertEqual(str(cm.exception), 'Unexpected ")"')
Example #3
0
 def test_eval_string_define_procedure(self):
     area = eval_string('''
         (define pi 3.14159)
         (define area (lambda (r) (* pi (* r r))))
         (area 3)
     ''')
     self.assertEqual(area, 28.27431)
Example #4
0
 def test_eval_string(self):
     data = [
         ('100', 100),
         ('100 200', 200),
         ('(+ 1 2 (+ 30 40 50) 3)', 126),
         ('(* 2 3 (* 5 6 7) 4)', 5040),
         ('(- 100 (- (- 50 20) 5))', 75),
         ('(/ 360 (/ (/ 60 2) 10))', 120),
     ]
     for string, value in data:
         self.assertEqual(eval_string(string), value)
Example #5
0
    def test_eval_string_car_cdr(self):
        count = eval_string('''
            (define first car)
            (define rest cdr)
            (define count (
                lambda (item L)
                    (if L
                        (+ (equal? item (first L)) (count item (rest L)))
                        0
                    )
            ) )
            (count 0 (list 0 1 2 3 0 0))
        ''')
        self.assertEqual(count, 3)

        count2 = eval_string('''
            (count
                (quote the)
                (quote (the more the merrier the bigger the better))
            )
        ''')
        self.assertEqual(count2, 4)
Example #6
0
 def test_eval_string_lambda(self):
     proc = eval_string('(lambda (x) (+ x 4))')
     self.assertEqual(proc(10), 14)
Example #7
0
 def test_eval_string_with_vars(self):
     env = Env({'a':2, 'b':30, 'c':4}, global_env)
     self.assertEqual(eval_string('(+ a 3 (+ b 40 50) c)', env), 129)