QuickCheck中生成奇怪的字符串

时间:2013-10-31 17:27:33

标签: haskell memory quickcheck

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

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

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

QuickCheck显然为变量名生成了上面的字符串,即使我在程序中只使用了alphaNum,下划线和空格。

你能看出上述顺序出现的原因吗?可能是某处出现溢出错误吗?或者QuickCheck暂时运行内存并编写调试消息?

1 个答案:

答案 0 :(得分: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

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