diff --git a/include/xo/unit/bpu.hpp b/include/xo/unit/bpu.hpp index a7cb292d..dbd2483b 100644 --- a/include/xo/unit/bpu.hpp +++ b/include/xo/unit/bpu.hpp @@ -11,6 +11,7 @@ namespace xo { namespace qty { namespace abbrev { + /** fixed-size string representation for exponent of a basis-power-unit **/ using power_abbrev_type = flatstring<16>; /** @defgroup bpu-abbrev-helpers bpu abbrev helpers **/ @@ -20,22 +21,23 @@ namespace xo { * Auxiliary function for @ref bpu_abbrev **/ constexpr power_abbrev_type - flatstring_from_exponent(std::int64_t num, - std::int64_t den) + flatstring_from_exponent(const power_ratio_type & power) { - if (den == 1) { - if (num == 1) { + if (power.den() == 1) { + if (power.num() == 1) { + /* for no exponent annotation for power ^1 */ return power_abbrev_type::from_chars(""); } else { + /* e.g. "^-1", "^2" */ return (power_abbrev_type::from_flatstring (flatstring_concat(flatstring("^"), - power_abbrev_type::from_int(num)))); + power_abbrev_type::from_int(power.num())))); } } else { + /* e.g. "^1/2", "^-1/2" */ return (power_abbrev_type::from_flatstring (flatstring_concat(flatstring("^"), - xo::ratio::make_ratio(num, den) - .to_str()))); + power.to_str()))); } } @@ -48,7 +50,7 @@ namespace xo { return (bpu_abbrev_type::from_flatstring (flatstring_concat (bu_abbrev(basis_unit(native_dim, scalefactor)), - flatstring_from_exponent(power.num(), power.den())))); + flatstring_from_exponent(power)))); } ///@} } diff --git a/utest/bpu.test.cpp b/utest/bpu.test.cpp index a3691c8e..666c67ca 100644 --- a/utest/bpu.test.cpp +++ b/utest/bpu.test.cpp @@ -30,31 +30,31 @@ namespace xo { scope log(XO_DEBUG2(c_debug_flag, "TEST_CASE.flatstring_from_exponent")); - log && log(xtag("^-3", flatstring_from_exponent(-3,1))); - log && log(xtag("^-2", flatstring_from_exponent(-2,1))); - log && log(xtag("^-1", flatstring_from_exponent(-1,1))); - log && log(xtag("^-1/2", flatstring_from_exponent(-1,2))); - log && log(xtag("^0", flatstring_from_exponent(0,1))); - log && log(xtag("^1/2", flatstring_from_exponent(1,2))); - log && log(xtag("^1", flatstring_from_exponent(1,1))); - log && log(xtag("^2", flatstring_from_exponent(2,1))); - log && log(xtag("^3", flatstring_from_exponent(3,1))); + log && log(xtag("^-3", flatstring_from_exponent(power_ratio_type(-3,1)))); + log && log(xtag("^-2", flatstring_from_exponent(power_ratio_type(-2,1)))); + log && log(xtag("^-1", flatstring_from_exponent(power_ratio_type(-1,1)))); + log && log(xtag("^-1/2", flatstring_from_exponent(power_ratio_type(-1,2)))); + log && log(xtag("^0", flatstring_from_exponent(power_ratio_type(0,1)))); + log && log(xtag("^1/2", flatstring_from_exponent(power_ratio_type(1,2)))); + log && log(xtag("^1", flatstring_from_exponent(power_ratio_type(1,1)))); + log && log(xtag("^2", flatstring_from_exponent(power_ratio_type(2,1)))); + log && log(xtag("^3", flatstring_from_exponent(power_ratio_type(3,1)))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(-3,1)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(-3,1))) == flatstring<5>::from_flatstring(flatstring("^-3"))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(-2,1)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(-2,1))) == flatstring<5>::from_flatstring(flatstring("^-2"))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(-1,1)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(-1,1))) == flatstring<5>::from_flatstring(flatstring("^-1"))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(-1,2)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(-1,2))) == flatstring<5>::from_flatstring(flatstring("^(-1/2)"))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(1,2)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(1,2))) == flatstring<5>::from_flatstring(flatstring("^(1/2)"))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(1,1)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(1,1))) == flatstring<5>::from_flatstring(flatstring(""))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(2,1)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(2,1))) == flatstring<5>::from_flatstring(flatstring("^2"))); - static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(3,1)) + static_assert(flatstring<5>::from_flatstring(flatstring_from_exponent(power_ratio_type(3,1))) == flatstring<5>::from_flatstring(flatstring("^3"))); } /*TEST_CASE(flatstring_from_exponent)*/