Версия BOOST_CHECK_CLOSE, которая имеет дело с абсолютными различиями

Существует ли версия BOOST_CHECK_CLOSE, которая работает с абсолютными различиями, а не с процентами? В некоторых случаях абсолютные различия имеют больше смысла, например, когда мы работаем с деньгами (да, я знаю, что удвоение не самый лучший тип для этого), мы можем проверить, что ответ в порядке до ближайшей копейки. Есть много других примеров.

Довольно просто написать один из них, например, используя BOOST_CHECK_SMALL, но подробный вывод правого макроса намного облегчит поиск ошибки.

1

Решение

TBH, я не понимаю проблему с BOOST_CHECK_SMALL:

double val = func(); //should be between 95 and 105
BOOST_CHECK_SMALL(val - 100, 5);

Однако, если он больше похож на CHECK_CLOSE, вам придется свернуть свой собственный макрос, как это делает boost — просто покопаться в соответствующих заголовках. Вам, вероятно, придется добавить собственное значение перечисления типа проверки, создать предикат и использовать его в своем макросе.

Или использовать BOOST_CHECK_PREDICATE который, честно говоря, выглядит намного страшнее, чем CHECK_SMALL с разницей.
Или просто используйте BOOST_CHECK с пользовательской функцией, возвращающей предикат — но я думаю, что это излишне.

5

Другие решения

Других решений пока нет …