(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` 以不生成整数?