diff --git a/test/unit_test/static/si_cgs_test.cpp b/test/unit_test/static/si_cgs_test.cpp index 151e920f..78605221 100644 --- a/test/unit_test/static/si_cgs_test.cpp +++ b/test/unit_test/static/si_cgs_test.cpp @@ -106,6 +106,46 @@ static_assert(10Ba == quantity_cast(1Pa)); } +namespace cgs_test { + +// addition + +// static_assert(100cm + si::length(1) == si::length(2)); // should not compile (different dimensions) +// static_assert(si::length(1) + 100cm == si::length(2)); // should not compile (different dimensions) +static_assert(quantity_cast>(100cm) + si::length(1) == si::length(2)); +static_assert(si::length(1) + quantity_cast>(100cm) == si::length(2)); +static_assert(100cm + quantity_cast>(si::length(1)) == 200cm); +static_assert(quantity_cast>(si::length(1)) + 100cm == 200cm); + +// substraction + +// static_assert(500cm - si::length(1) == si::length(4)); // should not compile (different dimensions) +// static_assert(si::length(5) - 100cm == si::length(4)); // should not compile (different dimensions) +static_assert(quantity_cast>(500cm) - si::length(1) == si::length(4)); +static_assert(si::length(5) - quantity_cast>(100cm) == si::length(4)); +static_assert(500cm - quantity_cast>(si::length(1)) == 400cm); +static_assert(quantity_cast>(si::length(5)) - 100cm == 400cm); + +// multiplication + +// static_assert(200cm * si::length(2) == si::area(4)); // should not compile (unknown dimension) + +static_assert(quantity_cast(200cm) * si::length(2) == si::area(4)); +static_assert(200cm * quantity_cast(si::length(2)) == 40'000sq_cm); + +// TODO Add support for quantity_cast on an unknown_dimension? +// static_assert(quantity_cast>(200cm * si::length(2)) == si::area(4)); +// static_assert(quantity_cast(200cm * si::length(2)) == si::area(4)); +// static_assert(quantity_cast>(200cm * si::length(2)) == 40'000sq_cm); +// static_assert(quantity_cast(200cm * si::length(2)) == 40'000sq_cm); + +// division + +// static_assert(si::area(4) / 200cm == si::length(2)); // should not compile (unknown dimension) + +static_assert(si::area(4) / quantity_cast>(200cm) == si::length(2)); +static_assert(quantity_cast>(si::area(4)) / 200cm == 200cm); + } -// TODO add tests for arithmetic operations and ensure that they require quantity_cast +}