[英]How to test my haskell functions
我剛開始使用 Haskell,並嘗試先編寫一些測試。 基本上,我想定義一些函數,然后調用這個函數來檢查行為。
add :: Integer -> Integer -> Integer
add a b = a+b
-- Test my function
add 2 3
如果我在 Hugs98 中加載那個小腳本,我會收到以下錯誤:
Syntax error in declaration (unexpected `}', possibly due to bad layout)
如果我刪除最后一行,加載腳本,然后在擁抱解釋器中輸入“add 2 3”,它工作得很好。
所以問題是:如何將我的函數調用放在與函數定義相同的腳本中? 我只想加載腳本並能夠檢查它是否符合我的預期......我不想一直手動輸入它們。
其他人已經說過如何解決您當前的問題,但是對於測試,您應該使用QuickCheck或其他一些自動化測試庫。
import Test.QuickCheck
prop_5 = add 2 3 == 5
prop_leftIdentity n = add 0 n == n
然后在您的 Hugs 會話中運行quickCheck prop_5
和quickCheck prop_leftIdentity
。 QuickCheck 可以做的遠不止這些,但這會讓您開始。
(這是一個QuickCheck 教程,但它已經過時了。有人知道涵蓋 QuickCheck 2 的 教程嗎?)
對初學者最友好的方式可能是doctest模塊。 使用“cabal install doctest”下載它,然后將您的代碼放入文件“Add.hs”並從命令行運行“doctest Add.hs”。
您的代碼應如下所示,格式很重要:
module Add where
-- | add adds two numbers
--
-- >>> add 2 3
-- 5
-- >>> add 5 0
-- 5
-- >>> add 0 0
-- 0
add :: Integer -> Integer -> Integer
add a b = a+b
HTH克里斯
做一個頂級定義:
add :: Integer -> Integer -> Integer
add a b = a + b
test1 = add 2 3
然后在您的 Hugs 會話中調用 test1。
如何將我的函數調用放在與函數定義相同的腳本中? 我只想加載腳本並能夠檢查它是否符合我的預期......我不想一直手動輸入它們。
簡而言之,你不能。 將它包裝在一個函數中並調用它。 您的文件用作有效的 Haskell 模塊,並且具有“飛行”表達式並不是編寫它的有效方式。
您似乎來自腳本語言背景,但不要嘗試將 Haskell 視為其中之一。
我試圖做同樣的事情,我只是做了一個函數,它運行了我所有的測試用例(使用守衛),如果它們都通過則返回 1,如果有任何失敗則拋出錯誤。
測試 :: Num b => a->b
測試 x
| sumALL [1] /= 1 = 錯誤“測試失敗”
| sumALL [0,1,2] /= 3 = 錯誤“測試失敗”
...
| 否則 = 1
如果您安裝了 ghc,那么runhaskell
命令將解釋並運行您文件中的main
函數。
add x y = x + y
main = print $ add 2 3
然后在命令行
> runhaskell Add.hs
5
不確定,但擁抱可能具有與runhaskell
命令類似的功能。 或者,如果將文件加載到 Hugs 解釋器中,則只需調用main
即可運行它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.