0

我有一个小型 Parsec 程序,我使用 QuickCheck 脚本进行测试,该脚本并行生成输入文件和预期的解析。

我的测试通常可以很好地运行 100 次测试,但突然间,当我随便测试一些东西时,它们以一个非常大(600,000 个字符)的反例失败了。当我发现错误的来源时,我很困惑:

\ETX\NUL\202&Hxv4\an3z\244\143\222\RS\236\n\150K

QuickCheck 显然已经为变量名生成了上述字符串,尽管我在程序中只使用了 alphaNum、下划线和空格。

你能看出为什么会出现上述顺序的任何原因吗?会不会是某个地方的溢出错误?或者 QuickCheck 暂时内存不足并写入调试消息?

4

1 回答 1

2

这可能是误报,但如果 parsec 解析器接受与字母数字的正则表达式字符类匹配的任何内容,那么也可以生成 unicode 的内容。String 不支持 UTF8 编码的 unicode,但 Data.Text 支持。

ghci(运行Data.Text.IO.putStrLn . Data.Text.pack $ "\ETX\NUL\202&Hxv4\an3z\244\143\222\RS\236\n\150K")中的快速测试给出
Ê&Hxv4n3zôÞì
K

除了那个&符号之外,它几乎看起来符合您的要求。也许我错了,在这种情况下,我相信有人会纠正我。

于 2013-10-31T17:35:58.797 回答