gpt4 book ai didi

ScalaTest - 检查 "almost equal"是否有 float 和包含 float 的对象

转载 作者:行者123 更新时间:2023-12-04 00:38:03 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Handling Doubles in ScalaTest

(2 个回答)


3年前关闭。




在为带有浮点数或包含浮点数的对象(如向量或矩阵)的操作编写测试时,我经常想测试的不是相等,而是“几乎相等”(允许差异为一些 epsilon)。

使用时 ScalaTest FunSuite ,通常会写 assert(xxx == yyy) .有 float 和喜欢我可以写assert(math.abs(xxx - yyy)<epsilon) ,但后来我没有得到 ScalaTest assert macro 的好功能将比较值作为失败消息的一部分进行报告。

如何在 ScalaTest 中执行“几乎相等”的浮点测试,以便在测试失败时,将值作为失败消息的一部分写入?

测试示例:

import org.scalatest.FunSuite

class FloatTest extends FunSuite {
test("Testing computations") {
import math._
assert(sin(Pi/4)==sqrt(0.5))
assert(sin(Pi)==0)
}
}

最佳答案

可以使用 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)
}
}

对于您自己的类型,您可以定义自己的子类 Equality[T] .

关于ScalaTest - 检查 "almost equal"是否有 float 和包含 float 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com