在 QuickCheck2 中重写 Arbitrary Double

Rewriting Arbitrary Double in QuickCheck2

抱歉问了一个新手问题,但我如何重新定义 Arbitrary Double 以产生 +/- 无穷大和 NaN 以及通常的双精度值?以及如何使用我的版本 Arbitrary?

您不需要创建一个新的 Arbitrary 实例来创建一个类型的自定义 Generator。您可以将其创建为独立定义:

evilDouble :: Gen Double
evilDouble = oneOf [ weirdDouble, arbitrary ]
  where
    weirdDouble = error "This is where you generate inf and NaN values"

然后在 QuickCheck 的 forAll:

中明确使用它
prop_foo = forAll evilDouble $ \x -> abs (foo x - 123) < 0.1