gpt4 book ai didi

scala - Scalatest 是否提供 NaN 的匹配器?

转载 作者:行者123 更新时间:2023-12-04 18:00:40 26 4
gpt4 key购买 nike

Scalatest 是否为 NaN 提供匹配器?和无穷大?

如果有办法,我想让这些断言更具描述性:

Double.NaN.isNaN shouldBe true
Double.NegativeInfinity.isInfinite shouldBe true

最佳答案

处理这个问题最灵活的方法可能是使用 ScalaTest 的 support for symbols to handle boolean matches on properties.因此,以下测试都可以正常工作并在失败时提供非常有用的错误消息:

class DoubleSpec extends FreeSpec with Matchers {

"NaN should be NaN" in {
Double.box(Double.NaN) shouldBe 'NaN
}

"1 should not be NaN" in {
Double.box(1d) should not be 'NaN
}

"Infinity should be infinite" in {
Double.box(Double.PositiveInfinity) shouldBe 'Infinite
}

"1 should not be infinite" in {
Double.box(1d) should not be 'Infinite
}
}

不幸的是,符号支持仅适用于引用类型 - 有一个隐式参数 T <:< AnyRef必需的。我欢迎在无需调用 Double.box 的情况下处理此问题的建议每一次。

您还可以为此编写自己的匹配器:
  val NaN : BeMatcher[Double] = (left: Double) => MatchResult(
left.isNaN,
s"$left is not NaN",
s"$left is NaN"
)

"NaN should be NaN" in {
Double.NaN shouldBe NaN
}

"1 should not be NaN" in {
1d should not be NaN
}

避免了装箱问题并且更加类型安全,但确实需要一些额外的代码行。

关于scala - Scalatest 是否提供 NaN 的匹配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576683/

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