diff --git a/src/core/include/units/unit.h b/src/core/include/units/unit.h index 3466a86d..03eebcfe 100644 --- a/src/core/include/units/unit.h +++ b/src/core/include/units/unit.h @@ -581,11 +581,11 @@ enum class text_encoding { default_encoding = unicode }; -enum class unit_symbol_denominator { - solidus_one, // m/s; kg m-1 s-1 - always_solidus, // m/s; kg/(m s) - always_negative, // m s-1; kg m-1 s-1 - default_denominator = solidus_one +enum class unit_symbol_solidus { + one_denominator, // m/s; kg m-1 s-1 + always, // m/s; kg/(m s) + never, // m s-1; kg m-1 s-1 + default_denominator = one_denominator }; enum class unit_symbol_separator { @@ -596,7 +596,7 @@ enum class unit_symbol_separator { struct unit_symbol_formatting { text_encoding encoding = text_encoding::default_encoding; - unit_symbol_denominator denominator = unit_symbol_denominator::default_denominator; + unit_symbol_solidus solidus = unit_symbol_solidus::default_denominator; unit_symbol_separator separator = unit_symbol_separator::default_separator; }; @@ -749,22 +749,22 @@ constexpr Out unit_symbol_impl(Out out, const type_list& nums, const ty // no denominator return unit_symbol_impl(out, nums, std::index_sequence_for(), fmt, false); } else { - using enum unit_symbol_denominator; + using enum unit_symbol_solidus; if constexpr (sizeof...(Nums) > 0) { unit_symbol_impl(out, nums, std::index_sequence_for(), fmt, false); } - if (fmt.denominator == always_solidus || (fmt.denominator == solidus_one && sizeof...(Dens) == 1)) { + if (fmt.solidus == always || (fmt.solidus == one_denominator && sizeof...(Dens) == 1)) { if constexpr (sizeof...(Nums) == 0) *out++ = '1'; *out++ = '/'; } else { out = print_separator(out, fmt); } - if (fmt.denominator == always_solidus && sizeof...(Dens) > 1) *out++ = '('; - bool negative_power = fmt.denominator == always_negative || (fmt.denominator == solidus_one && sizeof...(Dens) > 1); + if (fmt.solidus == always && sizeof...(Dens) > 1) *out++ = '('; + bool negative_power = fmt.solidus == never || (fmt.solidus == one_denominator && sizeof...(Dens) > 1); out = unit_symbol_impl(out, dens, std::index_sequence_for(), fmt, negative_power); - if (fmt.denominator == always_solidus && sizeof...(Dens) > 1) *out++ = ')'; + if (fmt.solidus == always && sizeof...(Dens) > 1) *out++ = ')'; return out; } } diff --git a/test/unit_test/static/unit_test.cpp b/test/unit_test/static/unit_test.cpp index da71436e..9ead5e96 100644 --- a/test/unit_test/static/unit_test.cpp +++ b/test/unit_test/static/unit_test.cpp @@ -482,7 +482,7 @@ static_assert( #ifdef __cpp_lib_constexpr_string using enum text_encoding; -using enum unit_symbol_denominator; +using enum unit_symbol_solidus; using enum unit_symbol_separator; // named units @@ -514,42 +514,36 @@ static_assert(unit_symbol(kilometre * metre) == "km m"); static_assert(unit_symbol(kilometre * metre, {.separator = dot}) == "km⋅m"); static_assert(unit_symbol(metre / metre) == ""); static_assert(unit_symbol(kilometre / metre) == "km/m"); -static_assert(unit_symbol(kilometre / metre, {.denominator = always_negative}) == "km m⁻¹"); -static_assert(unit_symbol(kilometre / metre, {.encoding = ascii, .denominator = always_negative}) == "km m^-1"); +static_assert(unit_symbol(kilometre / metre, {.solidus = never}) == "km m⁻¹"); +static_assert(unit_symbol(kilometre / metre, {.encoding = ascii, .solidus = never}) == "km m^-1"); static_assert(unit_symbol(metre / second) == "m/s"); -static_assert(unit_symbol(metre / second, {.denominator = always_solidus}) == "m/s"); -static_assert(unit_symbol(metre / second, {.denominator = always_negative}) == "m s⁻¹"); -static_assert(unit_symbol(metre / second, {.encoding = ascii, .denominator = always_negative}) == "m s^-1"); -static_assert(unit_symbol(metre / second, {.denominator = always_negative, .separator = dot}) == "m⋅s⁻¹"); +static_assert(unit_symbol(metre / second, {.solidus = always}) == "m/s"); +static_assert(unit_symbol(metre / second, {.solidus = never}) == "m s⁻¹"); +static_assert(unit_symbol(metre / second, {.encoding = ascii, .solidus = never}) == "m s^-1"); +static_assert(unit_symbol(metre / second, {.solidus = never, .separator = dot}) == "m⋅s⁻¹"); static_assert(unit_symbol(metre / square) == "m/s²"); static_assert(unit_symbol(metre / square, {.encoding = ascii}) == "m/s^2"); -static_assert(unit_symbol(metre / square, {.denominator = always_solidus}) == "m/s²"); -static_assert(unit_symbol(metre / square, {.encoding = ascii, .denominator = always_solidus}) == "m/s^2"); -static_assert(unit_symbol(metre / square, {.denominator = always_negative}) == "m s⁻²"); -static_assert(unit_symbol(metre / square, {.encoding = ascii, .denominator = always_negative}) == "m s^-2"); -static_assert(unit_symbol(metre / square, {.denominator = always_negative, .separator = dot}) == "m⋅s⁻²"); +static_assert(unit_symbol(metre / square, {.solidus = always}) == "m/s²"); +static_assert(unit_symbol(metre / square, {.encoding = ascii, .solidus = always}) == "m/s^2"); +static_assert(unit_symbol(metre / square, {.solidus = never}) == "m s⁻²"); +static_assert(unit_symbol(metre / square, {.encoding = ascii, .solidus = never}) == "m s^-2"); +static_assert(unit_symbol(metre / square, {.solidus = never, .separator = dot}) == "m⋅s⁻²"); static_assert(unit_symbol(kilogram * metre / square) == "kg m/s²"); static_assert(unit_symbol(kilogram * metre / square, {.separator = dot}) == "kg⋅m/s²"); static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii}) == "kg m/s^2"); -static_assert(unit_symbol(kilogram * metre / square, {.denominator = always_solidus}) == "kg m/s²"); -static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .denominator = always_solidus}) == - "kg m/s^2"); -static_assert(unit_symbol(kilogram * metre / square, {.denominator = always_negative}) == "kg m s⁻²"); -static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .denominator = always_negative}) == - "kg m s^-2"); -static_assert(unit_symbol(kilogram * metre / square, {.denominator = always_negative, .separator = dot}) == - "kg⋅m⋅s⁻²"); +static_assert(unit_symbol(kilogram * metre / square, {.solidus = always}) == "kg m/s²"); +static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .solidus = always}) == "kg m/s^2"); +static_assert(unit_symbol(kilogram * metre / square, {.solidus = never}) == "kg m s⁻²"); +static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .solidus = never}) == "kg m s^-2"); +static_assert(unit_symbol(kilogram * metre / square, {.solidus = never, .separator = dot}) == "kg⋅m⋅s⁻²"); static_assert(unit_symbol(kilogram / metre / square) == "kg m⁻¹ s⁻²"); static_assert(unit_symbol(kilogram / metre / square, {.separator = dot}) == "kg⋅m⁻¹⋅s⁻²"); static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii}) == "kg m^-1 s^-2"); -static_assert(unit_symbol(kilogram / metre / square, {.denominator = always_solidus}) == "kg/(m s²)"); -static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .denominator = always_solidus}) == - "kg/(m s^2)"); -static_assert(unit_symbol(kilogram / metre / square, {.denominator = always_negative}) == "kg m⁻¹ s⁻²"); -static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .denominator = always_negative}) == - "kg m^-1 s^-2"); -static_assert(unit_symbol(kilogram / metre / square, {.denominator = always_negative, .separator = dot}) == - "kg⋅m⁻¹⋅s⁻²"); +static_assert(unit_symbol(kilogram / metre / square, {.solidus = always}) == "kg/(m s²)"); +static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .solidus = always}) == "kg/(m s^2)"); +static_assert(unit_symbol(kilogram / metre / square, {.solidus = never}) == "kg m⁻¹ s⁻²"); +static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .solidus = never}) == "kg m^-1 s^-2"); +static_assert(unit_symbol(kilogram / metre / square, {.solidus = never, .separator = dot}) == "kg⋅m⁻¹⋅s⁻²"); static_assert(unit_symbol(pow<123>(metre)) == "m¹²³"); static_assert(unit_symbol(pow<1, 2>(metre)) == "m^(1/2)"); static_assert(unit_symbol(pow<3, 5>(metre)) == "m^(3/5)");