2012-08-13 51 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