QuickCheck-2.5.1.1を使用してQAを行っています。私は2つの純粋関数gold :: a -> Float
とをテストf :: a -> Float
していa
ます。インスタンスは任意です。
gold
これが参考計算であり、私f
が最適化しているバリエーションです。
これまで、クイックチェックを使用した私のテストのほとんどは、のようなテストを使用してき\a -> abs (gold a - f a) < 0.0001
ました。
ただし、平均誤差と標準偏差を知ることは私の設計を導くのに役立つので、しきい値を確認しながら統計を収集したいと思います。
QuickCheckを使用してこのような統計を収集する方法はありますか?
具体例
私が探している種類のものの具体的な例を与えるために、平方根を近似するための次の2つの関数があると仮定します。
-- 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)
(平均や標準偏差など)です。