From 306ff2282a7415a0e3e4822b61fb6151761f98a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Marczyk?= Date: Mon, 21 Jan 2013 01:46:12 +0100 Subject: [PATCH] CLJS-459: fix reduce-kv node visit order for sorted maps Includes a basic test. --- src/cljs/cljs/core.cljs | 8 ++++---- test/cljs/cljs/core_test.cljs | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cljs/cljs/core.cljs b/src/cljs/cljs/core.cljs index 2fa742a6f8..019362ee9b 100644 --- a/src/cljs/cljs/core.cljs +++ b/src/cljs/cljs/core.cljs @@ -5030,12 +5030,12 @@ reduces them without incurring seq initialization" (throw (js/Error. "red-black tree invariant violation")))) (defn- tree-map-kv-reduce [node f init] - (let [init (f init (.-key node) (.-val node))] + (let [init (if-not (nil? (.-left node)) + (tree-map-kv-reduce (.-left node) f init) + init)] (if (reduced? init) @init - (let [init (if-not (nil? (.-left node)) - (tree-map-kv-reduce (.-left node) f init) - init)] + (let [init (f init (.-key node) (.-val node))] (if (reduced? init) @init (let [init (if-not (nil? (.-right node)) diff --git a/test/cljs/cljs/core_test.cljs b/test/cljs/cljs/core_test.cljs index 2b41ad75b4..84e4787c63 100644 --- a/test/cljs/cljs/core_test.cljs +++ b/test/cljs/cljs/core_test.cljs @@ -1773,6 +1773,10 @@ (let [x (fn [] "overwritten")] (assert (= "original" (y))))) + ;; CLJS-459: reduce-kv visit order + (assert (= (reduce-kv conj [] (sorted-map :foo 1 :bar 2)) + [:bar 2 :foo 1])) + ;; Test builtin implementations of IKVReduce (letfn [(kvr-test [data expect] (assert (= :reduced (reduce-kv (fn [_ _ _] (reduced :reduced))