我製作了一個創建「list like」序列的庫,其中實現了許多Prelude樣式函數。我想爲此編寫一些測試用例,以確保我的庫生成正確的輸出,並且我認爲最簡單的方法是編寫一些函數,將結果轉換爲列表並將它們與Prelude結果進行比較。比方說,我們已經有了這樣的:在Haskell中爲不同類型編寫測試用例
import qualified MyLibrary as ML
import qualified Prelude as P
例如我可能要在以下測試用例:
P.take 5 (P.enumFrom 1) == toList (ML.take 5 (ML.enumFrom 1))
注意ML.enumFrom
不輸出列表,它輸出它自己的數據類型。
上述工作正常,但請注意我是如何「重複自己」(商標)。我必須確保左側和右側是相同的,否則我的測試用例是錯誤的。
有沒有一種很好的方式來編寫像這樣的測試用例,所以我不必重複自己?
當你的測試被定義爲「重複自己」以便比較兩種機制時,我不認爲你真的「重複自己」。 –
理想情況下,所有的測試都需要一個參數來決定使用哪個函數,這樣我就可以擁有一個'doTest'函數,就像'doTest test = test True == toList(test False)'或類似的東西,但我沒有' t找到了一種方式來做到這一點,而不會讓類型分析者恨我。 – Clinton
@Clinton:我認爲如果沒有實例化一個普通的'class'或可能使用模板haskell(我沒有經驗),你無法實現 – jakubdaniel