                   (assoc :project project))
               opts))))
 
-(defn verify-impl [project {:keys [enc] :as opts}]
+(defn verify-impl
+  "Given a project name like 'transit-java', 'transit-clj' or
+  'transit-ruby', and user provided options, run tests for each
+  encoding specified in the options. Encoding can be either `:json` or
+  `:msgpack`."
+  [project {:keys [enc] :as opts}]
   (doseq [e (if enc [enc] [:json :msgpack])]
     (run-test project e opts)))
 
-(defn verify-all [{:keys [impls] :as opts}]
+(defn verify-all
+  "Given user provided options, run all tests specified by the
+  options. If options is an empty map then run all tests against all
+  implementations for both encodings."
+  [{:keys [impls] :as opts}]
   (let [root (io/file "../")
         testable-impls (keep #(let [script (io/file root (str % "/bin/roundtrip"))]
                                 (when (.exists script) %))

(ns transit.verify
  "Provides tools for testing all transit implementations at
  once. Tests each implementaion with several sources of data:
  exemplar files, problem edn data, problem transit data and generated
  data. In addition, it can capture comparative timing results.

  From the REPL, the main entry point is `verify-all` which takes an

                        :count (count transit-exemplars)
                        :encoding encoding})}])))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Running Tests

(defn verify-impl-encoding
  "Given a command string, an encoding and user provided options, run
  a collection of tests against a specific implementation of
  transit. The tests which are run are determined by the provided
  options and the encoding. The implementation which is tested is
  determined by the provided command string."
  [command encoding opts]
  (assert (contains? extension encoding)
          (str "encoding must be on of" (keys extension)))
  (let [proc (start-process command encoding)
