Implement step 1
[jackhill/mal.git] / perf.mal
CommitLineData
f4c8a091
JM
1(defmacro! time
2 (fn* (exp)
7f567f36
JM
3 `(let* (start_FIXME (time-ms)
4 ret_FIXME ~exp)
f4c8a091
JM
5 (do
6 (prn (str "Elapsed time: " (- (time-ms) start_FIXME) " msecs"))
7 ret_FIXME))))
699f0ad2
JM
8
9(def! run-fn-for*
10 (fn* [fn max-ms acc-ms iters]
11 (let* [start (time-ms)
12 _ (fn)
13 elapsed (- (time-ms) start)
14 new-iters (+ 1 iters)
15 new-acc-ms (+ acc-ms elapsed)]
16 ;(do (prn "here:" new-acc-ms "/" max-ms "iters:" new-iters) )
17 (if (>= new-acc-ms max-ms)
18 (/ (* max-ms iters) new-acc-ms)
19 (run-fn-for* fn max-ms new-acc-ms new-iters)))))
20
21(def! run-fn-for
22 (fn* [fn max-secs]
23 (do
24 ;; Warm it up first
25 (run-fn-for* fn 1000 0 0)
26 ;; Now do the test
27 (/ (run-fn-for* fn (* 1000 max-secs) 0 0) 3))))