diff options
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | perf.mal | 20 | ||||
| -rw-r--r-- | tests/perf3.mal | 28 |
3 files changed, 51 insertions, 1 deletions
@@ -193,5 +193,7 @@ $(IMPL_PERF): echo 'Running: $(call $(impl)_RUNSTEP,stepA,$(call $(impl)_STEP_TO_PROG,stepA),../tests/perf1.mal)'; \ $(call $(impl)_RUNSTEP,stepA,$(call $(impl)_STEP_TO_PROG,stepA),../tests/perf1.mal); \ echo 'Running: $(call $(impl)_RUNSTEP,stepA,$(call $(impl)_STEP_TO_PROG,stepA),../tests/perf2.mal)'; \ - $(call $(impl)_RUNSTEP,stepA,$(call $(impl)_STEP_TO_PROG,stepA),../tests/perf2.mal)) + $(call $(impl)_RUNSTEP,stepA,$(call $(impl)_STEP_TO_PROG,stepA),../tests/perf2.mal); \ + echo 'Running: $(call $(impl)_RUNSTEP,stepA,$(call $(impl)_STEP_TO_PROG,stepA),../tests/perf3.mal)'; \ + $(call $(impl)_RUNSTEP,stepA,$(call $(impl)_STEP_TO_PROG,stepA),../tests/perf3.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)))) diff --git a/tests/perf3.mal b/tests/perf3.mal new file mode 100644 index 0000000..be66239 --- /dev/null +++ b/tests/perf3.mal @@ -0,0 +1,28 @@ +(load-file "../core.mal") +(load-file "../perf.mal") + +;;(prn "Start: basic macros/atom test") + +(def! atm (atom (list 0 1 2 3 4 5 6 7 8 9))) + +(println "iters/s:" + (run-fn-for + (fn* [] + (do + (or false nil false nil false nil false nil false nil (first @atm)) + (cond false 1 nil 2 false 3 nil 4 false 5 nil 6 "else" (first @atm)) + (-> (deref atm) rest rest rest rest rest rest first) + (swap! atm (fn* [a] (concat (rest a) (list (first a))))))) + 10)) + +;;(def! sumdown (fn* (N) (if (> N 0) (+ N (sumdown (- N 1))) 0))) +;;(def! fib (fn* (N) (if (= N 0) 1 (if (= N 1) 1 (+ (fib (- N 1)) (fib (- N 2))))))) +;; +;;(println "iters/s:" +;; (run-fn-for +;; (fn* [] +;; (do +;; (sumdown 10) +;; (fib 12))) +;; 3)) +;;(prn "Done: basic macros/atom test") |
