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