From caf0e66cb2fcd779df768a47ff2c40cea557e8db Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 28 Sep 2023 09:01:52 +0200 Subject: [PATCH] test: more unit tests for unit conversions --- test/unit_test/static/quantity_test.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index 60f1e36d..4cb942b7 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -206,10 +206,27 @@ static_assert(quantity(2000. * m).in(km).numerical_value_ == 2.) static_assert(quantity(2 * km).in(km).numerical_value_ == 2); static_assert(quantity(2 * km).in(m).numerical_value_ == 2000); +static_assert(is_of_type<(2. * km).force_in(m), quantity>); +static_assert(is_of_type>); +static_assert(is_of_type>); + +static_assert(quantity(2. * km).force_in(km).numerical_value_ == 2.); +static_assert(quantity(2. * km).force_in(m).numerical_value_ == 2000.); +static_assert(quantity(2000. * m).force_in(km).numerical_value_ == 2.); +static_assert(quantity(2 * km).force_in(km).numerical_value_ == 2); +static_assert(quantity(2 * km).force_in(m).numerical_value_ == 2000); +static_assert(quantity(2000 * m).force_in(km).numerical_value_ == 2); + template typename Q> concept invalid_unit_conversion = requires { - requires !requires { Q(2000 * m).in(km); }; // truncating conversion - requires !requires { Q(2 * m).in(s); }; // invalid unit + requires !requires { Q(2000 * m).in(km); }; // truncating conversion + requires !requires { Q(2 * m).in(s); }; // unit of a different quantity & dimension + requires !requires { Q(60 * Hz).in(Bq); }; // unit of a different kind (same dimension) + + requires !requires { Q(2 * m).force_in(s); }; // unit of a different quantity & dimension + requires !requires { + Q(60 * Hz).force_in(Bq); + }; // unit of a different kind (same dimension) }; static_assert(invalid_unit_conversion);