PageRenderTime 51ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/test/chainmap/test/core.clj

http://github.com/ghoseb/chainmap
Clojure | 60 lines | 52 code | 8 blank | 0 comment | 2 complexity | 46d8fbf9aa73c3aef9c615031772013b MD5 | raw file
  1. (ns chainmap.test.core
  2. (:refer-clojure :exclude [parents])
  3. (:use [chainmap.core])
  4. (:use [clojure.test]))
  5. (def local {:x 1})
  6. (def prod {:x 10 :y 20})
  7. (def default {:x 100 :y 200 :z 300})
  8. (def cm (chainmap local prod default))
  9. (deftest test-chainmap-proto
  10. (are [x y] (= x y)
  11. '() (maps (chainmap))
  12. (list local prod default) (maps cm)
  13. (apply chainmap (list prod default)) (parents cm)
  14. (list {} local prod default) (maps (add-child cm))))
  15. (deftest test-chainmap-impl
  16. (are [x y] (= x y)
  17. 1 (:x cm)
  18. 20 (:y cm)
  19. 300 (:z cm)
  20. 1 (cm :x)
  21. '(:z :y :x) (keys cm)
  22. '(300 20 1) (vals cm)
  23. 42 (:z (assoc cm :z 42))
  24. '([:z 300] [:y 20] [:x 1]) (seq cm)
  25. 10 (:x (dissoc cm :x))
  26. 100 (:x (dissoc (parents cm) :x))
  27. true (contains? cm :y)
  28. [:y 20] (find cm :y)
  29. '([:y 20] [:x 1]) (filter (fn [[k v]] (< v 100)) cm)
  30. (chainmap {:x 1 :y 20}) (merge {:x 1 :y 2} {:y 20})
  31. (chainmap {:x 1} {:y 2} {:z 3}) (chainmap {:x 1} {:y 2} {:z 3})
  32. cm (reduce add-child (empty cm) (reverse (maps cm)))
  33. "#ChainMap<({:x 2} {:y 2, :x 1} {:z 2, :y 1, :x 0})>" (pr-str (chainmap {:x 2} {:x 1 :y 2} {:x 0 :y 1 :z 2}))))
  34. (comment
  35. (let [N (iterate inc 0)
  36. m1 (doall (zipmap (take 100 N) (repeat 1)))
  37. m2 (doall (zipmap (take 100 (drop 50 N)) (repeat 2)))
  38. m3 (doall (zipmap (take 100 (drop 100 N)) (repeat 3)))
  39. m4 (doall (zipmap (take 100 (drop 150 N)) (repeat 4)))
  40. m5 (doall (zipmap (take 100 (drop 200 N)) (repeat 5)))
  41. ms [m1 m2 m3 m4 m5]
  42. rms (doall (reverse ms))
  43. ks (doall (take 100 (map first (partition 3 N))))]
  44. (time (dotimes [_ 100]
  45. (dotimes [_ 100]
  46. (let [c (apply chainmap ms)]
  47. (doall (map c ks))))))
  48. (time (dotimes [_ 100]
  49. (dotimes [_ 100]
  50. (let [x (apply merge rms)]
  51. (doall (map x ks)))))))
  52. )