【问题标题】:Dart test with roughly equal大致相等的 Dart 测试
【发布时间】:2020-04-05 02:14:00
【问题描述】:

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

我可以这样写:

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

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

如果不是,这会对 Dart 团队提出很好的功能要求吗?

【问题讨论】:

    标签: unit-testing dart


    【解决方案1】:

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

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

    请注意,closeTo 使用绝对增量,因此单个阈值可能不适用于幅度差异很大的浮点值。

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

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

    【讨论】:

      【解决方案2】:

      据我所知,没有标准的实施方案。但您可以使用以下内容:

      expect(abs(x-y) < epsilon) 
      

      对于你之前定义的一些 epsilon

      【讨论】:

      • 我测试过了,expect 需要两个参数。因此你应该使用expect(abs(x-y) &lt; epsilon, true);
      • 感谢指正
      • @MoritzGroß 您可以edit your post 整合更正,然后将评论线程标记为“不再需要”。您还可能注意到有一个标准实现。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2021-09-24
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2018-09-14
      • 2013-03-13
      • 1970-01-01
      相关资源
      最近更新 更多