Как я могу использовать Boost Test с Boost Units

Я ожидал, что это скомпилируется правильно:

#include <boost/test/unit_test.hpp>
#include <boost/units/quantity.hpp>
#include <boost/units/systems/angle/degrees.hpp>

using boost::units::quantity;
using boost::units::degree::degrees;
using boost::units::degree::plane_angle;

int main() {
    quantity<plane_angle> q1 = 15 * degrees;

    BOOST_CHECK_CLOSE(q1, 15 * degrees, 1e-8);
    return 0;
}

К сожалению, это приводит к нескольким сотням ошибок в GCC.

Конечно, я мог бы сделать это вместо этого.

BOOST_CHECK_CLOSE(q1.value(), 15, 1e-8);

Но я хотел бы сохранить единицы измерения в тестовом примере, на случай, если кто-то решит изменить тип единицы измерения. q1,

Есть ли способ сохранить единицу в явном виде?

1 ответ

Один из вариантов — разделить равные значения и сравнить с 1:

BOOST_CHECK_CLOSE(q1 / (15 * градусов), 1, 1e-8);

При делении boost::units::quantity на один и тот же тип вы получаете безразмерную величину, которую можно неявно привести к удвоению.

Другие вопросы по тегам