Guest User

Untitled

a guest
Nov 18th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. (require '[criterium.core :refer [quick-bench]])
  2. (require '[clojure.core.reducers :as r])
  3. (import 'java.util.concurrent.atomic.AtomicInteger)
  4. (set! *warn-on-reflection* true)
  5.  
  6. (def data
  7. (into []
  8. (map hash-map
  9. (repeat :samplevalue)
  10. (concat
  11. (range 1e5)
  12. (range 1e5)
  13. (range 1e5)
  14. (range 1e5)
  15. (range 1e5)))))
  16.  
  17. (quick-bench
  18. (reduce + (map (constantly 1) (filter #(= 75584 (:samplevalue %)) data))))
  19. ;; Execution time mean : 47.112245 ms
  20.  
  21. (quick-bench
  22. (count (filter #(= 75584 (:samplevalue %)) data)))
  23. ;; Execution time mean : 32.594683 ms
  24.  
  25. (quick-bench
  26. (count
  27. (seq
  28. (eduction
  29. (map :samplevalue)
  30. data
  31. (filter #(= 75584 %))))))
  32. ;; Execution time mean : 25.140066 ms
  33.  
  34. (quick-bench
  35. (transduce
  36. (comp
  37. (map :samplevalue)
  38. (filter #(= 75584 %))
  39. (map (constantly 1)))
  40. +
  41. data))
  42. ;; Execution time mean : 25.215213 ms
  43.  
  44. (quick-bench
  45. (r/fold +
  46. ((comp
  47. (map :samplevalue)
  48. (filter #(= 75584 %))
  49. (map (constantly 1))) +)
  50. data))
  51. ;; Execution time mean : 13.732841 ms
  52.  
  53. (let [cnt (AtomicInteger. 0)
  54. combinef (fn ([] cnt) ([_ _]))
  55. rf (fn [^AtomicInteger cnt _] (.incrementAndGet cnt) cnt)
  56. reducef ((comp (map :samplevalue) (filter #(= 75584 %))) rf)]
  57. (quick-bench
  58. (do
  59. (r/fold combinef reducef data)
  60. (long cnt))))
  61. ;; Execution time mean : 13.525181 ms
Add Comment
Please, Sign In to add comment