"Gave up" - 快速检查

"Gave up" - QuickCheck

我想在测试麦克劳林级数是否等于 1/xx>1x<2 的函数中使用快速检查。但是,对于较小的 n 值,quickcheck returns 错误测试。此外,如果我设置 n>100 限制,例如,quickcheck returns:

"Gave up! Passed only 0 tests.".

这是我的代码:

prop_inv :: Float -> Int -> Property
prop_inv x n = (x>1 && x<2) && n>100 ==> inv x n == 1/x

inv x n是计算麦克劳林级数的函数。)

通常的方法是制作一个小的新类型,它只生成所需范围内的值。例如:

newtype BetweenOneAndTwo = BOAT Float deriving Show
instance Arbitrary BetweenOneAndTwo where
    arbitrary = BOAT <$> Test.QuickCheck.choose (1, 2)

prop_inv (BOAT x) (NonNegative n) = inv x (n+100) == 1/x