Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Add efficient rseq support #1

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion project.clj
Expand Up @@ -3,7 +3,8 @@
:license {:name "MIT License"
:url "http://opensource.org/licenses/MIT"}
:dependencies []
:profiles {:dev {:dependencies [[org.clojure/clojure "1.6.0"]
:profiles {:dev {:global-vars {*warn-on-reflection* true}
:dependencies [[org.clojure/clojure "1.6.0"]
[collection-check "0.1.2"]
[criterium "0.4.3"]
[primitive-math "0.1.3"]
Expand Down
7 changes: 7 additions & 0 deletions src/immutable_int_map.clj
Expand Up @@ -72,6 +72,13 @@
(seq [this]
(seq (.entries root (java.util.ArrayList.))))

clojure.lang.Reversible
(rseq [this]
(let [^java.util.ArrayList l
(.entries root (java.util.ArrayList.))
n (.size l)]
(for [i (range n)] (.get l (- n i 1)))))

r/CollFold

(coll-fold [this n combinef reducef]
Expand Down
17 changes: 17 additions & 0 deletions test/immutable_int_map_test.clj
Expand Up @@ -15,6 +15,23 @@
(deftest test-map-like
(check/assert-map-like 1e3 (i/int-map) gen/pos-int gen/int))

(defn create-map-from-ints
[coll]
(reduce #(assoc %1 %2 %2) (i/int-map) coll))

(def bunch-of-ints
(gen/fmap distinct (gen/list gen/pos-int)))

(defspec sorted-sequence 1e3
(prop/for-all [xs bunch-of-ints]
(= (keys (seq (create-map-from-ints xs)))
(seq (sort xs)))))

(defspec reverse-sorted-sequence 1e3
(prop/for-all [xs bunch-of-ints]
(= (keys (rseq (create-map-from-ints xs)))
(rseq (vec (sort xs))))))

(def int-map-generator
(gen/fmap
(fn [ks]
Expand Down