我正在使用 QuickCheck 来测试我的代码以进行一些数值计算。基本上我有一个精确的函数和几个更有效的近似值。
我目前正在实现我想要测试的属性,例如:
prop_blah input = (abs $ (exact input)-(approx input)) < threshold
但是,如果能准确地知道每种近似算法的准确度并将它们相互比较,那就太好了。一种简单的方法是获取不等式左侧的均值和标准差的报告。这有可能吗?
我正在使用 QuickCheck 来测试我的代码以进行一些数值计算。基本上我有一个精确的函数和几个更有效的近似值。
我目前正在实现我想要测试的属性,例如:
prop_blah input = (abs $ (exact input)-(approx input)) < threshold
但是,如果能准确地知道每种近似算法的准确度并将它们相互比较,那就太好了。一种简单的方法是获取不等式左侧的均值和标准差的报告。这有可能吗?
如果您只需要打印出来,您应该检查在单次测试后执行的 QuickCheck Callbacks。它们的定义位于 Test.QuickCheck.Property
否则,您可以使用collect :: (Show a, Testable prop) => a -> prop -> Property
位于 Test.QuickCheck.Property 中的函数。
let a = (abs $ (exact input)-(approx input))
in collect a (a < threshold)
通过这种方式,您至少可以确定近似值的字符串表示形式,并且还可以了解有多少单个测试给出了相同的近似值。
您甚至可以摆脱近似质量,只需通过以下方式列出因素:
prop = collect (abs $ (exact input)-(approx input)) True