diff --git a/frontend/dev/bench.cljs b/frontend/dev/bench.cljs new file mode 100644 index 000000000..cf2a40632 --- /dev/null +++ b/frontend/dev/bench.cljs @@ -0,0 +1,48 @@ +(ns bench + (:require + [app.common.data :as d] + [app.common.geom.point :as gpt] + [app.common.geom.shapes.rect :as gsr] + [app.common.perf :as perf] + [clojure.spec.alpha :as s] + [clojure.test.check.generators :as gen])) + +(def points + (gen/sample (s/gen ::gpt/point) 20)) + +(defn points->rect + [points] + (when-let [points (seq points)] + (loop [minx ##Inf + miny ##Inf + maxx ##-Inf + maxy ##-Inf + pts points] + (if-let [pt ^boolean (first pts)] + (let [x (d/get-prop pt :x) + y (d/get-prop pt :y)] + (recur (min minx x) + (min miny y) + (max maxx x) + (max maxy y) + (rest pts))) + (when (d/num? minx miny maxx maxy) + (gsr/make-rect minx miny (- maxx minx) (- maxy miny))))))) + +(defn bench-points + [] + (perf/benchmark + :f #(gsr/points->rect points) + :name "base") + (perf/benchmark + :f #(points->rect points) + :name "optimized")) + + +(defn main + [& [name]] + (case name + "points" (bench-points) + (println "available: points"))) + + diff --git a/frontend/shadow-cljs.edn b/frontend/shadow-cljs.edn index dd5285eac..bb641ad0c 100644 --- a/frontend/shadow-cljs.edn +++ b/frontend/shadow-cljs.edn @@ -69,10 +69,10 @@ {:target :node-script :output-to "target/bench.js" :output-dir "target/bench/" - :main cljs.user/main + :main bench/main :compiler-options - {:output-feature-set :es8 + {:output-feature-set :es2020 :output-wrapper false :warnings {:fn-deprecated false}}