2013-10-31 149 views
0

我有一個小的Parsec程序,我使用QuickCheck腳本來測試,它可以並行生成輸入文件和預期的解析。在QuickCheck生成奇怪的字符串

我的測試通常運行100次測試正常,但後來突然間因爲我隨便測試了一些東西,他們以非常大的(600,000個字符)反例失敗。當我發現了錯誤的根源,我非常困惑:

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

快速檢查顯然產生上述字符串變量名,即使我只用alphaNum,下劃線和空格在我的計劃。

你能看出爲什麼上述順序可能出現的任何原因嗎?它可能是一個溢出錯誤的地方?或QuickCheck運行速度不足並寫入調試消息?

+4

我們可以看到你的代碼嗎? – jozefg

+0

我很抱歉。事實證明,我確實有一個可以創建一般字符串的條件。這非常罕見。我應該刪除這個問題嗎? –

+0

不,請留下它,但考慮添加代碼,以便其他人可以看到發生了什麼 – jozefg

回答

2

這可能是誤報,但是如果parsec解析器接受任何與字母數字的正則表達式字符類相匹配的東西,那麼也可以生成unicode的東西。字符串不支持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

幾乎看起來它符合你的要求是什麼,除了那些符號。也許我錯了,在這種情況下,我確信有人會糾正我。

+0

如果有人知道爲什麼生成了&符號,我想知道 – Squidly