anchor.diff:  
   One downside to this approach is we are missing what property testing is really good at: automatically generating data across a wide search space to find unexpected problems. 
   
  -The clojure.spec.gen namespace has a number of functions for generator "primitives" as well as "combinators" for combining them into more complicated generators. 
  +The clojure.spec.gen.alpha namespace has a number of functions for generator "primitives" as well as "combinators" for combining them into more complicated generators. 
   
   [NOTE]
   ====
  -Nearly all of the functions in the clojure.spec.gen namespace are merely wrappers that dynamically load functions of the same name in test.check. You should refer to the documentation for https://clojure.github.io/test.check/[test.check] for more details on how all of the clojure.spec.gen generator functions work.
  +Nearly all of the functions in the clojure.spec.gen.alpha namespace are merely wrappers that dynamically load functions of the same name in test.check. You should refer to the documentation for https://clojure.github.io/test.check/[test.check] for more details on how all of the clojure.spec.gen.alpha generator functions work.
   ====
   
   In this case we want our keyword to have open names but fixed namespaces. There are many ways to accomplish this but one of the simplest is to use https://clojure.github.io/clojure/branch-master/clojure.spec-api.html#clojure.spec.gen/fmap[`fmap`] to build up a keyword based on generated strings:
  
positive.code: ;;=> (-1.0 -1.0 -1.5 1.25 -0.5 -1.0 -3.125 -1.5625 1.25 -0.390625)
  ----
  
  To learn more about generators, read the test.check https://clojure.github.io/test.check/intro.html[tutorial] or https://clojure.github.io/test.check/generator-examples.html[examples]. Do keep in mind that while clojure.spec.gen is a large subset of clojure.test.check.generators, not everything is included.
  
  == Instrumentation and Testing
  
  spec provides a set of development and testing functionality in the `clojure.spec.test` namespace, which we can include with:
  
  [source,clojure]
  ----
  (require '[clojure.spec.test :as stest])
  ----
  
  === Instrumentation
  
negative.code: (person-name 100)
  ;; CompilerException clojure.lang.ExceptionInfo: Spec assertion failed
  ;; val: 100 fails predicate: map?
  ;; :clojure.spec.alpha/failure  :assertion-failed
  ;; #:clojure.spec.alpha{:problems [{:path [], :pred map?, :val 100, :via [], :in []}], 
  ;;                      :failure :assertion-failed}
  ----
  
  A deeper level of integration is to call conform and use the return value to destructure the input. This will be particularly useful for complex inputs with alternate options.
  