aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Sierra <mail@stuartsierra.com>2008-11-17 01:26:53 +0000
committerStuart Sierra <mail@stuartsierra.com>2008-11-17 01:26:53 +0000
commitfacfbecd912d043d464237185c726882f429398f (patch)
treee43b367be839738d67ddb04ca2551e0ca2d6c9ef
parent76bc4f1f19f85b246963b3da1eece3b5400820a4 (diff)
test_is.clj: *test-out* defaults to *out*; added each= and all-true
-rw-r--r--src/clojure/contrib/test_clojure/numbers.clj68
-rw-r--r--src/clojure/contrib/test_is.clj26
2 files changed, 61 insertions, 33 deletions
diff --git a/src/clojure/contrib/test_clojure/numbers.clj b/src/clojure/contrib/test_clojure/numbers.clj
index 0e5432ad..54431a9f 100644
--- a/src/clojure/contrib/test_clojure/numbers.clj
+++ b/src/clojure/contrib/test_clojure/numbers.clj
@@ -16,54 +16,62 @@
(deftest Coerced-Byte
(let [v (byte 3)]
- (is (instance? Byte v))
- (is (number? v))
- (is (integer? v))
- (is (rational? v))))
+ (all-true
+ (instance? Byte v)
+ (number? v)
+ (integer? v)
+ (rational? v))))
(deftest Coerced-Short
(let [v (short 3)]
- (is (instance? Short v))
- (is (number? v))
- (is (integer? v))
- (is (rational? v))))
+ (all-true
+ (instance? Short v)
+ (number? v)
+ (integer? v)
+ (rational? v))))
(deftest Coerced-Integer
(let [v (int 3)]
- (is (instance? Integer v))
- (is (number? v))
- (is (integer? v))
- (is (rational? v))))
+ (all-true
+ (instance? Integer v)
+ (number? v)
+ (integer? v)
+ (rational? v))))
(deftest Coerced-Long
(let [v (long 3)]
- (is (instance? Long v))
- (is (number? v))
- (is (integer? v))
- (is (rational? v))))
+ (all-true
+ (instance? Long v)
+ (number? v)
+ (integer? v)
+ (rational? v))))
(deftest Coerced-BigInteger
(let [v (bigint 3)]
- (is (instance? BigInteger v))
- (is (number? v))
- (is (integer? v))
- (is (rational? v))))
+ (all-true
+ (instance? BigInteger v)
+ (number? v)
+ (integer? v)
+ (rational? v))))
(deftest Coerced-Float
(let [v (float 3)]
- (is (instance? Float v))
- (is (number? v))
- (is (float? v))))
+ (all-true
+ (instance? Float v)
+ (number? v)
+ (float? v))))
(deftest Coerced-Double
(let [v (double 3)]
- (is (instance? Double v))
- (is (number? v))
- (is (float? v))))
+ (all-true
+ (instance? Double v)
+ (number? v)
+ (float? v))))
(deftest Coerced-BigDecimal
(let [v (bigdec 3)]
- (is (instance? BigDecimal v))
- (is (number? v))
- (is (decimal? v))
- (is (not (float? v)))))
+ (all-true
+ (instance? BigDecimal v)
+ (number? v)
+ (decimal? v)
+ (not (float? v)))))
diff --git a/src/clojure/contrib/test_is.clj b/src/clojure/contrib/test_is.clj
index 8374b772..9ea0edcc 100644
--- a/src/clojure/contrib/test_is.clj
+++ b/src/clojure/contrib/test_is.clj
@@ -49,12 +49,13 @@
;; need to recompile functions after changing a macro definition.
-(ns clojure.contrib.test-is)
+(ns clojure.contrib.test-is
+ (:import (java.io PrintWriter)))
(def
#^{:doc "PrintWriter to which test results are printed; defaults to
- System.err."}
- *test-out* (. System err))
+ Standard Output."}
+ *test-out* (PrintWriter. *out*))
;;; PRIVATE
@@ -195,6 +196,25 @@
(failure (str "expected " ~(pr-str form) " to throw " ~class
", but threw " e#) ~message)))))
+(defmacro all-true
+ "Convenience macro; every body expression is tested with 'is'."
+ [& body]
+ `(do ~@(map (fn [expr] (list 'is expr))
+ body)))
+
+(defmacro each=
+ "Convenience macro for doing a bunch of equality tests. Same as
+ doing (is (= ...)) on each pair.
+
+ (each= (test-expr-1) expected-value1
+ (test-expr-2) expected-value2
+ (test-expr-3) expected-value3)
+ "
+ [& forms]
+ `(all-true
+ ~@(map (fn [[expr expected]] (list '= expr expected))
+ (partition 2 forms))))
+
(defn print-results
"Prints a summary of the results from test-ns to *test-out*."
[r]