   (ct/report-trial property num-trials num-trials)
   {:result true :num-tests num-trials :seed seed})
 
+(defn not-falsey-or-exception?
+  "True if the value is not falsy or an exception"
+  [value]
+  (and value (not (instance? Throwable value))))
+
 (defn quick-check
   "Tests `property` `num-tests` times.
 

   :depth depth
   :result (:result smallest)
   :smallest (:args smallest)})

(defn not-falsey-or-exception?
  "True if the value is not falsy or an exception"
  [value]
  (and value (not (instance? Throwable value))))

(defn- shrink-loop
  "Shrinking a value produces a sequence of smaller values of the same type.

           depth 0]
      (if (empty? nodes)
        (smallest-shrink total-nodes-visited depth current-smallest)
        (let [[head & tail] nodes
              result (:result (gen/rose-root head))]
          (if (not-falsey-or-exception? result)
            ;; this node passed the test, so now try testing its right-siblings
            (recur tail current-smallest (inc total-nodes-visited) depth)
            ;; this node failed the test, so check if it has children,
            ;; if so, traverse down them. If not, save this as the best example
            ;; seen now and then look at the right-siblings
            ;; children
            (let [children (gen/rose-children head)]
              (if (empty? children)
                (recur tail (gen/rose-root head) (inc total-nodes-visited) depth)
                (recur children (gen/rose-root head) (inc total-nodes-visited) (inc depth))))))))))

(defn- failure
  [property failing-rose-tree trial-number size seed]
