Skip to content

Commit 358077c

Browse files
committed
revived bench/
1 parent 755dafd commit 358077c

14 files changed

Lines changed: 706 additions & 1806 deletions

File tree

bench/bench

Lines changed: 0 additions & 154 deletions
This file was deleted.

bench/bench.clj

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#!/usr/bin/env clojure
2+
3+
"USAGE: ./bench [rebuild]? [<version>|<version-vm> ...]? [<bench-name> ...]?"
4+
5+
(require
6+
'[clojure.edn :as edn]
7+
'[clojure.java.io :as io]
8+
'[clojure.java.shell :as sh]
9+
'[clojure.string :as str])
10+
11+
(defn sh [& cmd]
12+
(let [res (apply sh/sh cmd)]
13+
(when (not= 0 (:exit res))
14+
(throw (ex-info "ERROR" res)))
15+
(str/trim (:out res))))
16+
17+
(defn copy [^java.io.InputStream input ^java.io.Writer output]
18+
(let [^"[C" buffer (make-array Character/TYPE 1024)
19+
in (java.io.InputStreamReader. input "UTF-8")
20+
w (java.io.StringWriter.)]
21+
(loop []
22+
(let [size (.read in buffer 0 (alength buffer))]
23+
(if (pos? size)
24+
(do (.write output buffer 0 size)
25+
(.flush output)
26+
(.write w buffer 0 size)
27+
(recur))
28+
(str w))))))
29+
30+
(defn run [& cmd]
31+
(let [cmd (remove nil? cmd)
32+
proc (.exec (Runtime/getRuntime)
33+
(into-array String cmd)
34+
(@#'sh/as-env-strings sh/*sh-env*)
35+
(io/as-file sh/*sh-dir*))
36+
out (promise)]
37+
(with-open [stdout (.getInputStream proc)
38+
stderr (.getErrorStream proc)]
39+
(future (deliver out (copy stdout *out*)))
40+
(future (copy stderr *err*))
41+
(.close (.getOutputStream proc))
42+
(let [code (.waitFor proc)]
43+
(when (not= code 0)
44+
(throw (ex-info "ERROR" {:cmd cmd :code code})))
45+
@out))))
46+
47+
48+
(def opts
49+
(loop [opts {:rebuild false
50+
:versions []
51+
:benchmarks []}
52+
args *command-line-args*]
53+
(if-some [arg (first args)]
54+
(cond
55+
(= "rebuild" arg)
56+
(recur (assoc opts :rebuild true) (next args))
57+
58+
(re-matches #"(jvm|v8|dtmc)" arg)
59+
(recur (update opts :versions conj ["latest" arg]) (next args))
60+
61+
(re-matches #"(\d+\.\d+\.\d+|latest)" arg)
62+
(recur (update opts :versions conj [arg "jvm"]) (next args))
63+
64+
(re-matches #"(\d+\.\d+\.\d+|latest)-(jvm|v8|dtmc)" arg)
65+
(let [[_ version vm] (re-matches #"(\d+\.\d+\.\d+|latest)-(jvm|v8|dtmc)" arg)]
66+
(recur (update opts :versions conj [version vm]) (next args)))
67+
68+
:else
69+
(recur (update opts :benchmarks conj arg) (next args)))
70+
opts)))
71+
72+
73+
(defn run-benchmarks [version vm benchmarks]
74+
(case vm
75+
"jvm"
76+
(apply run "clojure" "-Sdeps"
77+
(if (= "latest" version)
78+
"{:paths [\"src\" \"../src\" \"../target/classes\"]}"
79+
(str "{:deps {datascript {:mvn/version \"" version "\"}}}"))
80+
"-m" "datascript-bench.datascript"
81+
benchmarks)
82+
83+
"v8"
84+
(apply run "node" "run_v8.js" benchmarks)
85+
86+
"dtmc"
87+
(apply run "clojure" "-Sdeps"
88+
(str "{"
89+
" :paths [\"src\" \"src-dtmc\"]"
90+
" :deps {com.datomic/datomic-free {:mvn/version \"" (if (= "latest" version) "0.9.5703" version) "\"}}"
91+
"}")
92+
"-m" "datascript-bench.datomic"
93+
benchmarks)
94+
))
95+
96+
97+
(def default-benchmarks
98+
["add-1"
99+
"add-5"
100+
"add-all"
101+
"init"
102+
"retract-5"
103+
"q1"
104+
"q2"
105+
"q3"
106+
"q4"
107+
"qpred1"
108+
"qpred2"])
109+
110+
111+
(def default-versions
112+
[["latest" "jvm"]])
113+
114+
115+
(binding [sh/*sh-env* (merge {} (System/getenv) {})
116+
sh/*sh-dir* "."]
117+
(let [{:keys [rebuild benchmarks versions]} opts]
118+
(when rebuild
119+
(binding [sh/*sh-dir* ".."]
120+
(run "lein" "do" "clean," "javac," "cljsbuild" "once" "bench")))
121+
(let [benchmarks (if (empty? benchmarks) default-benchmarks benchmarks)
122+
versions (if (empty? versions) default-versions versions)]
123+
(print "version \t")
124+
(doseq [b benchmarks] (print b "\t"))
125+
(println)
126+
(doseq [[version vm] versions]
127+
(print (str version "-" vm) "\t")
128+
(flush)
129+
(run-benchmarks version vm benchmarks)))))
130+
131+
(shutdown-agents)
132+
; (System/exit 0)

bench/project.clj

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)