我正在使用 QuickCheck-2.5.1.1 进行质量检查。我正在测试两个纯函数gold :: a -> Float
和f :: a -> Float
,其中的a
实例是任意的。
这gold
是一个参考计算,f
是我正在优化的一个变体。
迄今为止,我使用 quickcheck 的大多数测试都在使用\a -> abs (gold a - f a) < 0.0001
.
但是,我想在检查阈值的同时收集统计数据,因为了解平均误差和标准偏差对指导我的设计很有用。
有没有办法使用 QuickCheck 来收集这样的统计数据?
具体例子
举一个我正在寻找的东西的具体例子,假设我有以下两个函数来近似平方根:
-- Heron's method
heron :: Float -> Float
heron x = heron' 5 1
where
heron' n est
| n > 0 = heron' (n-1) $ (est + (x/est)) / 2
| otherwise = est
-- Fifth order Maclaurin series expansion
maclaurin :: Float -> Float
maclaurin x = 1 + (1/2) * (x - 1) - (1/8)*(x - 1)^2
+ (1/16)*(x - 1)^3 - (5/128)*(x - 1)^4
+ (7/256)*(x - 1)^5
对此的测试可能是:
test = quickCheck
$ forAll (choose (1,2))
$ \x -> abs (heron x - maclaurin x) < 0.02
因此,作为测试的副作用,我想知道的是统计数据abs (heron x - maclaurin x)
(例如平均值和标准差)。