xo-unit: builds + runs on darwin

This commit is contained in:
Roland Conybeare 2024-04-29 23:33:17 -05:00
commit eeee5a2a36
3 changed files with 30 additions and 11 deletions

View file

@ -7,4 +7,4 @@ xo_docdir_sphinx_config(
quantity-reference.rst quantity-class.rst quantity-factoryfunctions.rst quantity-unitvars.rst
unit-reference.rst unit-concept.rst unit-quantities.rst
)
xo_utest_coverage_config2()
#xo_utest_coverage_config2()

View file

@ -1,4 +1,4 @@
/** @file quantity2.hpp
/** @file quantity.hpp
*
* Author: Roland Conybeare
**/
@ -14,15 +14,34 @@ namespace xo {
*
* Constexpr implementation, can compute units at compile time
**/
template <typename Repr = double, typename Int = std::int64_t>
class quantity2 {
template <typename Repr = double,
typename Int = std::int64_t,
natural_unit<Int> NaturalUnit>
class quantity {
public:
using repr_type = Repr;
using unit_type = natural_unit<int>;
public:
constexpr quantity(Repr scale)
: scale_{scale} {}
constexpr const repr_type & scale() const { return scale_; }
constexpr unit_type unit() const { return NaturalUnit; }
constexpr bool is_dimensionless() const { return s_unit.is_dimensionless(); }
constexpr quantity unit_qty() { return quantity(1); }
private:
/** @brief unit (established at compile time) for this quantity **/
static NaturalUnit s_unit = NaturalUnit;
/** @brief quantity represents this multiple of unit amount **/
Repr scale_ = Repr();
};
} /*namespace qty*/
} /*namespace xo*/
/** end quantity2.hpp **/
/** end quantity.hpp **/

View file

@ -20,14 +20,14 @@ namespace xo {
constexpr su64_type su_reciprocal = su.reciprocal();
TEST_CASE("scaled_unit", "[scaled_unit]") {
static_assert(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1L), 1)>.natural_unit_ == nu::gram.reciprocal());
REQUIRE(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1L), 1)>.natural_unit_ == nu::gram.reciprocal());
static_assert(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1LL), 1)>.natural_unit_ == nu::gram.reciprocal());
REQUIRE(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1LL), 1)>.natural_unit_ == nu::gram.reciprocal());
static_assert(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1L), 1)>.outer_scale_factor_ == 1);
REQUIRE(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1L), 1)>.outer_scale_factor_ == 1);
static_assert(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1LL), 1)>.outer_scale_factor_ == 1);
REQUIRE(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1LL), 1)>.outer_scale_factor_ == 1);
static_assert(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1L), 1)>.outer_scale_sq_ == 1.0);
REQUIRE(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1L), 1)>.outer_scale_sq_ == 1.0);
static_assert(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1LL), 1)>.outer_scale_sq_ == 1.0);
REQUIRE(su_reciprocal<scaled_unit(nu::gram, xo::ratio::ratio(1LL), 1)>.outer_scale_sq_ == 1.0);
} /*TEST_CASE(scaled_unit)*/
TEST_CASE("su_product", "[scaled_unit]") {