gpt4 book ai didi

haskell - 您如何使HPC认识到Haskell中的守卫拥有100%的代码覆盖率?

转载 作者:行者123 更新时间:2023-12-03 22:12:44 24 4
gpt4 key购买 nike

我正在尝试使用HPC在Haskell中编写的某些代码获得(并证明)100%的测试覆盖率。但是,如果我写这样的话:

fac n | n > 0 = n * (fac (n - 1))
| otherwise = 1

然后,guard语句的第二个表达式始终带有True标记。在一般情况下,最简单的解决方法是什么?

编辑:
只是为了澄清。这段代码:
fac n = if n > 0 then n * (fac (n - 1))
else 1

与HPC配合良好,(运行它可提供100%的代码覆盖率)。

我基本上患有这个问题: http://hackage.haskell.org/trac/ghc/ticket/3175

最佳答案

没问题如果将表达式标记为始终为true,则并不意味着覆盖率低于100%。例如,我只是编写了一个基于fac的小型可执行文件,然后在其上运行hpc并在生成的tix文件上运行hpc报告。

来源:

fac n | n > 0 = n * (fac (n - 1))
| n == 0 = 1
| otherwise = 125 -- An arbitrary value. This of couse is demo code, and not actually a factorial.

main = print (fac 12) >> print (fac (negate 100))

结果如下:
100% expressions used (23/23)
66% boolean coverage (2/3)
66% guards (2/3), 1 always True
100% 'if' conditions (0/0)
100% qualifiers (0/0)
100% alternatives used (3/3)
100% local declarations used (0/0)
100% top-level declarations used (2/2)

关键是使用100%表达式,使用100%替代项,使用100%顶级声明。您拥有66%的 bool 值覆盖率这一事实是无关紧要的。因此,如果您运行hpc标记并查看生成的hpc_index文件,它将报告顶层,替代项和表达式,但不报告 bool 值。

关于haskell - 您如何使HPC认识到Haskell中的守卫拥有100%的代码覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com