Проблема с BOOST_CHECK_CLOSE_FRACTION - PullRequest
       13

Проблема с BOOST_CHECK_CLOSE_FRACTION

5 голосов
/ 22 января 2010

Я использую библиотеку Boost :: Test и пытаюсь проверить, близко ли фактическое значение в процентах к ожидаемому значению:

BOOST_CHECK_CLOSE_FRACTION(
    items[i].ExpectedPercent,
    items[i].ActualCount / totalCount,
    0.05);

По какой-то причине эта проверка не проходит, даже если значения достаточно близки:

difference between items[i].ExpectedPercent{0.40000000000000002}
   and items[i].ActualCount / totalReturned{0.42999999999999999}
                                    exceeds 0.050000000000000003

Это проблема с Boost или с тем, как я использую Boost?

Ответы [ 3 ]

3 голосов
/ 22 января 2010

После некоторого тестирования выясняется, что документация для BOOST_CHECK_CLOSE_FRACTION неверна. Допуск должен быть указан как часть ожидаемого значения.

Итак, TFAE:

BOOST_CHECK(abs(x - y) < (min(x, y) * 0.1));
BOOST_CHECK_CLOSE(x, y, 10);
BOOST_CHECK_CLOSE_FRACTION(x, y, 0.1);
2 голосов
/ 22 января 2010

Проблема в том, как вы используете повышение.

Последний аргумент - это процентное отклонение, а не абсолютное значение отклонения. 5% от 0,4 - это 0,02.

1 голос
/ 26 декабря 2013

Очевидно, что BOOST_CHECK_CLOSE и BOOST_CHECK_CLOSE_FRACTION не будут работать, если вы проверите, если что-то близко к 0. Тогда вы можете использовать:

BOOST_CHECK(abs(x - y) < accurancy);
...