 
 (declare run-test-case compile-assertion)
 
+;; Context sets up state for TestCases that depend on it.  parents is
+;; a vector of parent Contexts.  before and after are functions.
+;; before takes the same number of arguments as there are parent
+;; Contexts.  after takes the same arguments, plus an additional first
+;; argument, which is the state returned by the before function.
 (deftype Context [parents before after])
 
+;; TestCase represents either a "test", which associates Contexts
+;; and Assertions, or a "test suite", which is a collection of tests.
+;;
+;; contexts is a vector of Contexts.  children is a vector of
+;; Assertions (optionally compiled into Fns) or a vector of other
+;; TestCases.
 (deftype TestCase [contexts children] :as this
   clojure.lang.IFn
   (invoke [] (run-test-case this))

            (catch Throwable t#
              (AssertionThrown '~form t#))))))
 
(defn compile-assertion [a]
  (eval (format-assertion a)))
 
(defmacro assertion [locals & body]
  (format-assertion (Assertion locals (if (= 1 (count body))
                                        (first body) `(do ~@body)))))


  "Truly lazy test execution strategy; uses (unchunked) map1."
  [map1 lazy-strategy])

(defn parallel-strategy
  "Parallel execution strategy; uses pmap."
  []
  [pmap parallel-strategy])

(defn parallel-upto
