 
 ;;; Testing
 
+(require 'clojure.test)
+
 (defn test-conexp
   "Runs tests for conexp. If with-contrib? is given and true, tests
   conexp.contrib.tests too."
   ([] (test-conexp false))
   ([with-contrib?]
      (if with-contrib?
-       (do (require 'clojure.test
-                    'conexp.tests
+       (do (require 'conexp.tests
                     'conexp.contrib.tests)
            (clojure.test/run-tests 'conexp.tests
                                    'conexp.contrib.tests))
-       (do (require 'clojure.test
-                    'conexp.tests)
+       (do (require 'conexp.tests)
            (clojure.test/run-tests 'conexp.tests)))))
 
 (defmacro tests-to-run

                 (if-not result#
                   ~(let [vars (vec (remove keyword? (take-nth 2 bindings)))]
                      `(do (println "Test failed for" '~vars "being" ~vars)
                           (is false)))
                   (is true))))
            body)))

;;; Types

  current namespace, before all other tests in supplied as arguments."
  [& namespaces]
  `(defn ~'test-ns-hook []
     (clojure.test/test-all-vars '~(ns-name *ns*))
     (doseq [ns# '~namespaces]
       (let [result# (do (require ns#) (clojure.test/test-ns ns#))]
         (dosync
          (ref-set clojure.test/*report-counters*
                   (merge-with + @clojure.test/*report-counters* result#)))))))

(defmacro with-testing-data
  "Expects for all bindings the body to be evaluated to true. bindings
