簡體   English   中英

如何測試我的 Haskell 函數

[英]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_5quickCheck 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM