Я использую 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)
(например, среднее значение и стандартное отклонение).