Я использую QuickCheck-2.5.1.1 для выполнения QA. Я тестирую две чистые функции gold :: a -> Float
и f :: a -> Float
, где a
экземпляры Произвольные.
Здесь gold
- ссылочный расчет, а f
- это вариация, которую я оптимизирую.
На сегодняшний день большинство моих тестов с использованием quickcheck используют тесты типа \a -> abs (gold a - f a) < 0.0001
.
Тем не менее, я хотел бы собирать статистику наряду с проверкой порога, поскольку знание средней ошибки и стандартного отклонения полезно для руководства моей конструкцией.
Можно ли использовать QuickCheck для сбора статистики?
Конкретный пример
Чтобы дать конкретный пример того, что я ищу, предположим, что у меня есть следующие две функции для аппроксимации квадратных корней:
-- Heron 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)
(например, среднее и стандартное отклонение).