这个 spec 应指定生成的集合始终是大小为 4 或 5 的集合,但实际上生成了大小为 4 到 8 的集合
(require '[clojure.spec.alpha :as s] '[clojure.spec.gen.alpha :as gen]) (map count (gen/sample (s/gen (s/coll-of char? :min-count 4 :gen-max 5)))) ;; (4 7 8 8 4 7 4 5 5 7)
原因: s/every-impl 中的最大逻辑是: }. 如果有最大计数,则使用该计数,否则使用 gen-max 或 2*min-count 中的较大值。在这种情况下,2*min-count 为 8。看起来我们不应该生成多于 gen-max 的数据,所以建议将此逻辑更改为: }。
补丁: clj-2202.patch