aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--perf.mal20
-rw-r--r--tests/perf3.mal28
3 files changed, 51 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 47c7829..e30a6f6 100644
--- a/Makefile
+++ b/Makefile
@@ -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))
diff --git a/perf.mal b/perf.mal
index 94da2ff..83bbc0d 100644
--- 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))))
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")