refactor: get_complexity refactored to returned maximum complexity of an element (instead of the sum of elements)

This commit is contained in:
Mateusz Pusz
2024-11-04 19:13:48 +01:00
parent 467d9a5558
commit cc25f9b0de
2 changed files with 14 additions and 5 deletions

View File

@ -610,7 +610,10 @@ template<QuantitySpec Q>
template<typename... Ts> template<typename... Ts>
[[nodiscard]] consteval int get_complexity(type_list<Ts...>) [[nodiscard]] consteval int get_complexity(type_list<Ts...>)
{ {
return (0 + ... + get_complexity(Ts{})); if constexpr (sizeof...(Ts) == 0)
return 0;
else
return max({get_complexity(Ts{})...});
} }
template<QuantitySpec Q, int... Ints> template<QuantitySpec Q, int... Ints>
@ -629,7 +632,7 @@ template<QuantitySpec Q>
[[nodiscard]] consteval int get_complexity(Q) [[nodiscard]] consteval int get_complexity(Q)
{ {
if constexpr (DerivedQuantitySpec<Q>) if constexpr (DerivedQuantitySpec<Q>)
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_; }) else if constexpr (requires { Q::_equation_; })
return 1 + get_complexity(Q::_equation_); return 1 + get_complexity(Q::_equation_);
else else

View File

@ -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(acceleration / time) == 2); static_assert(get_complexity(acceleration / time) == 2);
static_assert(get_complexity(speed * area) == 2); static_assert(get_complexity(speed * area) == 1);
static_assert(get_complexity(speed / frequency) == 2); static_assert(get_complexity(acceleration * area) == 2);
static_assert(get_complexity(speed * area / frequency) == 3); 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 // explode
static_assert(explode<get_complexity(inverse(time))>(frequency).quantity == inverse(period_duration)); static_assert(explode<get_complexity(inverse(time))>(frequency).quantity == inverse(period_duration));