我们说我有一个返回双打数组的函数。我想测试这个函数并手动计算出正确的值。但是,由于它的浮点数,我无法进行直接比较,因此ScalaTest有任何甜蜜的语法使我能够将双数组与epsilion /误差余量进行比较吗?
由于
答案 0 :(得分:11)
我担心ScalaTest中没有很好的语法,我会接受一个非常基本的解决方案。
val Eps = 1e-3 // Our epsilon
val res = testObject.test // Result you want to test.
val expected = Array(...) // Expected returning value.
res.size should be (expected.size)
for (i <- 0 until res.size) res(i) should be (expected(i) +- Eps)
如图所示,这是有效的。然后你可以通过定义隐式方法使其更好。
答案 1 :(得分:5)
怎么样:
import Inspectors._
import scala.math._
forExactly(max(a1.size, a2.size), a1.zip(a2)){case (x, y) => x shouldBe (y +- eps)}
或者你可以提供custom equality(@Suma sugested有一个built-in):
import org.scalactic._
implicit val custom = TolerantNumerics.tolerantDoubleEquality(eps)
a1 shouldBe (a2)