     (update (dissoc x ::stc/ret) :spec s/describe)))
 
 (defn summarize-results
-  "Given a collection of test-results, e.g. from 'test',
-pretty prints the abbrev-result of each.
+  "Given a collection of test-results, e.g. from 'test', pretty
+prints the summary-result (default abbrev-result) of each.
 
 Returns a map with :total, the total number of results, plus a
 key with a count for each different :type of result."
-  [test-results]
-  (reduce
-   (fn [summary result]
-     (pp/pprint (abbrev-result result))
-     (-> summary
-         (update :total inc)
-         (update (:type result) (fnil inc 0))))
-   {:total 0}
-   test-results))
-
-
-
+  ([test-results] (summarize-results test-results abbrev-result))
+  ([test-results summary-result]
+     (reduce
+      (fn [summary result]
+        (pp/pprint (summary-result result))
+        (-> summary
+            (update :total inc)
+            (update (:type result) (fnil inc 0))))
+      {:total 0}
+       test-results)))
+
+
+

:no-gen     unable to generate :args
:no-fn      unable to resolve fn to test
"
  ([syms] (test syms nil))
  ([syms opts]
     (validate-opts opts)
     (pmap #(test-1 (sym->test-map %) opts) syms)))

(defn abbrev-result
  "Given a test result, returns an abbreviated version

  [opts]
  (reduce into #{} [(:stub opts) (keys (:replace opts)) (keys (:spec opts))]))

(defn- fn-spec-name?
  [s]
  (symbol? s))

(defn instrumentable-syms
  "Given an opts map as per instrument, returns the set of syms
that can be instrumented."
  ([] (instrumentable-syms nil))
  ([opts]
     (assert (every? ident? (keys (:gen opts))) "instrument :gen expects ident keys")
     (reduce into #{} [(filter fn-spec-name? (keys (s/registry)))
                       (keys (:spec opts))
                       (:stub opts)
                       (keys (:replace opts))])))

(defn instrument
  "Instruments the vars named by sym-or-syms, a symbol or collection
of symbols, or all instrumentable vars if sym-or-syms is not
specified.

If a var has an :args fn-spec, sets the var's root binding to a
fn that checks arg conformance (throwing an exception on failure)
before delegating to the original fn.

The opts map can be used to override registered specs, and/or to
replace fn implementations entirely. Opts for symbols not included
in sym-or-syms are ignored. This facilitates sharing a common
options map across many different calls to instrument.

The opts map may have the following keys:

  :spec     a map from var-name symbols to override specs
  :stub     a set of var-name symbols to be replaced by stubs
  :gen      a map from spec names to generator overrides
  :replace  a map from var-name symbols to replacement fns

