From d6e7b65cdc0b9432b0b13215ac5ccf2e2ef81631 Mon Sep 17 00:00:00 2001 From: Tom Faulhaber Date: Sun, 5 Jul 2009 09:19:51 -0700 Subject: Handle 0 correctly in non-java-supported bases --- src/clojure/contrib/pprint/cl-format.clj | 21 ++++++++++++--------- .../contrib/test_contrib/pprint/cl_format.clj | 4 ++++ 2 files changed, 16 insertions(+), 9 deletions(-) (limited to 'src/clojure') diff --git a/src/clojure/contrib/pprint/cl-format.clj b/src/clojure/contrib/pprint/cl-format.clj index f7bb623c..de547e43 100644 --- a/src/clojure/contrib/pprint/cl-format.clj +++ b/src/clojure/contrib/pprint/cl-format.clj @@ -202,18 +202,21 @@ http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm [nil nil]) val)))) +;;; TODO: xlated-val does not seem to be used here. (defn- base-str "Return val as a string in the given base" [base val] - (let [xlated-val (cond - (float? val) (bigdec val) - (ratio? val) (let [#^clojure.lang.Ratio r val] - (/ (.numerator r) (.denominator r))) - :else val)] - (apply str - (map - #(if (< % 10) (char (+ (int \0) %)) (char (+ (int \a) (- % 10)))) - (remainders base val))))) + (if (zero? val) + "0" + (let [xlated-val (cond + (float? val) (bigdec val) + (ratio? val) (let [#^clojure.lang.Ratio r val] + (/ (.numerator r) (.denominator r))) + :else val)] + (apply str + (map + #(if (< % 10) (char (+ (int \0) %)) (char (+ (int \a) (- % 10)))) + (remainders base val)))))) (def #^{:private true} java-base-formats {8 "%o", 10 "%d", 16 "%x"}) diff --git a/src/clojure/contrib/test_contrib/pprint/cl_format.clj b/src/clojure/contrib/test_contrib/pprint/cl_format.clj index b101b92b..2ddaff76 100644 --- a/src/clojure/contrib/test_contrib/pprint/cl_format.clj +++ b/src/clojure/contrib/test_contrib/pprint/cl_format.clj @@ -33,6 +33,10 @@ (cl-format nil "~D" 'fred) "fred" ) +(simple-tests base-tests + (cl-format nil "~{~2r~^ ~}~%" (range 10)) + "0 1 10 11 100 101 110 111 1000 1001\n") + (simple-tests cardinal-tests (cl-format nil "~R" 0) "zero" (cl-format nil "~R" 4) "four" -- cgit v1.2.3-18-g5258