繁体   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