我有一个小的Parsec程序,我使用QuickCheck脚本进行测试,该脚本生成一个输入文件和一个并行的预期解析。
我的测试通常可以很好地运行100次测试,但是当我随便测试某些东西时,他们突然失败了一个非常大的(600,000个字符)计数器示例。当我发现错误的来源时,我感到非常困惑:
\ETX\NUL\202&Hxv4\an3z\244\143\222\RS\236\n\150K
QuickCheck显然为变量名生成了上面的字符串,即使我在程序中只使用了alphaNum,下划线和空格。
你能看出上述顺序出现的原因吗?可能是某处出现溢出错误吗?或者QuickCheck暂时运行内存并编写调试消息?
答案 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
除了那个&符之外,它看起来几乎与你要求的相符。也许我错了,在这种情况下,我确定有人会纠正我。