diff options
author | Stuart Halloway <stu@thinkrelevance.com> | 2010-04-30 11:17:58 -0400 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-04-30 11:36:18 -0400 |
commit | d2fce54ccfcf46815524c2af94d1939573c1e9a9 (patch) | |
tree | 0cbf2880126d06cd2c1eb3dbfdd026903150cbc5 | |
parent | 08a9204f8f72cfdc62b27960f4ac71f56afb4a16 (diff) |
check when chunked seq goes unchunked, #328
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r-- | src/clj/clojure/core/protocols.clj | 10 | ||||
-rw-r--r-- | test/clojure/test_clojure/sequences.clj | 3 |
2 files changed, 9 insertions, 4 deletions
diff --git a/src/clj/clojure/core/protocols.clj b/src/clj/clojure/core/protocols.clj index 737345d1..bcf4f7b5 100644 --- a/src/clj/clojure/core/protocols.clj +++ b/src/clj/clojure/core/protocols.clj @@ -24,11 +24,13 @@ (internal-reduce [s f val] (if-let [s (seq s)] - (recur (chunk-next s) - f - (.reduce (chunk-first s) f val)) + (if (chunked-seq? s) + (recur (chunk-next s) + f + (.reduce (chunk-first s) f val)) + (internal-reduce s f val)) val)) - + clojure.lang.StringSeq (internal-reduce [str-seq f val] diff --git a/test/clojure/test_clojure/sequences.clj b/test/clojure/test_clojure/sequences.clj index 6cc5c47f..5c71e174 100644 --- a/test/clojure/test_clojure/sequences.clj +++ b/test/clojure/test_clojure/sequences.clj @@ -18,6 +18,9 @@ ; apply, map, filter, remove ; and more... +(deftest test-reduce-from-chunked-into-unchunked + (= [1 2 \a \b] (into [] (concat [1 2] "ab")))) + (deftest test-reduce (let [int+ (fn [a b] (+ (int a) (int b))) arange (range 100) ;; enough to cross nodes |