diff --git a/utest/quantity.test.cpp b/utest/quantity.test.cpp index ea0e9712..4611ed8c 100644 --- a/utest/quantity.test.cpp +++ b/utest/quantity.test.cpp @@ -371,6 +371,57 @@ namespace xo { // /* milligrams:grams */ } /*TEST_CASE(quantity.mult)*/ + TEST_CASE("quantity.mult2", "[quantity.mult]") { + constexpr auto ms = qty::milliseconds(1.0); + + /* proof that ms.s_unit is constexpr */ + static_assert(ms.s_unit.n_bpu() == 1); + + /* proof that ms.unit() is constexpr */ + static_assert(ms.unit().n_bpu() == 1); + + constexpr auto rr = detail::su_product(ms.unit(), ms.unit()); + + /* proof that detail::su_product<..>(..) return value is constexpr */ + static_assert(rr.outer_scale_sq_ == 1.0); + static_assert(rr.outer_scale_factor_.template convert_to() == 1.0); + static_assert(rr.natural_unit_.n_bpu() == 1); + + constexpr auto q1 = quantity(ms.scale() * ms.scale()); + + /* proof that q is constexpr */ + static_assert(q1.scale() == 1.0); + static_assert(q1.unit().n_bpu() == 1); + + { + using r_int_type = std::common_type_t; + using r_int2x_type = std::common_type_t; + + constexpr auto rr = detail::su_product(ms.unit(), ms.unit()); + + static_assert(rr.outer_scale_sq_ == 1.0); + } + + constexpr auto q2 = quantity_util::multiply(ms, ms); + + /* proof that q2 is constexpr */ + static_assert(q2.scale() == 1.0); + static_assert(q2.unit().n_bpu() == 1); + static_assert(q2.unit()[0].power() == power_ratio_type(2,1)); + + constexpr auto q3 = ms * ms; + + /* proof that q3 is constexpr */ + static_assert(q3.scale() == 1.0); + static_assert(q3.unit().n_bpu() == 1); + static_assert(q3.unit()[0].power() == power_ratio_type(2,1)); + + } /*TEST_CASE(quantity.mult2)*/ } /*namespace qty*/ } /*namespace xo*/ diff --git a/utest/scaled_unit.test.cpp b/utest/scaled_unit.test.cpp index d9b1d3d6..18cae503 100644 --- a/utest/scaled_unit.test.cpp +++ b/utest/scaled_unit.test.cpp @@ -70,7 +70,7 @@ namespace xo { } } /*TEST_CASE(su_product)*/ - TEST_CASE("scaled_unit0", "[scaled_unit0]") { + TEST_CASE("scaled_unit0", "[scaled_unit]") { constexpr bool c_debug_flag = false; scope log(XO_DEBUG2(c_debug_flag, "TEST_CASE.scaled_unit0")); @@ -85,7 +85,7 @@ namespace xo { static_assert(ng2.natural_unit_.n_bpu() == 1); } /*TEST_CASE(scaled_unit0)*/ - TEST_CASE("scaled_unit1", "[scaled_unit1]") { + TEST_CASE("scaled_unit1", "[scaled_unit]") { constexpr bool c_debug_flag = false; scope log(XO_DEBUG2(c_debug_flag, "TEST_CASE.scaled_unit1")); @@ -100,6 +100,21 @@ namespace xo { static_assert(ng2.natural_unit_.n_bpu() == 0); } /*TEST_CASE(scaled_unit1)*/ + TEST_CASE("scaled_unit2", "[scaled_unit]") { + constexpr bool c_debug_flag = false; + + scope log(XO_DEBUG2(c_debug_flag, "TEST_CASE.scaled_unit2")); + + constexpr auto ms = su::millisecond; + constexpr auto ms2 = ms * ms; + + log && log(xtag("ms", ms)); + log && log(xtag("ms*ms", ms2)); + + static_assert(ms.natural_unit_.n_bpu() == 1); + static_assert(ms2.natural_unit_.n_bpu() == 1); + } /*TEST_CASE(scaled_unit2)*/ + } /*namespace qty*/ } /*namespace xo*/