diff --git a/src/core/include/mp-units/framework/unit.h b/src/core/include/mp-units/framework/unit.h index 6dc14409..43bf8b19 100644 --- a/src/core/include/mp-units/framework/unit.h +++ b/src/core/include/mp-units/framework/unit.h @@ -781,11 +781,11 @@ template Out, auto M, typename U> constexpr Out unit_symbol_impl(Out out, const scaled_unit_impl& u, const unit_symbol_formatting& fmt, bool negative_power) { - *out++ = '['; + *out++ = '('; magnitude_symbol(out, M, fmt); if constexpr (space_before_unit_symbol::_reference_unit_>) *out++ = ' '; unit_symbol_impl(out, u._reference_unit_, fmt, negative_power); - *out++ = ']'; + *out++ = ')'; return out; } diff --git a/test/static/unit_symbol_test.cpp b/test/static/unit_symbol_test.cpp index 9f6faecd..4a1d01dd 100644 --- a/test/static/unit_symbol_test.cpp +++ b/test/static/unit_symbol_test.cpp @@ -112,34 +112,34 @@ static_assert(unit_symbol(zebi) == "Zibit"); static_assert(unit_symbol(yobi) == "Yibit"); // scaled units -static_assert(unit_symbol(mag<100> * metre) == "[100 m]"); -static_assert(unit_symbol(mag<100> * metre) == "[100 m]"); -static_assert(unit_symbol(mag<1000> * metre) == "[10³ m]"); -static_assert(unit_symbol(mag_power<10, 3> * metre) == "[10³ m]"); -static_assert(unit_symbol(mag<1000> * metre) == "[10^3 m]"); -static_assert(unit_symbol(mag<6000> * metre) == "[6 × 10³ m]"); -static_assert(unit_symbol(mag<6> * mag_power<10, 3> * metre) == "[6 × 10³ m]"); -static_assert(unit_symbol(mag<6000> * metre) == "[6 x 10^3 m]"); -static_assert(unit_symbol(mag<10600> * metre) == "[10600 m]"); -static_assert(unit_symbol(mag<60> * second) == "[60 s]"); -static_assert(unit_symbol(mag_ratio<1, 18> * metre / second) == "[1/18 m]/s"); -static_assert(unit_symbol(mag_ratio<1, 18> * (metre / second)) == "[1/18 m/s]"); -static_assert(unit_symbol(mag_ratio<1, 1800> * metre / second) == "[1/1800 m]/s"); -static_assert(unit_symbol(mag_ratio<1, 1800> * (metre / second)) == "[1/1800 m/s]"); -static_assert(unit_symbol(mag_ratio<1, 18000> * metre / second) == "[1/18 × 10⁻³ m]/s"); -static_assert(unit_symbol(mag_ratio<1, 18000> * (metre / second)) == "[1/18 × 10⁻³ m/s]"); -static_assert(unit_symbol(mag_ratio<1, 18000> * metre / second) == "[1/18 x 10^-3 m]/s"); -static_assert(unit_symbol(mag_ratio<1, 18000> * (metre / second)) == "[1/18 x 10^-3 m/s]"); +static_assert(unit_symbol(mag<100> * metre) == "(100 m)"); +static_assert(unit_symbol(mag<100> * metre) == "(100 m)"); +static_assert(unit_symbol(mag<1000> * metre) == "(10³ m)"); +static_assert(unit_symbol(mag_power<10, 3> * metre) == "(10³ m)"); +static_assert(unit_symbol(mag<1000> * metre) == "(10^3 m)"); +static_assert(unit_symbol(mag<6000> * metre) == "(6 × 10³ m)"); +static_assert(unit_symbol(mag<6> * mag_power<10, 3> * metre) == "(6 × 10³ m)"); +static_assert(unit_symbol(mag<6000> * metre) == "(6 x 10^3 m)"); +static_assert(unit_symbol(mag<10600> * metre) == "(10600 m)"); +static_assert(unit_symbol(mag<60> * second) == "(60 s)"); +static_assert(unit_symbol(mag_ratio<1, 18> * metre / second) == "(1/18 m)/s"); +static_assert(unit_symbol(mag_ratio<1, 18> * (metre / second)) == "(1/18 m/s)"); +static_assert(unit_symbol(mag_ratio<1, 1800> * metre / second) == "(1/1800 m)/s"); +static_assert(unit_symbol(mag_ratio<1, 1800> * (metre / second)) == "(1/1800 m/s)"); +static_assert(unit_symbol(mag_ratio<1, 18000> * metre / second) == "(1/18 × 10⁻³ m)/s"); +static_assert(unit_symbol(mag_ratio<1, 18000> * (metre / second)) == "(1/18 × 10⁻³ m/s)"); +static_assert(unit_symbol(mag_ratio<1, 18000> * metre / second) == "(1/18 x 10^-3 m)/s"); +static_assert(unit_symbol(mag_ratio<1, 18000> * (metre / second)) == "(1/18 x 10^-3 m/s)"); // TODO implement all the below -// static_assert(unit_symbol(mag_power<2, 1, 2> * one) == "[2^(1/2)]"); -// static_assert(unit_symbol(mag_power<2, 1, 2> * one) == "[2^(1/2)]"); -// static_assert(unit_symbol(mag_power<2, 1, 2> * m) == "[2^(1/2) m]"); -// static_assert(unit_symbol(mag_power<2, 1, 2> * m) == "[2^(1/2) m]"); -// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * one) == "[1/2^(1/2)]"); -// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * one) == "[1/2^(1/2)]"); -// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * m) == "[1/2^(1/2) m]"); -// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * m) == "[1/2^(1/2) m]"); +// static_assert(unit_symbol(mag_power<2, 1, 2> * one) == "(2^(1/2))"); +// static_assert(unit_symbol(mag_power<2, 1, 2> * one) == "(2^(1/2))"); +// static_assert(unit_symbol(mag_power<2, 1, 2> * m) == "(2^(1/2) m)"); +// static_assert(unit_symbol(mag_power<2, 1, 2> * m) == "(2^(1/2) m)"); +// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * one) == "(1/2^(1/2))"); +// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * one) == "(1/2^(1/2))"); +// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * m) == "(1/2^(1/2) m)"); +// static_assert(unit_symbol(mag<1> / mag_power<2, 1, 2> * m) == "(1/2^(1/2) m)"); // magnitude constants #if defined MP_UNITS_COMP_CLANG || MP_UNITS_COMP_CLANG < 18 @@ -150,67 +150,67 @@ inline constexpr struct e final : mag_constant<"e", std::numbers::e_v * one) == "[π]"); -static_assert(unit_symbol(mag<π> * one) == "[pi]"); -static_assert(unit_symbol(mag<π> * metre) == "[π m]"); -static_assert(unit_symbol(mag<π> * metre) == "[pi m]"); -static_assert(unit_symbol(mag<2> * mag<π> * metre) == "[2 π m]"); -static_assert(unit_symbol(mag<2> * mag<π> * metre) == "[2 pi m]"); -static_assert(unit_symbol(mag<2> * mag<π> * metre) == "[2⋅π m]"); +static_assert(unit_symbol(mag<π> * one) == "(π)"); +static_assert(unit_symbol(mag<π> * one) == "(pi)"); +static_assert(unit_symbol(mag<π> * metre) == "(π m)"); +static_assert(unit_symbol(mag<π> * metre) == "(pi m)"); +static_assert(unit_symbol(mag<2> * mag<π> * metre) == "(2 π m)"); +static_assert(unit_symbol(mag<2> * mag<π> * metre) == "(2 pi m)"); +static_assert(unit_symbol(mag<2> * mag<π> * metre) == "(2⋅π m)"); -static_assert(unit_symbol(mag<1> / mag<π> * one) == "[1/π]"); -static_assert(unit_symbol(mag<1> / mag<π> * one) == "[1/pi]"); -static_assert(unit_symbol(mag<1> / mag<π> * one) == "[π⁻¹]"); -static_assert(unit_symbol(mag<1> / mag<π> * one) == "[pi^-1]"); +static_assert(unit_symbol(mag<1> / mag<π> * one) == "(1/π)"); +static_assert(unit_symbol(mag<1> / mag<π> * one) == "(1/pi)"); +static_assert(unit_symbol(mag<1> / mag<π> * one) == "(π⁻¹)"); +static_assert(unit_symbol(mag<1> / mag<π> * one) == "(pi^-1)"); -static_assert(unit_symbol(mag<1> / mag<π> * metre) == "[1/π m]"); -static_assert(unit_symbol(mag<1> / mag<π> * metre) == "[1/pi m]"); -static_assert(unit_symbol(mag<1> / mag<π> * metre) == "[π⁻¹ m]"); -static_assert(unit_symbol(mag<1> / mag<π> * metre) == "[pi^-1 m]"); +static_assert(unit_symbol(mag<1> / mag<π> * metre) == "(1/π m)"); +static_assert(unit_symbol(mag<1> / mag<π> * metre) == "(1/pi m)"); +static_assert(unit_symbol(mag<1> / mag<π> * metre) == "(π⁻¹ m)"); +static_assert(unit_symbol(mag<1> / mag<π> * metre) == "(pi^-1 m)"); -static_assert(unit_symbol(mag<2> / mag<π> * metre) == "[2/π m]"); -static_assert(unit_symbol(mag<2> / mag<π> * metre) == "[2/pi m]"); -static_assert(unit_symbol(mag<2> / mag<π> * metre) == "[2 π⁻¹ m]"); -static_assert(unit_symbol(mag<2> / mag<π> * metre) == "[2 pi^-1 m]"); -static_assert(unit_symbol(mag<2> / mag<π> * metre) == "[2⋅π⁻¹ m]"); +static_assert(unit_symbol(mag<2> / mag<π> * metre) == "(2/π m)"); +static_assert(unit_symbol(mag<2> / mag<π> * metre) == "(2/pi m)"); +static_assert(unit_symbol(mag<2> / mag<π> * metre) == "(2 π⁻¹ m)"); +static_assert(unit_symbol(mag<2> / mag<π> * metre) == "(2 pi^-1 m)"); +static_assert(unit_symbol(mag<2> / mag<π> * metre) == "(2⋅π⁻¹ m)"); -static_assert(unit_symbol(mag<1> / (mag<2> * mag<π>)*metre) == "[2⁻¹ π⁻¹ m]"); -static_assert(unit_symbol(mag<1> / (mag<2> * mag<π>)*metre) == "[1/(2 π) m]"); +static_assert(unit_symbol(mag<1> / (mag<2> * mag<π>)*metre) == "(2⁻¹ π⁻¹ m)"); +static_assert(unit_symbol(mag<1> / (mag<2> * mag<π>)*metre) == "(1/(2 π) m)"); static_assert(unit_symbol(mag<1> / (mag<2> * mag<π>)*metre) == - "[1/(2 pi) m]"); -static_assert(unit_symbol(mag_ratio<1, 2> / mag<π> * metre) == "[2⁻¹ π⁻¹ m]"); -static_assert(unit_symbol(mag_ratio<1, 2> / mag<π> * metre) == "[1/(2 π) m]"); + "(1/(2 pi) m)"); +static_assert(unit_symbol(mag_ratio<1, 2> / mag<π> * metre) == "(2⁻¹ π⁻¹ m)"); +static_assert(unit_symbol(mag_ratio<1, 2> / mag<π> * metre) == "(1/(2 π) m)"); static_assert(unit_symbol(mag_ratio<1, 2> / mag<π> * metre) == - "[1/(2 pi) m]"); -static_assert(unit_symbol(mag_ratio<1, 2> * mag<π> * metre) == "[π/2 m]"); + "(1/(2 pi) m)"); +static_assert(unit_symbol(mag_ratio<1, 2> * mag<π> * metre) == "(π/2 m)"); -static_assert(unit_symbol(mag_power * one) == "[π²]"); -static_assert(unit_symbol(mag_power * one) == "[pi^2]"); -static_assert(unit_symbol(mag_power * metre) == "[π^(1/2) m]"); -static_assert(unit_symbol(mag_power * metre) == "[pi^(1/2) m]"); +static_assert(unit_symbol(mag_power * one) == "(π²)"); +static_assert(unit_symbol(mag_power * one) == "(pi^2)"); +static_assert(unit_symbol(mag_power * metre) == "(π^(1/2) m)"); +static_assert(unit_symbol(mag_power * metre) == "(pi^(1/2) m)"); -static_assert(unit_symbol(mag<π> * mag * one) == "[e π]"); -static_assert(unit_symbol(mag * mag<π> * one) == "[e π]"); -static_assert(unit_symbol(mag<π> * mag * one) == "[e pi]"); -static_assert(unit_symbol(mag<π> / mag * one) == "[π/e]"); -static_assert(unit_symbol(mag<1> / mag * mag<π> * one) == "[π/e]"); -static_assert(unit_symbol(mag<π> / mag * one) == "[π e⁻¹]"); -static_assert(unit_symbol(mag / mag<π> * one) == "[e/π]"); -static_assert(unit_symbol(mag<1> / mag<π> * mag * one) == "[e/π]"); -static_assert(unit_symbol(mag / mag<π> * one) == "[e π⁻¹]"); -static_assert(unit_symbol(mag<1> / (mag<π> * mag)*one) == "[e⁻¹ π⁻¹]"); -static_assert(unit_symbol(mag<1> / (mag<π> * mag)*one) == "[1/(e π)]"); -static_assert(unit_symbol(mag<2> / (mag<π> * mag)*one) == "[2 e⁻¹ π⁻¹]"); -static_assert(unit_symbol(mag<2> / (mag<π> * mag)*one) == "[2/(e π)]"); +static_assert(unit_symbol(mag<π> * mag * one) == "(e π)"); +static_assert(unit_symbol(mag * mag<π> * one) == "(e π)"); +static_assert(unit_symbol(mag<π> * mag * one) == "(e pi)"); +static_assert(unit_symbol(mag<π> / mag * one) == "(π/e)"); +static_assert(unit_symbol(mag<1> / mag * mag<π> * one) == "(π/e)"); +static_assert(unit_symbol(mag<π> / mag * one) == "(π e⁻¹)"); +static_assert(unit_symbol(mag / mag<π> * one) == "(e/π)"); +static_assert(unit_symbol(mag<1> / mag<π> * mag * one) == "(e/π)"); +static_assert(unit_symbol(mag / mag<π> * one) == "(e π⁻¹)"); +static_assert(unit_symbol(mag<1> / (mag<π> * mag)*one) == "(e⁻¹ π⁻¹)"); +static_assert(unit_symbol(mag<1> / (mag<π> * mag)*one) == "(1/(e π))"); +static_assert(unit_symbol(mag<2> / (mag<π> * mag)*one) == "(2 e⁻¹ π⁻¹)"); +static_assert(unit_symbol(mag<2> / (mag<π> * mag)*one) == "(2/(e π))"); // common units -static_assert(unit_symbol(get_common_unit(kilo, mile)) == "EQUIV{[1/25146 mi], [1/15625 km]}"); -static_assert(unit_symbol(get_common_unit(kilo / hour, metre / second)) == "EQUIV{[1/5 km/h], [1/18 m/s]}"); +static_assert(unit_symbol(get_common_unit(kilo, mile)) == "EQUIV{(1/25146 mi), (1/15625 km)}"); +static_assert(unit_symbol(get_common_unit(kilo / hour, metre / second)) == "EQUIV{(1/5 km/h), (1/18 m/s)}"); static_assert(unit_symbol(get_common_unit(kilo / hour, metre / second) / second) == - "EQUIV{[1/5 km/h], [1/18 m/s]}/s"); + "EQUIV{(1/5 km/h), (1/18 m/s)}/s"); static_assert(unit_symbol(get_common_unit(kilo / hour, metre / second) * second) == - "EQUIV{[1/5 km/h], [1/18 m/s]} s"); -static_assert(unit_symbol(get_common_unit(radian, degree)) == "EQUIV{[1/π°], [1/180 rad]}"); + "EQUIV{(1/5 km/h), (1/18 m/s)} s"); +static_assert(unit_symbol(get_common_unit(radian, degree)) == "EQUIV{(1/π°), (1/180 rad)}"); // derived units static_assert(unit_symbol(one) == ""); // NOLINT(readability-container-size-empty) @@ -269,9 +269,9 @@ static_assert(unit_symbol(pow<1, 2>(metre)) == "m^(1/2)"); static_assert(unit_symbol(pow<3, 5>(metre)) == "m^(3/5)"); static_assert(unit_symbol(pow<1, 2>(metre / second)) == "m^(1/2)/s^(1/2)"); static_assert(unit_symbol(pow<1, 2>(metre / second)) == "m^(1/2) s^-(1/2)"); -static_assert(unit_symbol(litre / (mag<100> * kilo)) == "L/[100 km]"); -static_assert(unit_symbol((mag<10> * metre) / (mag<20> * second)) == "[10 m]/[20 s]"); -static_assert(unit_symbol(pow<2>(mag<3600> * second)) == "[3600 s]²"); +static_assert(unit_symbol(litre / (mag<100> * kilo)) == "L/(100 km)"); +static_assert(unit_symbol((mag<10> * metre) / (mag<20> * second)) == "(10 m)/(20 s)"); +static_assert(unit_symbol(pow<2>(mag<3600> * second)) == "(3600 s)²"); // dimensionless unit static_assert(unit_symbol(radian) == "rad");