From cc25f9b0de9843389380d31b66dbdbc99b30fb97 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Mon, 4 Nov 2024 19:13:48 +0100 Subject: [PATCH] refactor: `get_complexity` refactored to returned maximum complexity of an element (instead of the sum of elements) --- src/core/include/mp-units/framework/quantity_spec.h | 7 +++++-- test/static/quantity_spec_test.cpp | 12 +++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/core/include/mp-units/framework/quantity_spec.h b/src/core/include/mp-units/framework/quantity_spec.h index 6a7cb9be..802cece1 100644 --- a/src/core/include/mp-units/framework/quantity_spec.h +++ b/src/core/include/mp-units/framework/quantity_spec.h @@ -610,7 +610,10 @@ template template [[nodiscard]] consteval int get_complexity(type_list) { - return (0 + ... + get_complexity(Ts{})); + if constexpr (sizeof...(Ts) == 0) + return 0; + else + return max({get_complexity(Ts{})...}); } template @@ -629,7 +632,7 @@ template [[nodiscard]] consteval int get_complexity(Q) { if constexpr (DerivedQuantitySpec) - return get_complexity(typename Q::_num_{}) + get_complexity(typename Q::_den_{}); + return max(get_complexity(typename Q::_num_{}), get_complexity(typename Q::_den_{})); else if constexpr (requires { Q::_equation_; }) return 1 + get_complexity(Q::_equation_); else diff --git a/test/static/quantity_spec_test.cpp b/test/static/quantity_spec_test.cpp index 63bb95bb..73778da6 100644 --- a/test/static/quantity_spec_test.cpp +++ b/test/static/quantity_spec_test.cpp @@ -458,9 +458,15 @@ static_assert(get_complexity(force) == 3); static_assert(get_complexity(acceleration * time) == 2); static_assert(get_complexity(acceleration / time) == 2); -static_assert(get_complexity(speed * area) == 2); -static_assert(get_complexity(speed / frequency) == 2); -static_assert(get_complexity(speed * area / frequency) == 3); +static_assert(get_complexity(speed * area) == 1); +static_assert(get_complexity(acceleration * area) == 2); +static_assert(get_complexity(acceleration * force) == 3); +static_assert(get_complexity(speed / frequency) == 1); +static_assert(get_complexity(acceleration / frequency) == 2); +static_assert(get_complexity(force / frequency) == 3); +static_assert(get_complexity(area / acceleration) == 2); +static_assert(get_complexity(area / force) == 3); +static_assert(get_complexity(speed * area / frequency) == 1); // explode static_assert(explode(frequency).quantity == inverse(period_duration));