(s/gen ratio?)
以 (gen/such-that ratio? gen/ratio)
实现
问题是大约 10% 的时间 gen/ratio
返回一个整数,这违反了 ratio?
判定条件。如果连续发生 10 次,gen/such-that
将抛出异常。
在足够大的样本量下,(s/gen ratio?)
可靠地失败
(dorun (gen/sample (s/gen ratio?) 10000000))
Execution error (ExceptionInfo) at clojure.test.check.generators/fn (generators.cljc:435).
Couldn't satisfy such-that predicate after 10 tries.
一个快速修复是增加 such-that
的 max-tries
参数
(dorun (gen/sample (gen/such-that ratio? gen/ratio 100) 10000000))
=> nil
然而,我也发现 (s/gen ratio?)
总是生成 Ratio
类型的值,但 gen/ratio
生成的是比值和整数的混合。所以,可能更好的修复方法是更新 gen/ratio
以不生成整数?