![]() |
![]() ![]() ![]() ![]() |
![]() |
Floating point comparisonBoost , Boost.Test , Extended comparisons support
|
|||||||||||||||||||||||||||||||||||||||
|
Код |
|---|
| >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
|
Выход |
|---|
| >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
Как параметр толерантности обрабатывается в деталях, описан здесь.
Можно указать толерантность сравнения плавающей точки на одно утверждение, предоставив manipulator boost::test_tools::tolerance в качестве второго аргумента BOOST_TEST.
|
Код |
|---|
| >>>>>>>>>>>>>>>>>>>>>>> |
|
Выход |
|---|
| >>>>>>>>>>>>> |
![]() |
Caution |
|---|---|
Поддержка манипуляторов требует, чтобы ваш компилятор поддерживал вариатические макросы, |
Можно указать допуск в процентах. На уровне испытательного блока синтаксис декоратора:
* boost::unit_test::tolerance( boost::test_tools::fpc::percent_tolerance(2.0) ) // equivalent to: boost::unit_test::tolerance( 2.0 / 100 )
На уровне утверждения синтаксис манипулятора:
2.0% boost::test_tools::tolerance() boost::test_tools::tolerance( boost::test_tools::fpc::percent_tolerance(2.0) ) // both equivalent to: boost::test_tools::tolerance( 2.0 / 100 )
Манипулятор толерантность определяет толерантность только для одного типа плавающей точки. Этот тип выводится из формы числового значения, пройденного вдоль манипулятора:
|
выражение |
семантика |
|---|---|
|
допуск для типа |
|
допуск для типа |
|
допуск для типа |
|
допуск для типа |
|
Допуск для определенного пользователем типа |
|
допуск по типу |
|
допуск для типа |
|
Допуск для типа |
Это также относится к декоратору толерантность. В случае декоратора, однако, можно применять несколько декораторов толерантность, определяя толерантность к различным типам.
Когда сравниваются значения двух разных типов плавающих точек T и U, >BOOST_TEST13> использует допуск, указанный для типа boost::common_type<>T,U>::type>>>> Например, при установлении допуска для смешанного float-to-ДП для сравнения необходимо установить толерантность к типу ДП.
Учитывая два типа плавающих точек T и U и их общий тип C, допуск, указанный для типа C, применяется только тогда, когда типы T и U появляются как суб-экспрессии полного выражения внутри утверждения BOOST_TEST. Он не применяется, когда T и U сравниваются внутри функции, на которую ссылаются при оценке выражения:
BOOST_AUTO_TEST_CASE(test, * utf::tolerance(0.02)) { double d1 = 1.00, d2 = 0.99; boost::optional<double> o1 = 1.00, o2 = 0.99; BOOST_TEST(d1 == d2); // with tolerance (double vs. double) BOOST_TEST(o1 == o2); // without tolerance (optional vs. optional) BOOST_TEST(o1 == d2); // without tolerance (optional vs. double) BOOST_TEST(*o1 == *o2); // with tolerance (double vs. double) }
Наконец, обратите внимание, что сравнения толерантности также применяются к оператору< с семантикой «менее чем на некоторую терпимость» и другим реляционным операторам. Кроме того, сопоставления на основе терпимости проводятся в том случае, когда в органе утверждения обрабатывается более сложное дерево выражения:
|
Код |
|---|
| >>>>>>>>>>>>>> |
|
Выход |
|---|
| >>>>>>>>>>>>>>>>> |
Статья Floating point comparison раздела Boost.Test Extended comparisons support может быть полезна для разработчиков на c++ и boost.
:: Главная :: Extended comparisons support ::
реклама |