Commit | Line | Data |
---|---|---|
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)))) |