Sum*_*uma 12 floating-point scala scalatest
在使用浮点数或包含浮点数的对象(如向量或矩阵)编写操作的测试时,我经常想要测试不是为了相等,而是为了"几乎相等"(差异允许是某些epsilon).
使用ScalaTest FunSuite时,通常会写入assert(xxx == yyy)
.随着浮动和喜欢我可以写assert(math.abs(xxx - yyy)<epsilon)
,但后来我没有得到ScalaTest断言宏的好功能,报告比较值作为失败消息的一部分.
如何在ScalaTest中执行float"几乎相等"的测试,以便在测试失败时将值写为失败消息的一部分?
测试示例:
import org.scalatest.FunSuite
class FloatTest extends FunSuite {
test("Testing computations") {
import math._
assert(sin(Pi/4)==sqrt(0.5))
assert(sin(Pi)==0)
}
}
Run Code Online (Sandbox Code Playgroud)
Sum*_*uma 21
它可以使用TolerantNumerics并使用===
而不是使用==
.
import org.scalactic.TolerantNumerics
import org.scalatest.FunSuite
class FloatTest extends FunSuite {
val epsilon = 1e-4f
implicit val doubleEq = TolerantNumerics.tolerantDoubleEquality(epsilon)
test("Testing computations") {
import math._
assert(sin(Pi / 4) === sqrt(0.5))
assert(sin(Pi) === 0.0)
}
}
Run Code Online (Sandbox Code Playgroud)
对于您自己的类型,您可以定义自己的Equality [T]子类.