Joh*_*n S 8 floating-point scala scalatest
假设我有一个函数返回一个双精度数组.我想测试这个函数并手动计算出正确的值.然而,由于它是浮点数,我无法进行直接比较,因此ScalaTest有任何甜蜜的语法使我能够将双数组与epsilion /误差余量进行比较吗?
谢谢
Joh*_*n S 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)
Run Code Online (Sandbox Code Playgroud)
如图所示,这是有效的.然后你可以通过定义一个隐式方法使它变得更好.
怎么样:
import Inspectors._
import scala.math._
forExactly(max(a1.size, a2.size), a1.zip(a2)){case (x, y) => x shouldBe (y +- eps)}
Run Code Online (Sandbox Code Playgroud)
或者你可以提供自定义相等(有一个内置的 @Suma sugested):
import org.scalactic._
implicit val custom = TolerantNumerics.tolerantDoubleEquality(eps)
a1 shouldBe (a2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4617 次 |
| 最近记录: |