(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
然而,我也觉得 odd,为什么 (s/gen ratio?)
总是生成 Ratio,而 gen/ratio
生成的是一个比率与整数的混合体。因此,可能更好的解决方法是更新 gen/ratio
以不生成整数?