Russian Qt Forum
Ноябрь 23, 2024, 13:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Непонятка в юнит-тесте  (Прочитано 2663 раз)
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;
}
« Последнее редактирование: Март 21, 2014, 11:17 от Vamireh » Записан
Fat-Zer
Гость
« Ответ #1 : Февраль 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().
« Последнее редактирование: Февраль 26, 2014, 02:24 от Fat-Zer » Записан
Vamireh
Гость
« Ответ #2 : Март 21, 2014, 11:17 »

Забыл про тему эту. QVERIFY, кстати, не помог. Сделал по тупому: сравниваю QString::number(). Грубо, но для моей задачи сойдет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 21.