racket/collects/tests/mzscheme/ltest.ss
2005-05-27 18:56:37 +00:00

89 lines
1.8 KiB
Scheme

(printf "nested loop~n")
(time
(let loop ([n 10000])
(unless (zero? n)
(let loop2 ([m 10])
(if (zero? m)
(loop (sub1 n))
(loop2 (sub1 m)))))))
(printf "single loop~n")
(time
(let loop ([n 100000])
(unless (zero? n)
(loop (sub1 n)))))
(printf "Y loop~n")
(time
((lambda (f n) (f f n))
(lambda (loop n)
(unless (zero? n)
(loop loop (sub1 n))))
100000))
(printf "let closure recur~n")
(time
(let ([f (lambda (x) (sub1 x))])
(let loop ([n 100000])
(unless (zero? n)
(loop (f n))))))
(printf "direct closure recur~n")
(time
(let loop ([n 100000])
(unless (zero? n)
(loop ((lambda (x) (sub1 x)) n)))))
(printf "direct closure recur if~n")
(time
(let loop ([n 100000])
(if (zero? n)
(void)
(loop ((lambda (x) (sub1 x)) n)))))
(printf "let closure top-level~n")
(define loop
(let ([f (lambda (x) (sub1 x))])
(lambda (n)
(unless (zero? n)
(loop (f n))))))
(time (loop 100000))
(printf "direct closure top-level~n")
(define loop
(lambda (n)
(unless (zero? n)
(loop ((lambda (x) (sub1 x)) n)))))
(time (loop 100000))
; > (load "ltest.ss")
; cpu time: 1820 real time: 1826
; cpu time: 1420 real time: 1422
; cpu time: 1960 real time: 1957
; cpu time: 2630 real time: 2626
; > (load "ltest.ss")
; cpu time: 1790 real time: 1803
; cpu time: 1430 real time: 1468
; cpu time: 2150 real time: 2159
; cpu time: 2820 real time: 2824
; > (load "ltest.ss")
; nested loop
; cpu time: 1750 real time: 1817
; single loop
; cpu time: 1430 real time: 1425
; Y loop
; cpu time: 1500 real time: 1500
; let closure recur
; cpu time: 1830 real time: 1835
; direct closure recur
; cpu time: 1790 real time: 1791
; direct closure recur if
; cpu time: 1800 real time: 1793
; let closure top-level
; cpu time: 1810 real time: 1804
; direct closure top-level
; cpu time: 1760 real time: 1758