dart 测试与大致相等

cfh9epnr  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(123)

我现在正在尝试使用dart:test特性。
我可以这样写:
expect(areaUnderCurveWithRectangleRule(f1, 0,1,1000), equals(2));
但是我们知道,在float/double计算中,没有精确相等这回事,所以我想知道是否有一个大致相等的测试方法,如果两个double值的差在某个epsilon(比如1 E-6)或者某个百分比之内,它会返回true
如果没有,这是否会成为Dart团队的一个好的特性请求?

bgibtngc

bgibtngc1#

dart:test为此提供了closeTo匹配器:

expect(areaUnderCurveWithRectangleRule(f1, 0,1,1000), closeTo(2, epsilon));

请注意,closeTo使用绝对增量,因此单个阈值可能不适用于幅度差异很大的浮点值。
如果你想要一个基于百分比比较的版本,用你自己的函数 Package closeTo应该很容易,例如:

Matcher closeToPercentage(num value, double fraction) {
  final delta = value * fraction;
  return closeTo(value, delta);
}
oaxa6hgo

oaxa6hgo2#

据我所知,这方面还没有标准的实现方法,但你可以使用以下方法:

expect(abs(x-y) < epsilon)

对于你之前定义的ε

w80xi6nr

w80xi6nr3#

提供有用的错误,而不仅仅是“false”

void near(double a, double b, {double eps = 1e-12, bool relative = false}) {
    var bound = relative ? eps*b.abs() : eps;
    expect(a,greaterThanOrEqualTo(b-bound));
    expect(a,lessThanOrEqualTo(b+bound));
}

相关问题