ScalaTest - 测试具有误差范围的两个浮点数组之间的相等性

时间:2014-11-30 13:49:35

标签: scala floating-point scalatest

我们说我有一个返回双打数组的函数。我想测试这个函数并手动计算出正确的值。但是,由于它的浮点数,我无法进行直接比较,因此ScalaTest有任何甜蜜的语法使我能够将双数组与epsilion /误差余量进行比较吗?

由于

2 个答案:

答案 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)