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>
[[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>
@ -629,7 +632,7 @@ template<QuantitySpec Q>
[[nodiscard]] consteval int get_complexity(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_; })
return 1 + get_complexity(Q::_equation_);
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(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<get_complexity(inverse(time))>(frequency).quantity == inverse(period_duration));