Commit | Line | Data |
---|---|---|
3e9b89d4 NB |
1 | ;; Mesure performances. |
2 | ||
13e679cd NB |
3 | (load-file "../lib/load-file-once.mal") |
4 | (load-file-once "../lib/trivial.mal") ; gensym inc | |
26ced15b | 5 | |
3e9b89d4 | 6 | ;; Evaluate an expression, but report the time spent |
f4c8a091 JM |
7 | (defmacro! time |
8 | (fn* (exp) | |
bf6647fb NB |
9 | (let* [start (gensym) |
10 | ret (gensym)] | |
e748a37d NB |
11 | `(let* (~start (time-ms) |
12 | ~ret ~exp) | |
bf6647fb | 13 | (do |
b3f9b5a0 | 14 | (println "Elapsed time:" (- (time-ms) ~start) "msecs") |
bf6647fb | 15 | ~ret))))) |
699f0ad2 | 16 | |
3e9b89d4 | 17 | ;; Count evaluations of a function during a given time frame. |
699f0ad2 | 18 | (def! run-fn-for |
bf6647fb NB |
19 | |
20 | (let* [ | |
21 | run-fn-for* (fn* [fn max-ms acc-ms last-iters] | |
22 | (let* [start (time-ms) | |
23 | _ (fn) | |
24 | elapsed (- (time-ms) start) | |
26ced15b | 25 | iters (inc last-iters) |
bf6647fb NB |
26 | new-acc-ms (+ acc-ms elapsed)] |
27 | ;; (do (prn "new-acc-ms:" new-acc-ms "iters:" iters)) | |
28 | (if (>= new-acc-ms max-ms) | |
29 | last-iters | |
30 | (run-fn-for* fn max-ms new-acc-ms iters)))) | |
31 | ] | |
32 | ||
33 | (fn* [fn max-secs] | |
34 | ;; fn : function without parameters | |
35 | ;; max-secs : number (seconds) | |
36 | ;; return : number (iterations) | |
37 | (do | |
38 | ;; Warm it up first | |
39 | (run-fn-for* fn 1000 0 0) | |
40 | ;; Now do the test | |
41 | (run-fn-for* fn (* 1000 max-secs) 0 0))))) |