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