Skip to content

Instantly share code, notes, and snippets.

@nikolavojicic
Created October 3, 2021 01:01
Show Gist options
  • Save nikolavojicic/72ffcf2789c1e01861f89478b1a700f0 to your computer and use it in GitHub Desktop.
Save nikolavojicic/72ffcf2789c1e01861f89478b1a700f0 to your computer and use it in GitHub Desktop.
(require '[clojure.spec.alpha :as s])
; ==============================
(s/def ::foo int?)
(s/def ::bar ::foo)
(s/form ::foo) ;=> clojure.core/int?
(s/form ::bar) ;=> clojure.core/int?
; ==================
(s/def ::bar-spec (s/spec ::foo))
(s/form ::bar-spec) ;=> clojure.core/int?
; ==================
(s/def ::bar-and (s/and ::foo))
(s/form ::bar-and) ;=> (clojure.spec.alpha/and :user/foo)
; ==================
(s/def ::m (s/keys :req [::foo ::bar ::bar-spec ::bar-and]))
; ==================
(require '[clojure.spec.gen.alpha :as gen])
; ==================
(gen/generate (s/gen ::bar)) ;=> 49496307
(gen/generate (s/gen ::bar-spec)) ;=> -14008816
(gen/generate (s/gen ::bar-and)) ;=> 17245
(gen/generate (s/gen ::m))
;=> #:user{:foo 326028, :bar -128609, :bar-spec -85018582, :bar-and 2230855}
; ==================
(gen/generate (s/gen ::bar {::foo (fn [] (gen/return 0))})) ;=> 0
(gen/generate (s/gen ::bar-spec {::foo (fn [] (gen/return 0))})) ;=> -2
(gen/generate (s/gen ::bar-and {::foo (fn [] (gen/return 0))})) ;=> 0
(gen/generate (s/gen ::m {::foo (fn [] (gen/return 0))}))
;=> #:user{:foo 0, :bar 0, :bar-spec 31, :bar-and 0}
; ==================
(gen/generate (s/gen ::bar {::bar (fn [] (gen/return 0))})) ;=> -492158
(gen/generate (s/gen ::bar-spec {::bar-spec (fn [] (gen/return 0))})) ;=> 0
(gen/generate (s/gen ::bar-and {::bar-and (fn [] (gen/return 0))})) ;=> 0
(gen/generate (s/gen ::m
{::bar (fn [] (gen/return 0))
::bar-spec (fn [] (gen/return 0))
::bar-and (fn [] (gen/return 0))}))
;=> #:user{:foo 183249700, :bar -1, :bar-spec 0, :bar-and 0}
; ==================
@nikolavojicic
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment