F# FSCheck生成特定大小的列表

F# FSCheck生成特定大小的列表,f#,fscheck,F#,Fscheck,这可能是个愚蠢的问题,但我如何生成一个特定大小的清单供FSCheck使用呢 我可以限制使用: let fn_of_2_check xs = (xs.Length=2) ==> fn_of_2 xs 但是,很明显,这将丢弃大量的列表 这里,fn\u of_2只对长度为2的列表进行一些测试,并返回true或false一个简单的解决方案是编写一个测试,该测试接受两个输入并从中构建两个元素的列表: let fn_of_2_check x y = fn_of_2 [x; y] 但是,如果您只针对

这可能是个愚蠢的问题,但我如何生成一个特定大小的清单供FSCheck使用呢

我可以限制使用:

let fn_of_2_check xs = (xs.Length=2) ==> fn_of_2 xs
但是,很明显,这将丢弃大量的列表


这里,
fn\u of_2
只对长度为
2
的列表进行一些测试,并返回
true
false

一个简单的解决方案是编写一个测试,该测试接受两个输入并从中构建两个元素的列表:

let fn_of_2_check x y = fn_of_2 [x; y]
但是,如果您只针对两个元素列表测试函数,那么该函数可能应该采用两个元素的元组作为输入。或者,您可以编写一个测试来验证两个元素列表的某些行为,以及其他长度列表的某些其他行为

(但是,如果您想特别检查两个元素列表的行为,那么上面的操作应该有效。)

如何:

let listOfLength n = Gen.listOfLength n Arb.generate |> Arb.fromGen
Check.Quick (Prop.forAll (listOfLength 2) fn_of_2)

函数将有不同长度的列表(参数数量),但每个函数的列表长度是固定的。我想这就像地图,地图2,地图3——我可以写fn_of_2_check fn_of_3_check等等。