   {:pre [(example? source)
 	 (instance? Throwable throwable)]}
   (TestThrown. source states throwable))
+
+(defn skip
+  ([source] (skip source nil))
+  ([source reason]
+     {:pre [(example? source)
+	    (nil-or string? reason)]}
+     (TestSkipped. source reason)))
+
+(defn pending
+  ([source] (pending source nil))
+  ([source reason]
+     {:pre [(example? source)
+	    (nil-or string? reason)]}
+     (TestPending. source reason)))

    (success? [this] true)
    (pending? [this] false)
    (error? [this] false)
    (container? [this] false))

(defrecord TestFailed [source states]

    (success? [this] (every? success? children))
    (pending? [this] (if (seq children) false true))
    (error? [this] false)
    (skipped? [this] false)
    (container? [this] true))

(defrecord TestPassed [source states]
