in algebird-test/src/main/scala/com/twitter/algebird/MetricProperties.scala [28:38]
private def beCloseTo(a: Double, b: Double, eps: Double = 1e-10): Boolean =
a == b || (math.abs(a - b) / math.abs(a)) < eps || (a.isInfinite && b.isInfinite)
private def beGreaterThan(a: Double, b: Double, eps: Double = 1e-10): Boolean =
a > b - eps || (a.isInfinite && b.isInfinite)
def isNonNegative[T: Metric: Arbitrary]: Prop =
forAll { (a: T, b: T) =>
val m = Metric(a, b)
beGreaterThan(m, 0.0) || beCloseTo(m, 0.0)
}