【发布时间】:2012-04-03 22:43:55
【问题描述】:
这可能是一个愚蠢的问题,但是如何为 FSCheck 生成一个特定大小的列表?
我可以限制使用:
let fn_of_2_check xs = (xs.Length=2) ==> fn_of_2 xs
但是,显然,这会丢弃大量列表。
这里fn_of_2 仅对长度为2 的列表进行一些测试并返回true 或false。
【问题讨论】:
这可能是一个愚蠢的问题,但是如何为 FSCheck 生成一个特定大小的列表?
我可以限制使用:
let fn_of_2_check xs = (xs.Length=2) ==> fn_of_2 xs
但是,显然,这会丢弃大量列表。
这里fn_of_2 仅对长度为2 的列表进行一些测试并返回true 或false。
【问题讨论】:
怎么样:
let listOfLength n = Gen.listOfLength n Arb.generate |> Arb.fromGen
Check.Quick (Prop.forAll (listOfLength 2) fn_of_2)
【讨论】:
一个简单的解决方案是编写一个测试,该测试接受两个输入并从中构建一个二元素列表:
let fn_of_2_check x y = fn_of_2 [x; y]
但是,如果您仅测试两个元素列表的函数,那么该函数可能应该将一个二元素元组作为输入。或者,您可以编写一个测试来验证二元素列表的某些行为和其他长度列表的某些其他行为。
(但是,如果您想专门检查二元素列表的行为,那么上面应该可以工作。)
【讨论】: