Тест дротика с примерно равным - PullRequest
0 голосов
/ 05 апреля 2020

Я сейчас пытаюсь использовать dart:test функции.

Я могу написать что-то вроде:

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

Но, как мы знаем, в вычислениях типа float / double нет такой вещи, как точное равенство. Поэтому мне интересно, есть ли примерно равный метод тестирования? Он вернет true для двух двойных значений, если их разность находится в пределах определенного epsilon (скажем, 1E-6) или определенного процента?

Если нет, будет ли это хорошим запросом к Dart команда?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

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);
}
0 голосов
/ 05 апреля 2020

Насколько я знаю, для этого нет стандартного воплощения. Но вы можете использовать следующее:

expect(abs(x-y) < epsilon) 

для некоторого эпсилона, который вы определили ранее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...