我有一个函数可以在一个范围内生成双打:
let gen_doublein =
fun mx mn -> Arb.generate<float> |> Gen.suchThat ( (>) mx ) |> Gen.suchThat ( (<) mn )
然后是一个生成其中 2 个数组的函数:
let gen_params:Gen<double array> =
gen { let! x = gen_doublein 0.0 20000.0
let! y = gen_doublein 0.0 2000.0
return [| x;y|] }
我放:
static member arb_params = Arb.fromGen gen_params
在生成器类中并注册它。一切似乎都很好。为了测试这一切都可以,我有:
let f2 (xs:double array) :double= exp (-2.0*xs.[0]) + xs.[1]*exp (-2.0*xs.[0])
let fcheck fn xs = fn xs > 0.0
然后使用数组生成器'arrayOfLength':
Check.Quick (Prop.forAll (arrayOfLength 2) (fcheck f2))
可以按预期工作,但是:
Check.Quick (Prop.forAll (Generators.arb_params) (fcheck f2))
刚开始做一些计算,再也没有回来。f# 大师请帮忙。