我现在正在尝试使用dart:test特性。我可以这样写:expect(areaUnderCurveWithRectangleRule(f1, 0,1,1000), equals(2));但是我们知道,在float/double计算中,没有精确相等这回事,所以我想知道是否有一个大致相等的测试方法,如果两个double值的差在某个epsilon(比如1 E-6)或者某个百分比之内,它会返回true。如果没有,这是否会成为Dart团队的一个好的特性请求?
dart:test
expect(areaUnderCurveWithRectangleRule(f1, 0,1,1000), equals(2));
epsilon
true
bgibtngc1#
dart:test为此提供了closeTo匹配器:
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); }
oaxa6hgo2#
据我所知,这方面还没有标准的实现方法,但你可以使用以下方法:
expect(abs(x-y) < epsilon)
对于你之前定义的ε
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)); }
3条答案
按热度按时间bgibtngc1#
dart:test
为此提供了closeTo
匹配器:请注意,
closeTo
使用绝对增量,因此单个阈值可能不适用于幅度差异很大的浮点值。如果你想要一个基于百分比比较的版本,用你自己的函数 Package
closeTo
应该很容易,例如:oaxa6hgo2#
据我所知,这方面还没有标准的实现方法,但你可以使用以下方法:
对于你之前定义的ε
w80xi6nr3#
提供有用的错误,而不仅仅是“false”