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
将构建任何类型的集合,而不仅仅是 NonEmptyString
s。
我还在学习 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
将构建任何类型的集合,而不仅仅是 NonEmptyString
s。