Существует ли версия BOOST_CHECK_CLOSE, которая работает с абсолютными различиями, а не с процентами? В некоторых случаях абсолютные различия имеют больше смысла, например, когда мы работаем с деньгами (да, я знаю, что удвоение не самый лучший тип для этого), мы можем проверить, что ответ в порядке до ближайшей копейки. Есть много других примеров.
Довольно просто написать один из них, например, используя BOOST_CHECK_SMALL, но подробный вывод правого макроса намного облегчит поиск ошибки.
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 с пользовательской функцией, возвращающей предикат — но я думаю, что это излишне.
Других решений пока нет …