    of the framework (and subject to change!)
    If you want to explicitly control the distribution, use one of the
    distribution fns, e.g. uniform, geometric, etc."
-  []
+  ^long []
   (one-of
    (uniform -2 3)
    uniform))


(defn geometric
  "Geometric distribution with mean 1/p."
  [p]
  (core/long (Math/ceil (/ (Math/log (.nextDouble *rnd*))
                           (Math/log (- 1.0 p))))))

(defn uniform
  "Uniform distribution from lo (inclusive) to high (exclusive).
   Defaults to range of Java long."
  ([] (.nextLong *rnd*))
  ([lo hi] {:pre [(< lo hi)]}
     (clojure.core/long (Math/floor (+ lo (* (.nextDouble *rnd*) (- hi lo)))))))

(defn ^float float
  "Generate a float."
  []
  (Float/intBitsToFloat (.nextInt *rnd*)))

(defn ^double double
  "Generate a double."
  []
  (.nextDouble *rnd*))

(defn rand-nth

(defn string
  "Create a string with chars from v and sized from sizer."
  ([] (string printable-ascii-char))
  ([f] (string f default-sizer))
  ([f sizer] (apply str (reps sizer f))))

(def ^:private ascii-alpha
  (concat (range 65 (+ 65 26))
