From c2f671c8dd72f973150d00586e5174bfc9eabe0d Mon Sep 17 00:00:00 2001 From: Oliver Payne Date: Thu, 19 Oct 2023 22:29:06 +0100 Subject: [PATCH] Add test integral from the book --- mceval/test-eval.rkt | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/mceval/test-eval.rkt b/mceval/test-eval.rkt index 8df93ef..67ba7e9 100644 --- a/mceval/test-eval.rkt +++ b/mceval/test-eval.rkt @@ -45,6 +45,23 @@ (if (= a 0) 1 b)) (try 0 (/ 1 0)))) +(define lazy-integral-program + '((define (integral integrand initial-value dt) + (define int + (cons initial-value + (add-lists (scale-list integrand dt) + int))) + int) + + (define (solve f y0 dt) + (define y (integral dy y0 dt)) + (define dy (map f y)) + y) + + (define solution (solve (lambda (x) x) 1 0.001)) + + (list-ref solution 1000))) + (#%require rackunit) (module+ test @@ -60,7 +77,9 @@ (analyzing-eval-program (fib-program 5))) (check-equal? (dd-eval-program (fib-program 5)) (lazy-eval-program (fib-program 5))) - (check-equal? (lazy-eval-program lazy-test-program) 1)) + (check-equal? (lazy-eval-program lazy-test-program) 1) + (check-= (lazy-eval-program lazy-integral-program) 2.7169 0.01) + ) (module+ timing (define dd-fib (time-proc 100 (lambda () (dd-eval-program (fib-program 10)))))