是否有可能使用fscheck生成数据,特别是列表,以供fscheck之外的使用?我在fscheck测试中无法调试一种情况,似乎比较结果相等,但fscheck表示它们不相等。
我有一个用于对象列表的生成器。如何从这个生成器生成可供使用的列表?
let genListObj min max = Gen.listOf Arb.generate<obj> |> Gen.suchThat (fun l -> (l.Length >= min) && (l.Length <= max))
编辑:这个函数现在已经成为FsCheck API的一部分(Gen.sample),所以您不再需要以下内容...
这是一个生成给定生成器中n个样本的示例函数:
let sample n gn =
let rec sample i seed samples =
if i = 0 then samples
else sample (i-1) (Random.stdSplit seed |> snd) (Gen.eval 1000 seed gn :: samples)
sample n (Random.newSeed()) []
编辑:这里的1000是生成值的大小。1000相当大,例如序列将在0和1000个元素之间,字符串也是如此。如果生成需要很长时间,您可能需要调整该值(或将其作为函数的参数传入)。
Gen.eval
,请参见 http://fscheck.codeplex.com/SourceControl/changeset/view/fd9da99ee77d#FsCheck.Test%2fHelpers.fs。但是 FsCheck 会输出生成的数据以便于查找失败的原因,所以通常不需要这样做。 - Mauricio Scheffer