3

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

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

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

1 回答 1

7

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

于 2012-10-19T11:52:44.653 回答