HUnit 有某种方法可以近似相等吗?显然,这失败了:
test1 = TestCase (assertEqual "Should equal" (get_scores) [(0.3, 0.3), (0.6, 0.36), (1.0, 0.3399999)])
Run Code Online (Sandbox Code Playgroud)
注意:我不知道是否有正确/官方/可接受的方法来做到这一点。
这是以下的源代码assertEqual:
assertEqual :: (Eq a, Show a) => String -- ^ The message prefix
-> a -- ^ The expected value
-> a -- ^ The actual value
-> Assertion
assertEqual preface expected actual =
unless (actual == expected) (assertFailure msg)
where msg = (if null preface then "" else preface ++ "\n") ++
"expected: " ++ show expected ++ "\n but got: " ++ show actual
Run Code Online (Sandbox Code Playgroud)
基于此以及JUnit 测试双重相等的函数,我们可以以相同的风格创建我们自己的函数:
import Control.Monad (unless)
assertEquals :: String -- ^ The message prefix
-> Double -- ^ The maximum difference between expected and actual
-> Double -- ^ The expected value
-> Double -- ^ The actual value
-> Assertion
assertEquals preface delta expected actual =
unless (abs (expected - actual) < delta) (assertFailure msg)
where msg = ... same as above ...
Run Code Online (Sandbox Code Playgroud)