如何使用fscheck生成数据?

时间:2012-10-15 17:02:18

标签: f# fscheck

是否可以使用fscheck生成数据,特别是列表,以便在fscheck之外使用?我无法调试fscheck测试中的情况,看起来比较结果是相同的,但fscheck说它们不是。

我有这个生成器用于对象列表。如何生成可以从此生成器使用的列表?

let genListObj min max  = Gen.listOf Arb.generate<obj> |> Gen.suchThat (fun l -> (l.Length >= min) && (l.Length <= max))

1 个答案:

答案 0 :(得分:6)

编辑:此功能现在是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之间,字符串也是如此。如果生成需要很长时间,您可能需要调整该值(或将其作为函数的参数)。