xo-unit: refactor: simplify flatstring_from_exponents args

This commit is contained in:
Roland Conybeare 2024-05-09 10:35:16 -04:00
commit 21e56e0b1a
2 changed files with 28 additions and 26 deletions

View file

@ -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_abbrev_type::fixed_capacity>())));
power.to_str<power_abbrev_type::fixed_capacity>())));
}
}
@ -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))));
}
///@}
}

View file

@ -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)*/