diff options
-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 |