飞镖测试大致相等

Tay*_*orR 5 unit-testing dart

我现在正在尝试使用dart:test功能。

我可以写这样的东西:

expect(areaUnderCurveWithRectangleRule(f1, 0,1,1000), equals(2));

但是我们知道,在 float/double 计算中,没有精确相等这样的东西。所以我想知道是否有一个大致相同的测试方法?true如果它们的差异在某个epsilon(例如,1E-6)或某个百分比内,它将返回两个双精度值?

如果没有,这会向 Dart 团队提出一个很好的功能请求吗?

jam*_*lin 7

dart:testcloseTo为此目的提供了一个匹配器:

expect(areaUnderCurveWithRectangleRule(f1, 0,1,1000), closeTo(2, epsilon));
Run Code Online (Sandbox Code Playgroud)

请注意,closeTo使用绝对增量,这可能不适合具有非常不同幅度的浮点值。

如果您想要一个基于百分比进行比较的版本,那么closeTo使用您自己的函数应该很容易包装,例如:

Matcher closeToPercentage(num value, double fraction) {
  final delta = value * fraction;
  return closeTo(value, delta);
}
Run Code Online (Sandbox Code Playgroud)