Add benchmarks to test transient navigators
This commit is contained in:
parent
399e5661f1
commit
bafe10036f
1 changed files with 44 additions and 0 deletions
|
|
@ -1,6 +1,7 @@
|
|||
(ns com.rpl.specter.benchmarks
|
||||
(:use [com.rpl.specter]
|
||||
[com.rpl.specter macros]
|
||||
[com.rpl.specter.transient]
|
||||
[com.rpl.specter.impl :only [benchmark]])
|
||||
(:require [clojure.walk :as walk]))
|
||||
|
||||
|
|
@ -141,3 +142,46 @@
|
|||
(tree-value-transform (fn [e] (if (even? e) (inc e) e)) data)
|
||||
))
|
||||
|
||||
(run-benchmark "transient comparison: building up vectors"
|
||||
6
|
||||
10000
|
||||
(reduce (fn [v i] (conj v i)) [] (range 1000))
|
||||
(reduce (fn [v i] (conj! v i)) (transient []) (range 1000))
|
||||
;; uncomment this when END is fast
|
||||
#_(reduce (fn [v i] (setval [END] [i] v)) [] (range 1000))
|
||||
(setval [END!] (range 1000) (transient []))
|
||||
(reduce (fn [v i] (setval [END!] [i] v)) (transient []) (range 1000)))
|
||||
|
||||
(let [data (vec (range 1000))
|
||||
tdata (transient data)]
|
||||
(run-benchmark "transient comparison: assoc'ing in vectors"
|
||||
6
|
||||
500000
|
||||
(assoc data (rand-int 1000) 0)
|
||||
(assoc! tdata (rand-int 1000) 0)
|
||||
(setval [(keypath (rand-int 1000))] 0 data)
|
||||
(setval [(keypath! (rand-int 1000))] 0 tdata)))
|
||||
|
||||
(let [data (into {} (for [k (range 1000)]
|
||||
[k (rand)]))
|
||||
tdata (transient data)]
|
||||
(run-benchmark "transient comparison: assoc'ing in maps"
|
||||
6
|
||||
500000
|
||||
(assoc data (rand-int 1000) 0)
|
||||
(assoc! tdata (rand-int 1000) 0)
|
||||
(setval [(keypath (rand-int 1000))] 0 data)
|
||||
(setval [(keypath! (rand-int 1000))] 0 tdata)))
|
||||
|
||||
(defn modify-submap
|
||||
[m]
|
||||
(assoc m 0 1 458 89))
|
||||
|
||||
(let [data (into {} (for [k (range 1000)]
|
||||
[k (rand)]))
|
||||
tdata (transient data)]
|
||||
(run-benchmark "transient comparison: submap"
|
||||
6
|
||||
300000
|
||||
(transform [(submap [(rand-int 1000)])] modify-submap data)
|
||||
(transform [(submap! [(rand-int 1000)])] modify-submap tdata)))
|
||||
|
|
|
|||
Loading…
Reference in a new issue