<div dir="ltr">I have a problem similar to this question <<a href="http://stackoverflow.com/questions/9977734/controlling-how-test-data-is-generated-in-quickcheck">http://stackoverflow.com/questions/9977734/controlling-how-test-data-is-generated-in-quickcheck</a>>. Below I will articulate my specifics, the code I am using, and the particular question I have.<br><br>I have written a fizz-buzz program that uses a Fibonacci sequence as input.<br>I would like to test two things. (1) Does my program emit the correct string given an Int that meets a particular condition. (2) Is my Fibonacci generator generating Fibonacci numbers?<br><br>The problem I am having is similar to the link above. The range of `Int`s is too large. How do I constrain my tests to say, the first 1000 Fibonacci numbers?<br><br>Here is code that I think is both adequate and minimal. Please let me know if I need to elaborate.<br><br>    import           Data.Numbers.Primes (isPrime)<br>    import           Test.Hspec  (Spec,hspec,describe,it,shouldBe)<br>    import           Test.Hspec.QuickCheck (prop)<br><br>    qcheck :: Spec<br>    qcheck = do<br>      describe "QuickCheck test fiz" $<br>        prop "QuickCheck test" $ modfiz<br><br>      describe "QuickCheck test fib" $<br>        prop "QuickCheck test fib" $ testfib<br><br>    modfiz int<br>      | int <= 0                                 = True  -- code smell, should never generate number less than or equal to zero.<br>      | int == 3                                 = test3<br>      | int == 5                                 = test5<br>      | int `mod` 15 == 0                        = testMod35<br>      | int `mod` 3 == 0                         = testMod3<br>      | int `mod` 5 == 0                         = testMod5<br>      | isPrime int == True                      = testPrime<br>      | otherwise                                = testRest<br>          where<br>            test3     =<br>              Right "Buzz BuzzFizz"     == fizzbuzz 3<br>            test5     =<br>              Right "Fizz BuzzFizz"     == fizzbuzz 5<br>            testMod3  =<br>              Right "Buzz "             == fizzbuzz int<br>            testMod5  =<br>              Right "Fizz "             == fizzbuzz int<br>            testMod35 =<br>              Right "Buzz Fizz "        == fizzbuzz int<br>            testPrime =<br>              Right "BuzzFizz"          == fizzbuzz int<br>            testRest  =<br>              Right (show int)          == fizzbuzz int<br><br>    testfib :: Integer -> Bool<br>    testfib n =<br>      case (fibb n) of<br>        Left _ -> False<br>        Right n' -> isFib n'<br><br>`fibb` takes an `Int` and finds that nth Fibonacci. So `fibb 6` would return `Right 8`. The `Left` value is not relevant to this problem.<br><br>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?<br><br>the entire project here <<a href="https://github.com/mlitchard/swiftfizz">https://github.com/mlitchard/swiftfizz</a>><br><br></div>