Question

Probably a stupid question, but how do I generate a list of a specific size for FSCheck?

I can restrict using:

let fn_of_2_check xs = (xs.Length=2) ==> fn_of_2 xs

but, obviously, this will throw away loads of lists.

Here fn_of_2 does some test on lists of length 2 only and returns true or false.

Was it helpful?

Solution

A trivial solution would be to write a test that takes two inputs and builds a two-element list from them:

let fn_of_2_check x y = fn_of_2 [x; y]

However, if you're testing the function for two-elements list only, then perhaps the function should take a two-element tuple as the input. Or, you could write a test that verifies some behaviour for two-element lists and some other behaviour for lists of other length.

(But if you want to check the behaviour for two-element lists specifically, then the above should work.)

OTHER TIPS

How about:

let listOfLength n = Gen.listOfLength n Arb.generate |> Arb.fromGen
Check.Quick (Prop.forAll (listOfLength 2) fn_of_2)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top