test for internal definition and letrec
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Mon, 2 Jan 2012 15:14:55 +0000 (20:44 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Mon, 2 Jan 2012 15:14:55 +0000 (20:44 +0530)
src/sicp/metacircular2-test.rkt

index 563b0ec846fb4ac8bd1a3cc75238da83191f00f6..a4c23ea231a8d1b9c1a63be0801d997f84710202 100644 (file)
                             (* x z))
                          env1)
                    39
-                   "let* test"))))
+                   "let* test")
+     (eval '(define (f x)
+              (define (even? n)
+                (if (= n 0)
+                    true
+                    (odd? (- n 1))))
+              (define (odd? n)
+                (if (= n 0)
+                    false
+                    (even? (- n 1))))
+              (odd? x))
+           env1)
+     (check-equal? (eval '(f 2) env1) false "internal definitions")
+     (check-equal? (eval '(f 3) env1) true "internal definitions")
+     (eval '(define (f1 x)
+              (letrec ((even?
+                        (lambda (n)
+                          (if (= n 0)
+                              true
+                              (odd? (- n 1)))))
+                       (odd?
+                        (lambda (n)
+                          (if (= n 0)
+                              false
+                              (even? (- n 1))))))
+                (even? x)))
+           env1)
+     (check-equal? (eval '(f1 2) env1) true "internal definitions")
+     (check-equal? (eval '(f1 3) env1) false "internal definitions"))))
 
 
 (run-tests metacircular2-tests)
\ No newline at end of file