Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Vamireh от Февраль 25, 2014, 23:29



Название: [РЕШЕНО] Непонятка в юнит-тесте
Отправлено: Vamireh от Февраль 25, 2014, 23:29
Почему
Код:
qFuzzyIsNull(0.6 * 8.0 - 0.4 * 12.0) = true 
, но
Код:
QCOMPARE(0.6 * 8.0 - 0.4 * 12.0, 0.0);
не проходит?
С другими числами (во всяком случае из тестов) проходит.
Т.е. как бы по уму класс тест проходит, но формально - нет.
Вопроса, собственно нет, и так все понятно. Но как бы пройти этот тест из такой функции:
Код:
double foo(double a, double b, double c, double d) {
    return a * b + c * d;
}


Название: Re: Непонятка в юнит-тесте
Отправлено: Fat-Zer от Февраль 26, 2014, 01:33
из доков
Цитировать
QCOMPARE
...
In the case of comparing floats and doubles, qFuzzyCompare() is used for comparing. This means that comparing to 0 will likely fail. One solution to this is to compare to 1, and add 1 to the produced output.

Баг с отказом девелоперов переделывать qFuzzyCompare(): https://bugreports.qt-project.org/browse/QTBUG-16819

ещё, как вариант, QVERIFY(qFuzzyIsNull(0.6 * 8.0 - 0.4 * 12.0)).

ЗЫ: как я понял, в следующем релизе, 5.3.0, могут пофиксить... могу ошибаться...
ЗЗЫ: нет, я ошибаюсь, пока такого нет... стоило бы баг запостить с просьбой, чтобы qCompare() для double/float использовала бы qFloatDistance() из QTBUG-32632 вместо qFuzzyCompare().


Название: Re: Непонятка в юнит-тесте
Отправлено: Vamireh от Март 21, 2014, 11:17
Забыл про тему эту. QVERIFY, кстати, не помог. Сделал по тупому: сравниваю QString::number(). Грубо, но для моей задачи сойдет.