
Hi Michael,
What I noticed was the answer suggested that one should write a `newtype`, wrapping a `[Int]` and making a new `Arbitrary` instance. However, I also noticed that the answer is from 2012, and `QuickCheck 2` has an `Args` `datatype` that appears to be able to do what I need. So, can I create a new `Args` to limit the range of tests, (just want the first 1000 Fibonacci numbers), and also to limit the number of tests run? If not is the solution from the above link the approach I would have to take?
The module Test.Hspec.QuickCheck has functions to modify the number of tests to be run (modifyMaxSuccess) and the maximum size passed to the generators (modifyMaxSize) (and indeed internally they modify the Args passed to QuickCheck's driver). I believe their purpose is to modify values coming from outside the program, via the command line options --qc-max-success and --qc-max-size. You can certainly set them to constants: modifyMaxSuccess (const 1000) $ prop ... But to specify the domains of your properties from within the program, the approaches mentioned in the answer you linked to are still current. Defining a newtype wrapper with an Arbitrary instance is a somewhat heavyweight solution. Some already exist for common preconditions, for example you can use Positive instead of the first check in modfiz: modfiz :: Positive Int -> Bool modfiz (Positive int) = ... The answer also mentions forAll and standalone generators, which I find to be most straightforward to set the domain of testfib: testfib :: Property testfib = forAll (choose (1, 1000)) $ \n -> ... Li-yao