 :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)))
+  ([] (test (testable-syms)))
+  ([sym-or-syms] (test sym-or-syms nil))
+  ([sym-or-syms opts]
+     (->> (collectionize sym-or-syms)
+          (filter (testable-syms opts))
+          (pmap
+           #(test-1 (sym->test-map %) opts)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; test reporting  ;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defn abbrev-result
   "Given a test result, returns an abbreviated version

(in-ns 'clojure.spec.test)
(alias 'stc 'clojure.spec.test.check)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; instrument ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def ^:private ^:dynamic *instrument-enabled*
  "if false, instrumented fns call straight through"
  true)

:spec can be used in combination with :stub or :replace.

Returns a collection of syms naming the vars instrumented."
  ([] (instrument (instrumentable-syms)))
  ([sym-or-syms] (instrument sym-or-syms nil))
  ([sym-or-syms opts]
     (locking instrumented-vars
       (into
        []
        (comp (filter (instrumentable-syms opts))
              (distinct)
              (map #(instrument-1 % opts))
              (remove nil?))
        (collectionize sym-or-syms)))))

(defn unstrument
  "Undoes instrument on the vars named by sym-or-syms, specified
as in instrument. With no args, unstruments all instrumented vars.
Returns a collection of syms naming the vars unstrumented."
  ([] (unstrument (map ->sym (keys @instrumented-vars))))
  ([sym-or-syms]
     (locking instrumented-vars
       (into
        []
        (comp (filter symbol?)
              (map unstrument-1)
              (remove nil?))
        (collectionize sym-or-syms)))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; testing  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn- explain-test
  [args spec v role]
