Add basic Makefile
[jackhill/mal.git] / perf.mal
index 94da2ff..83bbc0d 100644 (file)
--- a/perf.mal
+++ b/perf.mal
@@ -5,3 +5,23 @@
       (do
         (prn (str "Elapsed time: " (- (time-ms) start_FIXME) " msecs"))
         ret_FIXME))))
+
+(def! run-fn-for*
+  (fn* [fn max-ms acc-ms iters]
+    (let* [start (time-ms)
+           _ (fn)
+           elapsed (- (time-ms) start)
+           new-iters (+ 1 iters)
+           new-acc-ms (+ acc-ms elapsed)]
+      ;(do (prn "here:" new-acc-ms "/" max-ms "iters:" new-iters) )
+      (if (>= new-acc-ms max-ms)
+        (/ (* max-ms iters) new-acc-ms)
+        (run-fn-for* fn max-ms new-acc-ms new-iters)))))
+
+(def! run-fn-for
+  (fn* [fn max-secs]
+    (do
+      ;; Warm it up first
+      (run-fn-for* fn 1000 0 0)
+      ;; Now do the test
+      (/ (run-fn-for* fn (* 1000 max-secs) 0 0) 3))))