aboutsummaryrefslogtreecommitdiff
path: root/src/clojure
diff options
context:
space:
mode:
authorTom Faulhaber <git_net@infolace.com>2009-07-05 09:19:51 -0700
committerTom Faulhaber <git_net@infolace.com>2009-07-05 09:19:51 -0700
commitd6e7b65cdc0b9432b0b13215ac5ccf2e2ef81631 (patch)
treee53327fc35375518e10738bc3ec8007e972d73d7 /src/clojure
parent02b4ae1309c09b25d06210796bd60680f2a95114 (diff)
Handle 0 correctly in non-java-supported bases
Diffstat (limited to 'src/clojure')
-rw-r--r--src/clojure/contrib/pprint/cl-format.clj21
-rw-r--r--src/clojure/contrib/test_contrib/pprint/cl_format.clj4
2 files changed, 16 insertions, 9 deletions
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"