summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-04-30 11:17:58 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-04-30 11:36:18 -0400
commitd2fce54ccfcf46815524c2af94d1939573c1e9a9 (patch)
tree0cbf2880126d06cd2c1eb3dbfdd026903150cbc5
parent08a9204f8f72cfdc62b27960f4ac71f56afb4a16 (diff)
check when chunked seq goes unchunked, #328
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r--src/clj/clojure/core/protocols.clj10
-rw-r--r--test/clojure/test_clojure/sequences.clj3
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