Skip to content

Commit 157c824

Browse files
committed
align :float and :double generators
1 parent dcfc4ba commit 157c824

File tree

3 files changed

+16
-22
lines changed

3 files changed

+16
-22
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Malli is in well matured [alpha](README.md#alpha).
2121
* previous behavior defaulted to a `nil`-returning generator, even if the schema doesn't accept `nil`
2222
* use `:gen/return nil` property to restore this behavior
2323
* FIX: `malli.registry/{mode,type}` not respected in Babashka [#1124](https://github.com/metosin/malli/issues/1124)
24+
* FIX: `:float` accepts doubles but never generates them [#1132](https://github.com/metosin/malli/issues/1132)
2425
* Updated dependencies:
2526

2627
```

src/malli/generator.cljc

+10-22
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,14 @@
428428
(gen/return (first es))
429429
(gen/elements es)))
430430

431+
(defn- double-gen [schema options]
432+
(gen/double* (merge (let [props (m/properties schema options)]
433+
{:infinite? (get props :gen/infinite? false)
434+
:NaN? (get props :gen/NaN? false)})
435+
(-> (-min-max schema options)
436+
(update :min #(some-> % double))
437+
(update :max #(some-> % double))))))
438+
431439
(defmulti -schema-generator (fn [schema options] (m/type schema options)) :default ::default)
432440

433441
(defmethod -schema-generator ::default [schema options] (ga/gen-for-pred (m/validator schema options)))
@@ -476,28 +484,8 @@
476484
(defmethod -schema-generator :nil [_ _] nil-gen)
477485
(defmethod -schema-generator :string [schema options] (-string-gen schema options))
478486
(defmethod -schema-generator :int [schema options] (gen/large-integer* (-min-max schema options)))
479-
(defmethod -schema-generator :double [schema options]
480-
(gen/double* (merge (let [props (m/properties schema options)]
481-
{:infinite? (get props :gen/infinite? false)
482-
:NaN? (get props :gen/NaN? false)})
483-
(-> (-min-max schema options)
484-
(update :min #(some-> % double))
485-
(update :max #(some-> % double))))))
486-
(defmethod -schema-generator :float [schema options]
487-
(let [max-float #?(:clj Float/MAX_VALUE :cljs (.-MAX_VALUE js/Number))
488-
min-float (- max-float)
489-
props (m/properties schema options)
490-
min-max-props (-min-max schema options)
491-
infinite? #?(:clj false :cljs (get props :gen/infinite? false))]
492-
(->> (merge {:infinite? infinite?
493-
:NaN? (get props :gen/NaN? false)}
494-
(-> min-max-props
495-
(update :min #(or (some-> % float)
496-
#?(:clj min-float :cljs nil)))
497-
(update :max #(or (some-> % float)
498-
#?(:clj max-float :cljs nil)))))
499-
(gen/double*)
500-
(gen/fmap float))))
487+
(defmethod -schema-generator :double [schema options] (double-gen schema options))
488+
(defmethod -schema-generator :float [schema options] (double-gen schema options))
501489
(defmethod -schema-generator :boolean [_ _] gen/boolean)
502490
(defmethod -schema-generator :keyword [_ _] gen/keyword)
503491
(defmethod -schema-generator :symbol [_ _] gen/symbol)

test/malli/generator_test.cljc

+5
Original file line numberDiff line numberDiff line change
@@ -1137,3 +1137,8 @@
11371137
[{} :map]]]
11381138
(is (every? #{{:type nil} {:type {}}} (mg/sample schema)))
11391139
(is (every? (m/validator schema) (mg/sample schema))))))
1140+
1141+
(deftest float-generates-doubles-test
1142+
(doseq [v (mg/sample :float)]
1143+
(is (m/validate :float v))
1144+
(is (double? v))))

0 commit comments

Comments
 (0)