kernelp4nic
8/3/2017 - 8:53 PM

clojure.spec on Clojure 1.8

clojure.spec on Clojure 1.8

;;[clojure-future-spec "1.9.0-alpha17"]
;;[org.clojure/test.check "0.9.0"]

(require '[clojure.spec.alpha :as s])
(require '[clojure.future :refer :all])
(require '[clojure.spec.test.alpha :as stest])

(defn ranged-rand
  "Returns random int in range start <= rand < end"
  [start end]
  (+ start (long (rand (- end start)))))

(defn ranged-rand  ;; BROKEN!
  "Returns random int in range start <= rand < end"
  [start end]
  (+ start (long (rand (- start end)))))

(s/fdef ranged-rand
        :args (s/and (s/cat :start int? :end int?)
                     #(< (:start %) (:end %)))
        :ret int?
        :fn (s/and #(>= (:ret %) (-> % :args :start))
                   #(< (:ret %) (-> % :args :end))))

(ranged-rand 8 5)
(ranged-rand "asd" 2)

(stest/instrument `ranged-rand)
(s/explain 'ranged-rand)

(stest/check `ranged-rand)
(stest/abbrev-result (first (stest/check `ranged-rand)))