wip [skip ci]

This commit is contained in:
Michiel Borkent 2022-04-03 16:51:45 +02:00
parent 388edf7b8c
commit 9c94cb23b0
2 changed files with 20 additions and 10 deletions

View file

@ -61,7 +61,13 @@
'spec-impl (copy-var s/spec-impl sns) 'spec-impl (copy-var s/spec-impl sns)
'tuple (copy-var s/tuple sns) 'tuple (copy-var s/tuple sns)
'tuple-impl (copy-var s/tuple-impl sns) 'tuple-impl (copy-var s/tuple-impl sns)
'coll-of (copy-var s/coll-of sns)
'conformer (copy-var s/conformer sns) 'conformer (copy-var s/conformer sns)
'int-in (copy-var s/int-in sns)
'int-in-range? (copy-var s/int-in-range? sns)
'double-in (copy-var s/double-in sns)
'inst-in (copy-var s/inst-in sns)
'inst-in-range? (copy-var s/inst-in-range? sns)
#_#_'explain-data (copy-var s/explain-data sns)}) #_#_'explain-data (copy-var s/explain-data sns)})
#_:clj-kondo/ignore #_:clj-kondo/ignore
@ -71,7 +77,9 @@
#_:clj-kondo/ignore #_:clj-kondo/ignore
(def gen-namespace (def gen-namespace
{'generate (copy-var gen/generate gns)}) {'generate (copy-var gen/generate gns)
'large-integer* (copy-var gen/large-integer* gns)
'double* (copy-var gen/double* gns)})
;; def-impl ;; def-impl
;; -> spec? ;; OK ;; -> spec? ;; OK

View file

@ -593,7 +593,7 @@
See also - every, map-of" See also - every, map-of"
[pred & opts] [pred & opts]
(let [desc `(coll-of ~(res pred) ~@(res-kind opts))] (let [desc `(coll-of ~(res pred) ~@(res-kind opts))]
`(every ~pred ::conform-all true ::describe '~desc ~@opts))) `(clojure.spec.alpha/every ~pred ::conform-all true ::describe '~desc ~@opts)))
(defmacro map-of (defmacro map-of
"Returns a spec for a map whose keys satisfy kpred and vals satisfy "Returns a spec for a map whose keys satisfy kpred and vals satisfy
@ -1907,10 +1907,11 @@
`(let [st# (inst-ms ~start) `(let [st# (inst-ms ~start)
et# (inst-ms ~end) et# (inst-ms ~end)
mkdate# (fn [d#] (java.util.Date. ^{:tag ~'long} d#))] mkdate# (fn [d#] (java.util.Date. ^{:tag ~'long} d#))]
(spec (and inst? #(inst-in-range? ~start ~end %)) (clojure.spec.alpha/spec
:gen (fn [] (clojure.spec.alpha/and inst? #(clojure.spec.alpha/inst-in-range? ~start ~end %))
(gen/fmap mkdate# :gen (fn []
(gen/large-integer* {:min st# :max et#})))))) (gen/fmap mkdate#
(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
@ -1922,8 +1923,9 @@
"Returns a spec that validates fixed precision integers in the "Returns a spec that validates fixed precision integers in the
range from start (inclusive) to end (exclusive)." range from start (inclusive) to end (exclusive)."
[start end] [start end]
`(spec (and int? #(int-in-range? ~start ~end %)) `(clojure.spec.alpha/spec
:gen #(gen/large-integer* {:min ~start :max (dec ~end)}))) (clojure.spec.alpha/and int? #(clojure.spec.alpha/int-in-range? ~start ~end %))
:gen #(clojure.spec.gen.alpha/large-integer* {:min ~start :max (dec ~end)})))
(defmacro double-in (defmacro double-in
"Specs a 64-bit floating point number. Options: "Specs a 64-bit floating point number. Options:
@ -1935,12 +1937,12 @@
[& {:keys [infinite? NaN? min max] [& {:keys [infinite? NaN? min max]
:or {infinite? true NaN? true} :or {infinite? true NaN? true}
:as m}] :as m}]
`(spec (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 #(gen/double* ~m))) :gen #(clojure.spec.gen.alpha/double* ~m)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; assert ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; assert ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defonce (defonce