wip
This commit is contained in:
parent
87d83bf95f
commit
76f96ab5b1
1 changed files with 112 additions and 109 deletions
|
|
@ -329,8 +329,11 @@
|
||||||
(defn res [form]
|
(defn res [form]
|
||||||
(cond
|
(cond
|
||||||
(keyword? form) form
|
(keyword? form) form
|
||||||
(symbol? form) (c/or
|
(symbol? form) (cond
|
||||||
(-> form sci-resolve ->sym) form)
|
(= 'fn form) 'clojure.core/fn ;; make tests pass, fn is not a macro in SCI
|
||||||
|
(= 'not form) 'clojure.core/not ;; make tests pass, not is not a macro in SCI
|
||||||
|
:else (c/or
|
||||||
|
(-> form sci-resolve ->sym) form))
|
||||||
(sequential? form) (walk/postwalk #(if (symbol? %) (res %) %) (unfn form))
|
(sequential? form) (walk/postwalk #(if (symbol? %) (res %) %) (unfn form))
|
||||||
:else form))
|
:else form))
|
||||||
|
|
||||||
|
|
@ -484,12 +487,12 @@
|
||||||
pred-forms (walk/postwalk res pred-exprs)]
|
pred-forms (walk/postwalk res pred-exprs)]
|
||||||
;; `(map-spec-impl ~req-keys '~req ~opt '~pred-forms ~pred-exprs ~gen)
|
;; `(map-spec-impl ~req-keys '~req ~opt '~pred-forms ~pred-exprs ~gen)
|
||||||
`(clojure.spec.alpha/map-spec-impl {:req '~req :opt '~opt :req-un '~req-un :opt-un '~opt-un
|
`(clojure.spec.alpha/map-spec-impl {:req '~req :opt '~opt :req-un '~req-un :opt-un '~opt-un
|
||||||
:req-keys '~req-keys :req-specs '~req-specs
|
:req-keys '~req-keys :req-specs '~req-specs
|
||||||
:opt-keys '~opt-keys :opt-specs '~opt-specs
|
:opt-keys '~opt-keys :opt-specs '~opt-specs
|
||||||
:pred-forms '~pred-forms
|
:pred-forms '~pred-forms
|
||||||
:pred-exprs ~pred-exprs
|
:pred-exprs ~pred-exprs
|
||||||
:keys-pred ~keys-pred
|
:keys-pred ~keys-pred
|
||||||
:gfn ~gen})))
|
:gfn ~gen})))
|
||||||
|
|
||||||
(defmacro or
|
(defmacro or
|
||||||
"Takes key+pred pairs, e.g.
|
"Takes key+pred pairs, e.g.
|
||||||
|
|
@ -563,7 +566,7 @@
|
||||||
returns a test.check generator
|
returns a test.check generator
|
||||||
|
|
||||||
See also - coll-of, every-kv
|
See also - coll-of, every-kv
|
||||||
"
|
"
|
||||||
[pred & {:keys [into kind count max-count min-count distinct gen-max gen] :as opts}]
|
[pred & {:keys [into kind count max-count min-count distinct gen-max gen] :as opts}]
|
||||||
(let [desc (:clojure.spec.alpha/describe opts)
|
(let [desc (:clojure.spec.alpha/describe opts)
|
||||||
nopts (-> opts
|
nopts (-> opts
|
||||||
|
|
@ -946,27 +949,27 @@
|
||||||
(ident? pred) (cond-> (the-spec pred) gfn (with-gen gfn))
|
(ident? pred) (cond-> (the-spec pred) gfn (with-gen gfn))
|
||||||
:else
|
:else
|
||||||
(reify
|
(reify
|
||||||
Specize
|
Specize
|
||||||
(specize* [s] s)
|
(specize* [s] s)
|
||||||
(specize* [s _] s)
|
(specize* [s _] s)
|
||||||
|
|
||||||
Spec
|
Spec
|
||||||
(conform* [_ x] (let [ret (pred x)]
|
(conform* [_ x] (let [ret (pred x)]
|
||||||
(if cpred?
|
(if cpred?
|
||||||
ret
|
ret
|
||||||
(if ret x :clojure.spec.alpha/invalid))))
|
(if ret x :clojure.spec.alpha/invalid))))
|
||||||
(unform* [_ x] (if cpred?
|
(unform* [_ x] (if cpred?
|
||||||
(if unc
|
(if unc
|
||||||
(unc x)
|
(unc x)
|
||||||
(throw (IllegalStateException. "no unform fn for conformer")))
|
(throw (IllegalStateException. "no unform fn for conformer")))
|
||||||
x))
|
x))
|
||||||
(explain* [_ path via in x]
|
(explain* [_ path via in x]
|
||||||
(when (invalid? (dt pred x form cpred?))
|
(when (invalid? (dt pred x form cpred?))
|
||||||
[{:path path :pred form :val x :via via :in in}]))
|
[{:path path :pred form :val x :via via :in in}]))
|
||||||
(gen* [_ _ _ _] (if gfn
|
(gen* [_ _ _ _] (if gfn
|
||||||
(gfn)
|
(gfn)
|
||||||
(gen/gen-for-pred pred)))
|
(gen/gen-for-pred pred)))
|
||||||
(with-gen* [_ gfn] (spec-impl form pred gfn cpred? unc))
|
(with-gen* [_ gfn] (spec-impl form pred gfn cpred? unc))
|
||||||
(describe* [_] form)))))
|
(describe* [_] form)))))
|
||||||
|
|
||||||
(def invalid :clojure.spec.alpha/invalid)
|
(def invalid :clojure.spec.alpha/invalid)
|
||||||
|
|
@ -1009,9 +1012,9 @@
|
||||||
(let [rmap (inck rmap id)]
|
(let [rmap (inck rmap id)]
|
||||||
(when-not (recur-limit? rmap id path k)
|
(when-not (recur-limit? rmap id path k)
|
||||||
(gen/delay-internal
|
(gen/delay-internal
|
||||||
(gen/fmap
|
(gen/fmap
|
||||||
#(tag % k)
|
#(tag % k)
|
||||||
(gensub p overrides (conj path k) rmap (list 'method form k))))))))
|
(gensub p overrides (conj path k) rmap (list 'method form k))))))))
|
||||||
gs (->> (methods @mmvar)
|
gs (->> (methods @mmvar)
|
||||||
(remove (fn [[k]] (invalid? k)))
|
(remove (fn [[k]] (invalid? k)))
|
||||||
(map gen)
|
(map gen)
|
||||||
|
|
@ -1146,7 +1149,7 @@
|
||||||
(let [rmap (inck rmap id)]
|
(let [rmap (inck rmap id)]
|
||||||
(when-not (recur-limit? rmap id path k)
|
(when-not (recur-limit? rmap id path k)
|
||||||
(gen/delay-internal
|
(gen/delay-internal
|
||||||
(gensub p overrides (conj path k) rmap f)))))
|
(gensub p overrides (conj path k) rmap f)))))
|
||||||
gs (remove nil? (map gen keys preds forms))]
|
gs (remove nil? (map gen keys preds forms))]
|
||||||
(when-not (empty? gs)
|
(when-not (empty? gs)
|
||||||
(gen/one-of gs)))))
|
(gen/one-of gs)))))
|
||||||
|
|
@ -1494,8 +1497,8 @@
|
||||||
:clojure.spec.alpha/accept true
|
:clojure.spec.alpha/accept true
|
||||||
nil nil
|
nil nil
|
||||||
:clojure.spec.alpha/amp (c/and (accept-nil? p1)
|
:clojure.spec.alpha/amp (c/and (accept-nil? p1)
|
||||||
(let [ret (-> (preturn p1) (and-preds ps (next forms)))]
|
(let [ret (-> (preturn p1) (and-preds ps (next forms)))]
|
||||||
(not (invalid? ret))))
|
(not (invalid? ret))))
|
||||||
:clojure.spec.alpha/rep (c/or (identical? p1 p2) (accept-nil? p1))
|
:clojure.spec.alpha/rep (c/or (identical? p1 p2) (accept-nil? p1))
|
||||||
:clojure.spec.alpha/pcat (every? accept-nil? ps)
|
:clojure.spec.alpha/pcat (every? accept-nil? ps)
|
||||||
:clojure.spec.alpha/alt (c/some accept-nil? ps))))
|
:clojure.spec.alpha/alt (c/some accept-nil? ps))))
|
||||||
|
|
@ -1508,14 +1511,14 @@
|
||||||
:clojure.spec.alpha/accept ret
|
:clojure.spec.alpha/accept ret
|
||||||
nil nil
|
nil nil
|
||||||
:clojure.spec.alpha/amp (let [pret (preturn p1)]
|
:clojure.spec.alpha/amp (let [pret (preturn p1)]
|
||||||
(if (noret? p1 pret)
|
(if (noret? p1 pret)
|
||||||
:clojure.spec.alpha/nil
|
:clojure.spec.alpha/nil
|
||||||
(and-preds pret ps forms)))
|
(and-preds pret ps forms)))
|
||||||
:clojure.spec.alpha/rep (add-ret p1 ret k)
|
:clojure.spec.alpha/rep (add-ret p1 ret k)
|
||||||
:clojure.spec.alpha/pcat (add-ret p0 ret k)
|
:clojure.spec.alpha/pcat (add-ret p0 ret k)
|
||||||
:clojure.spec.alpha/alt (let [[[p0] [k0]] (filter-alt ps ks forms accept-nil?)
|
:clojure.spec.alpha/alt (let [[[p0] [k0]] (filter-alt ps ks forms accept-nil?)
|
||||||
r (if (nil? p0) :clojure.spec.alpha/nil (preturn p0))]
|
r (if (nil? p0) :clojure.spec.alpha/nil (preturn p0))]
|
||||||
(if k0 (tagged-ret k0 r) r)))))
|
(if k0 (tagged-ret k0 r) r)))))
|
||||||
|
|
||||||
(defn- op-unform [p x]
|
(defn- op-unform [p x]
|
||||||
;;(prn {:p p :x x})
|
;;(prn {:p p :x x})
|
||||||
|
|
@ -1525,18 +1528,18 @@
|
||||||
:clojure.spec.alpha/accept [ret]
|
:clojure.spec.alpha/accept [ret]
|
||||||
nil [(unform p x)]
|
nil [(unform p x)]
|
||||||
:clojure.spec.alpha/amp (let [px (reduce #(unform %2 %1) x (reverse ps))]
|
:clojure.spec.alpha/amp (let [px (reduce #(unform %2 %1) x (reverse ps))]
|
||||||
(op-unform p1 px))
|
(op-unform p1 px))
|
||||||
:clojure.spec.alpha/rep (mapcat #(op-unform p1 %) x)
|
:clojure.spec.alpha/rep (mapcat #(op-unform p1 %) x)
|
||||||
:clojure.spec.alpha/pcat (if rep+
|
:clojure.spec.alpha/pcat (if rep+
|
||||||
(mapcat #(op-unform p0 %) x)
|
(mapcat #(op-unform p0 %) x)
|
||||||
(mapcat (fn [k]
|
(mapcat (fn [k]
|
||||||
(when (contains? x k)
|
(when (contains? x k)
|
||||||
(op-unform (kps k) (get x k))))
|
(op-unform (kps k) (get x k))))
|
||||||
ks))
|
ks))
|
||||||
:clojure.spec.alpha/alt (if maybe
|
:clojure.spec.alpha/alt (if maybe
|
||||||
[(unform p0 x)]
|
[(unform p0 x)]
|
||||||
(let [[k v] x]
|
(let [[k v] x]
|
||||||
(op-unform (kps k) v))))))
|
(op-unform (kps k) v))))))
|
||||||
|
|
||||||
(defn- add-ret [p r k]
|
(defn- add-ret [p r k]
|
||||||
(let [{:keys [:clojure.spec.alpha/op ps splice] :as p} (reg-resolve! p)
|
(let [{:keys [:clojure.spec.alpha/op ps splice] :as p} (reg-resolve! p)
|
||||||
|
|
@ -1560,16 +1563,16 @@
|
||||||
nil (let [ret (dt p x p)]
|
nil (let [ret (dt p x p)]
|
||||||
(when-not (invalid? ret) (accept ret)))
|
(when-not (invalid? ret) (accept ret)))
|
||||||
:clojure.spec.alpha/amp (when-let [p1 (deriv p1 x)]
|
:clojure.spec.alpha/amp (when-let [p1 (deriv p1 x)]
|
||||||
(if (= :clojure.spec.alpha/accept (:clojure.spec.alpha/op p1))
|
(if (= :clojure.spec.alpha/accept (:clojure.spec.alpha/op p1))
|
||||||
(let [ret (-> (preturn p1) (and-preds ps (next forms)))]
|
(let [ret (-> (preturn p1) (and-preds ps (next forms)))]
|
||||||
(when-not (invalid? ret)
|
(when-not (invalid? ret)
|
||||||
(accept ret)))
|
(accept ret)))
|
||||||
(amp-impl p1 amp ps forms)))
|
(amp-impl p1 amp ps forms)))
|
||||||
:clojure.spec.alpha/pcat (alt2 (pcat* {:ps (cons (deriv p0 x) pr), :ks ks, :forms forms, :ret ret})
|
:clojure.spec.alpha/pcat (alt2 (pcat* {:ps (cons (deriv p0 x) pr), :ks ks, :forms forms, :ret ret})
|
||||||
(when (accept-nil? p0) (deriv (pcat* {:ps pr, :ks kr, :forms (next forms), :ret (add-ret p0 ret k0)}) x)))
|
(when (accept-nil? p0) (deriv (pcat* {:ps pr, :ks kr, :forms (next forms), :ret (add-ret p0 ret k0)}) x)))
|
||||||
:clojure.spec.alpha/alt (alt* (map #(deriv % x) ps) ks forms)
|
:clojure.spec.alpha/alt (alt* (map #(deriv % x) ps) ks forms)
|
||||||
:clojure.spec.alpha/rep (alt2 (rep* (deriv p1 x) p2 ret splice forms)
|
:clojure.spec.alpha/rep (alt2 (rep* (deriv p1 x) p2 ret splice forms)
|
||||||
(when (accept-nil? p1) (deriv (rep* p2 p2 (add-ret p1 ret nil) splice forms) x)))))))
|
(when (accept-nil? p1) (deriv (rep* p2 p2 (add-ret p1 ret nil) splice forms) x)))))))
|
||||||
|
|
||||||
(defn- op-describe [p]
|
(defn- op-describe [p]
|
||||||
(let [{:keys [:clojure.spec.alpha/op ps ks forms splice p1 rep+ maybe amp] :as p} (reg-resolve! p)]
|
(let [{:keys [:clojure.spec.alpha/op ps ks forms splice p1 rep+ maybe amp] :as p} (reg-resolve! p)]
|
||||||
|
|
@ -1580,11 +1583,11 @@
|
||||||
nil p
|
nil p
|
||||||
:clojure.spec.alpha/amp (list* 'clojure.spec.alpha/& amp forms)
|
:clojure.spec.alpha/amp (list* 'clojure.spec.alpha/& amp forms)
|
||||||
:clojure.spec.alpha/pcat (if rep+
|
:clojure.spec.alpha/pcat (if rep+
|
||||||
(list 'clojure.spec.alpha/+ rep+)
|
(list 'clojure.spec.alpha/+ rep+)
|
||||||
(cons 'clojure.spec.alpha/cat (mapcat vector (c/or (seq ks) (repeat :_)) forms)))
|
(cons 'clojure.spec.alpha/cat (mapcat vector (c/or (seq ks) (repeat :_)) forms)))
|
||||||
:clojure.spec.alpha/alt (if maybe
|
:clojure.spec.alpha/alt (if maybe
|
||||||
(list 'clojure.spec.alpha/? maybe)
|
(list 'clojure.spec.alpha/? maybe)
|
||||||
(cons 'clojure.spec.alpha/alt (mapcat vector ks forms)))
|
(cons 'clojure.spec.alpha/alt (mapcat vector ks forms)))
|
||||||
:clojure.spec.alpha/rep (list (if splice 'clojure.spec.alpha/+ 'clojure.spec.alpha/*) forms)))))
|
:clojure.spec.alpha/rep (list (if splice 'clojure.spec.alpha/+ 'clojure.spec.alpha/*) forms)))))
|
||||||
|
|
||||||
(defn- op-explain [form p path via in input]
|
(defn- op-explain [form p path via in input]
|
||||||
|
|
@ -1606,41 +1609,41 @@
|
||||||
(insufficient path form)
|
(insufficient path form)
|
||||||
(explain-1 form p path via in x))
|
(explain-1 form p path via in x))
|
||||||
:clojure.spec.alpha/amp (if (empty? input)
|
:clojure.spec.alpha/amp (if (empty? input)
|
||||||
(if (accept-nil? p1)
|
(if (accept-nil? p1)
|
||||||
(explain-pred-list forms ps path via in (preturn p1))
|
(explain-pred-list forms ps path via in (preturn p1))
|
||||||
(insufficient path (:amp p)))
|
(insufficient path (:amp p)))
|
||||||
(if-let [p1 (deriv p1 x)]
|
(if-let [p1 (deriv p1 x)]
|
||||||
(explain-pred-list forms ps path via in (preturn p1))
|
(explain-pred-list forms ps path via in (preturn p1))
|
||||||
(op-explain (:amp p) p1 path via in input)))
|
(op-explain (:amp p) p1 path via in input)))
|
||||||
:clojure.spec.alpha/pcat (let [pkfs (map vector
|
:clojure.spec.alpha/pcat (let [pkfs (map vector
|
||||||
ps
|
ps
|
||||||
(c/or (seq ks) (repeat nil))
|
(c/or (seq ks) (repeat nil))
|
||||||
(c/or (seq forms) (repeat nil)))
|
(c/or (seq forms) (repeat nil)))
|
||||||
[pred k form] (if (= 1 (count pkfs))
|
[pred k form] (if (= 1 (count pkfs))
|
||||||
(first pkfs)
|
(first pkfs)
|
||||||
(first (remove (fn [[p]] (accept-nil? p)) pkfs)))
|
(first (remove (fn [[p]] (accept-nil? p)) pkfs)))
|
||||||
path (if k (conj path k) path)
|
path (if k (conj path k) path)
|
||||||
form (c/or form (op-describe pred))]
|
form (c/or form (op-describe pred))]
|
||||||
(if (c/and (empty? input) (not pred))
|
(if (c/and (empty? input) (not pred))
|
||||||
(insufficient path form)
|
(insufficient path form)
|
||||||
(op-explain form pred path via in input)))
|
(op-explain form pred path via in input)))
|
||||||
:clojure.spec.alpha/alt (if (empty? input)
|
:clojure.spec.alpha/alt (if (empty? input)
|
||||||
(insufficient path (op-describe p))
|
(insufficient path (op-describe p))
|
||||||
(apply concat
|
(apply concat
|
||||||
(map (fn [k form pred]
|
(map (fn [k form pred]
|
||||||
(op-explain (c/or form (op-describe pred))
|
(op-explain (c/or form (op-describe pred))
|
||||||
pred
|
pred
|
||||||
(if k (conj path k) path)
|
(if k (conj path k) path)
|
||||||
via
|
via
|
||||||
in
|
in
|
||||||
input))
|
input))
|
||||||
(c/or (seq ks) (repeat nil))
|
(c/or (seq ks) (repeat nil))
|
||||||
(c/or (seq forms) (repeat nil))
|
(c/or (seq forms) (repeat nil))
|
||||||
ps)))
|
ps)))
|
||||||
:clojure.spec.alpha/rep (op-explain (if (identical? p1 p2)
|
:clojure.spec.alpha/rep (op-explain (if (identical? p1 p2)
|
||||||
forms
|
forms
|
||||||
(op-describe p1))
|
(op-describe p1))
|
||||||
p1 path via in input)))))
|
p1 path via in input)))))
|
||||||
|
|
||||||
(defn- re-gen [p overrides path rmap f]
|
(defn- re-gen [p overrides path rmap f]
|
||||||
;;(prn {:op op :ks ks :forms forms})
|
;;(prn {:op op :ks ks :forms forms})
|
||||||
|
|
@ -1666,22 +1669,22 @@
|
||||||
(when p
|
(when p
|
||||||
(case op
|
(case op
|
||||||
:clojure.spec.alpha/accept (if (= ret :clojure.spec.alpha/nil)
|
:clojure.spec.alpha/accept (if (= ret :clojure.spec.alpha/nil)
|
||||||
(gen/return [])
|
(gen/return [])
|
||||||
(gen/return [ret]))
|
(gen/return [ret]))
|
||||||
nil (when-let [g (gensub p overrides path rmap f)]
|
nil (when-let [g (gensub p overrides path rmap f)]
|
||||||
(gen/fmap vector g))
|
(gen/fmap vector g))
|
||||||
:clojure.spec.alpha/amp (re-gen p1 overrides path rmap (op-describe p1))
|
:clojure.spec.alpha/amp (re-gen p1 overrides path rmap (op-describe p1))
|
||||||
:clojure.spec.alpha/pcat (let [gens (ggens ps ks forms)]
|
:clojure.spec.alpha/pcat (let [gens (ggens ps ks forms)]
|
||||||
(when (every? identity gens)
|
(when (every? identity gens)
|
||||||
(apply gen/cat gens)))
|
(apply gen/cat gens)))
|
||||||
:clojure.spec.alpha/alt (let [gens (remove nil? (ggens ps ks forms))]
|
:clojure.spec.alpha/alt (let [gens (remove nil? (ggens ps ks forms))]
|
||||||
(when-not (empty? gens)
|
(when-not (empty? gens)
|
||||||
(gen/one-of gens)))
|
(gen/one-of gens)))
|
||||||
:clojure.spec.alpha/rep (if (recur-limit? rmap id [id] id)
|
:clojure.spec.alpha/rep (if (recur-limit? rmap id [id] id)
|
||||||
(gen/return [])
|
(gen/return [])
|
||||||
(when-let [g (re-gen p2 overrides path rmap forms)]
|
(when-let [g (re-gen p2 overrides path rmap forms)]
|
||||||
(gen/fmap #(apply concat %)
|
(gen/fmap #(apply concat %)
|
||||||
(gen/vector g)))))))))
|
(gen/vector g)))))))))
|
||||||
|
|
||||||
(defn- re-conform [p [x & xs :as data]]
|
(defn- re-conform [p [x & xs :as data]]
|
||||||
;;(prn {:p p :x x :xs xs})
|
;;(prn {:p p :x x :xs xs})
|
||||||
|
|
@ -1818,8 +1821,8 @@
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; non-primitives ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; non-primitives ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
(internal-def
|
(internal-def
|
||||||
:clojure.spec.alpha/kvs->map
|
:clojure.spec.alpha/kvs->map
|
||||||
(internal-conformer #(zipmap (map :clojure.spec.alpha/k %) (map :clojure.spec.alpha/v %)) #(map (fn [[k v]] {:clojure.spec.alpha/k k :clojure.spec.alpha/v v}) %)))
|
(internal-conformer #(zipmap (map :clojure.spec.alpha/k %) (map :clojure.spec.alpha/v %)) #(map (fn [[k v]] {:clojure.spec.alpha/k k :clojure.spec.alpha/v v}) %)))
|
||||||
|
|
||||||
(defmacro keys*
|
(defmacro keys*
|
||||||
"takes the same arguments as spec/keys and returns a regex op that matches sequences of key/values,
|
"takes the same arguments as spec/keys and returns a regex op that matches sequences of key/values,
|
||||||
|
|
@ -1934,7 +1937,7 @@
|
||||||
(clojure.spec.alpha/and inst? #(clojure.spec.alpha/inst-in-range? ~start ~end %))
|
(clojure.spec.alpha/and inst? #(clojure.spec.alpha/inst-in-range? ~start ~end %))
|
||||||
:gen (fn []
|
:gen (fn []
|
||||||
(clojure.spec.gen.alpha/fmap mkdate#
|
(clojure.spec.gen.alpha/fmap mkdate#
|
||||||
(clojure.spec.gen.alpha/large-integer* {:min st# :max et#}))))))
|
(clojure.spec.gen.alpha/large-integer* {:min st# :max et#}))))))
|
||||||
|
|
||||||
(defn int-in-range?
|
(defn int-in-range?
|
||||||
"Return true if start <= val, val < end and val is a fixed
|
"Return true if start <= val, val < end and val is a fixed
|
||||||
|
|
@ -1961,11 +1964,11 @@
|
||||||
:or {infinite? true NaN? true}
|
:or {infinite? true NaN? true}
|
||||||
:as m}]
|
:as m}]
|
||||||
`(clojure.spec.alpha/spec (clojure.spec.alpha/and c/double?
|
`(clojure.spec.alpha/spec (clojure.spec.alpha/and c/double?
|
||||||
~@(when-not infinite? '[#(not (Double/isInfinite %))])
|
~@(when-not infinite? '[#(not (Double/isInfinite %))])
|
||||||
~@(when-not NaN? '[#(not (Double/isNaN %))])
|
~@(when-not NaN? '[#(not (Double/isNaN %))])
|
||||||
~@(when max `[#(<= % ~max)])
|
~@(when max `[#(<= % ~max)])
|
||||||
~@(when min `[#(<= ~min %)]))
|
~@(when min `[#(<= ~min %)]))
|
||||||
:gen #(clojure.spec.gen.alpha/double* ~m)))
|
:gen #(clojure.spec.gen.alpha/double* ~m)))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; assert ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; assert ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
(defonce
|
(defonce
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue