如何测试我的haskell功能

mor*_*ort 4 haskell hugs

我刚开始使用Haskell并尝试先编写一些测试.基本上,我想定义一些函数,而不是调用此函数来检查行为.

add :: Integer -> Integer -> Integer
add a b = a+b

-- Test my function 
add 2 3
Run Code Online (Sandbox Code Playgroud)

如果我在Hugs98中加载那个小脚本,我会收到以下错误:

Syntax error in declaration (unexpected `}', possibly due to bad layout)
Run Code Online (Sandbox Code Playgroud)

如果我删除最后一行,加载脚本然后在拥抱解释器中输入"add 2 3",它就可以了.

所以问题是:如何将函数调用放在与函数定义相同的脚本中?我只是想加载脚本,并能够检查它是否符合我的预期......我不想一直手动输入它们.

dav*_*420 12

其他人已经说过如何解决您的问题,但是对于测试,您应该使用QuickCheck其他一些自动化测试库.

import Test.QuickCheck
prop_5 = add 2 3 == 5
prop_leftIdentity n = add 0 n == n
Run Code Online (Sandbox Code Playgroud)

然后,运行quickCheck prop_5quickCheck prop_leftIdentity在拥抱会话.QuickCheck可以做的远不止这些,但这将帮助您入门.

(这是一个QuickCheck教程,但它已经过时了.有人知道一个涵盖QuickCheck 2吗?)


Chr*_*ris 8

最初学者友好的方式可能是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
Run Code Online (Sandbox Code Playgroud)

HTH Chris


小智 3

做出顶层定义:

add :: Integer -> Integer -> Integer
add a b = a + b

test1 = add 2 3
Run Code Online (Sandbox Code Playgroud)

然后在 Hugs 会话中调用 test1。