2012-08-13 22 views
6

我正在使用QuickCheck测试我的代码以进行一些数字计算。基本上我有一个确切的功能和它的几个近似值,效率更高。用于非布尔测试的快速检查

我目前正在执行我想测试类似的属性:

prop_blah input = (abs $ (exact input)-(approx input)) < threshold 

但是,这将是非常好的知道究竟是如何准确的每一个近似算法是和他们互相比较。一个简单的方法就是获得不平等左边的均值和标准差的报告。这是否有可能?

+3

嗯,你仍然可以使用快速检查的框架生成随机输入。为了计算统计数据,你可能会喜欢明显名为[statistics](http://hackage.haskell.org/package/statistics)的软件包。 – 2012-08-14 04:54:04

+0

我认为你需要一些证据来证明“近似”不会是正确答案的一个因素* x *,因为这种知识quickcheck属性是微不足道的。也就是说,它可能有助于从理论上分析你的近似函数。 – Tarrasch 2012-08-14 07:26:42

+1

@Tarrasch我同意这样的证明会很好,但不幸的是,这些算法通常做得很好,但最坏的情况下性能很差。有点像启发式的NP完全问题。 – 2012-08-14 14:37:01

回答

2

如果您只需要将其打印出来,您应该检查在单次测试后执行的QuickCheck回调。他们的定义位于Test.QuickCheck.P​​roperty

否则,您可以使用位于Test.QuickCheck.P​​roperty中的函数collect :: (Show a, Testable prop) => a -> prop -> Property

let a = (abs $ (exact input)-(approx input)) 
in collect a (a < threshold) 

你阉割至少近似的字符串表示,也了解有多少使用的测试,给出相同的近似这种方式。

你甚至可以摆脱近似质量的,只是做列出因素:

prop = collect (abs $ (exact input)-(approx input)) True