什么是元组的最佳方法:1。QuickCheck输入到谓词,其中2.测试函数返回的输出?
想要用其他几种语言测试(2 * 350)函数(检查他们模仿的Haskell基础和Prelude函数的行为的差异)我的第一个实验是:
例如,要获取列表中函数的测试数据,例如:
testSet1
:: (Show a, Testable prop)
=> String -> String -> ([Int] -> a) -> prop -> IO ()
testSet1 folder fname f p = do
r <- verboseCheckResult p
let ys =
((,) <*> f) . read . listTuple1 <$>
splitOn ["Passed:"] (tail $ init $ (lines . output) r)
writeFile (concat [folder, fname, ".txt"]) (show ys)
这个工作正常,至少对于简单的情况,但是我无法立即找到推广这种模式的方法,以避免为每个类型签名的变体编写单独的函数(为输出生成和捕获输入)。 / p>
关键问题是读取通常需要一些类型信息,用于从其(QuickCheck结果输出)字符串中解析QuickCheck生成的输入列表。
也许我采取了错误的做法。有什么想法吗 ?模板Haskell?
答案 0 :(得分:2)
有一个单独的包来注释具有反例的属性(可以包含输入和输出):quickcheck-with-counterexamples。
This QuickCheck issue on Github对同一主题进行了一些讨论。