gpt4 book ai didi

haskell - 如何改进 QuickCheck 和 Parsec 调试?

转载 作者:行者123 更新时间:2023-12-04 12:54:20 31 4
gpt4 key购买 nike

我正在使用 Haskell 和 Parsec 来解析文件格式。我的解析函数看起来像:

parseInput :: String -> Model
parseInput input = ...

data Model = Model { mNumV :: Int, mNumF :: Int, ... }

为了对此进行测试,我正在使用 QuickCheck。我已经定义了 Arbitrary生成 String 的实例表示格式化文件的内容:
instance Arbitrary File where
arbitrary = ...

data File = File { fContents :: String, fNumV :: Int, fNumF :: Int, ... }

我的属性之一可能会检查以确定 mNumV == fNumV解析任意 String后.这很好用 - 当它工作时。

但是,如果出现故障,Parsec 会抛出类似于以下内容的错误:
*** Failed (after 1 test):
Exception:
(line 302, column 3):
unexpected "\n"
expecting space

这很有用 - 但是,在测试失败后,任意文件的内容就会消失。我不能进去引用302行。

我能看到的唯一选择是打印 fContents每次测试后的每个任意文件 - 但这似乎是一个糟糕的主意。将每个任意文件路由到磁盘上的文件以供以后引用也是如此。

有没有解决这个问题的通用方法?

最佳答案

您可以使用 whenFail在失败时打印有问题的字符串(或将其转储到文件中)。

关于haskell - 如何改进 QuickCheck 和 Parsec 调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21155964/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com