From 64a82a1c6ccd8a459735542d0920be1548e6fe28 Mon Sep 17 00:00:00 2001
From: Herwig Hochleitner <hhochleitner@gmail.com>
Date: Thu, 1 Nov 2012 02:43:27 +0100
Subject: [PATCH] CLJ-1098: Implement IKVReduce and CollFold for nil

+ added tests
---
 src/clj/clojure/core.clj               |    5 +++++
 src/clj/clojure/core/reducers.clj      |    5 +++++
 test/clojure/test_clojure/reducers.clj |    4 ++++
 3 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 985532a..2347b10 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -6133,6 +6133,11 @@
      (clojure.core.protocols/coll-reduce coll f val)))
 
 (extend-protocol clojure.core.protocols/IKVReduce
+ nil
+ (kv-reduce
+  [_ f init]
+  init)
+
  ;;slow path default
  clojure.lang.IPersistentMap
  (kv-reduce 
diff --git a/src/clj/clojure/core/reducers.clj b/src/clj/clojure/core/reducers.clj
index efe6118..42a4cd9 100644
--- a/src/clj/clojure/core/reducers.clj
+++ b/src/clj/clojure/core/reducers.clj
@@ -340,6 +340,11 @@
          (combinef (f1) (fjjoin t2)))))))
 
 (extend-protocol CollFold
+ nil
+ (coll-fold
+  [coll n combinef reducef]
+  (combinef))
+
  Object
  (coll-fold
   [coll n combinef reducef]
diff --git a/test/clojure/test_clojure/reducers.clj b/test/clojure/test_clojure/reducers.clj
index bd9d3e7..b0c4294 100644
--- a/test/clojure/test_clojure/reducers.clj
+++ b/test/clojure/test_clojure/reducers.clj
@@ -50,3 +50,7 @@
                           (reduced (+ acc k)))
                         0 m))
         "Sorted maps should stop reduction when asked")))
+
+(deftest test-nil
+  (is (= {:k :v} (reduce-kv assoc {:k :v} nil)))
+  (is (= 0 (r/fold + nil))))
-- 
1.7.8.6

