FSCheck 中 N 长度生成器的集合

Set of N length generator in FSCheck

我还在学习 FSCheck,最近需要一个固定的唯一字符串集合。

这可行,但我怀疑还有更有效的方法。

Arb.generate<Set<NonEmptyString>> 
|> Gen.filter (fun s -> Set.count s > 9)
|> Gen.map (Seq.truncate 10) 

有吗?

构建一个您知道恰好包含 N 个字符串的集合可能更有效,如下所示:

let genSet genItem size =
    let rec loop (items : Set<_>) =
        gen {
            if items.Count >= size then
                return items
            else
                let! item = genItem
                return! items.Add(item) |> loop
        }
    loop Set.empty

let genSetOfNonEmptyStringsOfSize10 =
    genSet
        Arb.generate<NonEmptyString>
        10

请注意 genSet 将构建任何类型的集合,而不仅仅是 NonEmptyStrings。