refactor(unit test): support for new features added to unit and dimension unit tests

This commit is contained in:
Mateusz Pusz
2023-02-13 19:07:16 +01:00
parent 6d033d72fe
commit e353bb3436
2 changed files with 33 additions and 31 deletions

View File

@@ -23,6 +23,7 @@
#include "test_tools.h"
#include <mp_units/dimension.h>
#include <mp_units/quantity.h>
#include <mp_units/quantity_spec.h>
#include <mp_units/reference.h>
#include <mp_units/unit.h>
@@ -38,7 +39,7 @@ inline constexpr struct mass_ : base_dimension<"M"> {} mass;
inline constexpr struct time_ : base_dimension<"T"> {} time;
QUANTITY_SPEC_(q_time, time);
inline constexpr struct second_ : named_unit<"s", q_time> {} second;
inline constexpr struct second_ : named_unit<"s", kind_of<q_time>> {} second;
inline constexpr auto frequency = 1 / time;
inline constexpr auto action = 1 / time;

View File

@@ -47,11 +47,11 @@ QUANTITY_SPEC_(time, dim_time);
QUANTITY_SPEC_(thermodynamic_temperature, dim_thermodynamic_temperature);
// base units
inline constexpr struct second_ : named_unit<"s", time> {} second;
inline constexpr struct metre_ : named_unit<"m", length> {} metre;
inline constexpr struct gram_ : named_unit<"g", mass> {} gram;
inline constexpr struct second_ : named_unit<"s", kind_of<time>> {} second;
inline constexpr struct metre_ : named_unit<"m", kind_of<length>> {} metre;
inline constexpr struct gram_ : named_unit<"g", kind_of<mass>> {} gram;
inline constexpr struct kilogram_ : decltype(si::kilo<gram>) {} kilogram;
inline constexpr struct kelvin_ : named_unit<"K", thermodynamic_temperature> {} kelvin;
inline constexpr struct kelvin_ : named_unit<"K", kind_of<thermodynamic_temperature>> {} kelvin;
// hypothetical natural units for c=1
inline constexpr struct nu_second_ : named_unit<"s"> {} nu_second;
@@ -128,15 +128,15 @@ static_assert(!NamedUnit<kilometre_>);
static_assert(is_of_type<metre, metre_>);
static_assert(is_of_type<get_canonical_unit(metre).reference_unit, metre_>);
static_assert(get_canonical_unit(metre).mag == mag<1>);
static_assert(interconvertible(metre, metre));
static_assert(!interconvertible(metre, second));
static_assert(convertible_to(metre, metre));
static_assert(!convertible_to(metre, second));
static_assert(metre == metre);
static_assert(metre != second);
static_assert(is_of_type<degree_Celsius, degree_Celsius_>);
static_assert(is_of_type<get_canonical_unit(degree_Celsius).reference_unit, kelvin_>);
static_assert(get_canonical_unit(degree_Celsius).mag == mag<1>);
static_assert(interconvertible(degree_Celsius, kelvin));
static_assert(convertible_to(degree_Celsius, kelvin));
static_assert(degree_Celsius == kelvin);
static_assert(is_of_type<radian, radian_>);
@@ -146,28 +146,28 @@ static_assert(get_canonical_unit(radian).mag == mag<1>);
static_assert(is_of_type<degree, degree_>);
static_assert(is_of_type<get_canonical_unit(degree).reference_unit, one_>);
static_assert(get_canonical_unit(degree).mag == mag_pi / mag<180>);
static_assert(interconvertible(radian, degree));
static_assert(convertible_to(radian, degree));
static_assert(radian != degree);
static_assert(is_of_type<steradian, steradian_>);
static_assert(is_of_type<get_canonical_unit(steradian).reference_unit, one_>);
static_assert(get_canonical_unit(steradian).mag == mag<1>);
static_assert(interconvertible(radian, steradian)); // !!!
static_assert(convertible_to(radian, steradian)); // !!!
static_assert(radian == steradian); // !!!
static_assert(is_of_type<minute, minute_>);
static_assert(is_of_type<get_canonical_unit(minute).reference_unit, second_>);
static_assert(get_canonical_unit(minute).mag == mag<60>);
static_assert(interconvertible(minute, second));
static_assert(convertible_to(minute, second));
static_assert(minute != second);
static_assert(is_of_type<hour, hour_>);
static_assert(is_of_type<get_canonical_unit(hour).reference_unit, second_>);
static_assert(get_canonical_unit(hour).mag == mag<3600>);
static_assert(interconvertible(hour, second));
static_assert(convertible_to(hour, second));
static_assert(interconvertible(hour, minute));
static_assert(interconvertible(hour, hour));
static_assert(convertible_to(hour, minute));
static_assert(convertible_to(hour, hour));
static_assert(hour != second);
static_assert(hour != minute);
static_assert(hour == hour);
@@ -176,14 +176,14 @@ static_assert(is_of_type<newton, newton_>);
static_assert(
is_of_type<get_canonical_unit(newton).reference_unit, derived_unit<gram_, metre_, per<power<second_, 2>>>>);
static_assert(get_canonical_unit(newton).mag == mag<1000>); // !!! (because of kilogram)
static_assert(interconvertible(newton, newton));
static_assert(convertible_to(newton, newton));
static_assert(newton == newton);
static_assert(is_of_type<joule, joule_>);
static_assert(
is_of_type<get_canonical_unit(joule).reference_unit, derived_unit<gram_, power<metre_, 2>, per<power<second_, 2>>>>);
static_assert(get_canonical_unit(joule).mag == mag<1000>); // !!! (because of kilogram)
static_assert(interconvertible(joule, joule));
static_assert(convertible_to(joule, joule));
static_assert(joule == joule);
static_assert(joule != newton);
@@ -194,8 +194,8 @@ static_assert(is_of_type<standard_gravity_unit, standard_gravity_unit_>);
static_assert(
is_of_type<get_canonical_unit(standard_gravity_unit).reference_unit, derived_unit<metre_, per<power<second_, 2>>>>);
static_assert(get_canonical_unit(standard_gravity_unit).mag == mag<ratio{980'665, 100'000}>);
static_assert(interconvertible(standard_gravity_unit, standard_gravity_unit));
static_assert(interconvertible(standard_gravity_unit, metre / square<second>));
static_assert(convertible_to(standard_gravity_unit, standard_gravity_unit));
static_assert(convertible_to(standard_gravity_unit, metre / square<second>));
static_assert(standard_gravity_unit == standard_gravity_unit);
static_assert(standard_gravity_unit != metre / square<second>); // magnitude is different
static_assert(standard_gravity_unit.symbol == "[g]");
@@ -204,7 +204,7 @@ static_assert(standard_gravity_unit.symbol == "[g]");
static_assert(is_of_type<kilometre, kilometre_>);
static_assert(is_of_type<get_canonical_unit(kilometre).reference_unit, metre_>);
static_assert(get_canonical_unit(kilometre).mag == mag<1000>);
static_assert(interconvertible(kilometre, metre));
static_assert(convertible_to(kilometre, metre));
static_assert(kilometre != metre);
static_assert(kilometre.symbol == "km");
@@ -212,7 +212,7 @@ static_assert(is_of_type<kilojoule, kilojoule_>);
static_assert(is_of_type<get_canonical_unit(kilojoule).reference_unit,
derived_unit<gram_, power<metre_, 2>, per<power<second_, 2>>>>);
static_assert(get_canonical_unit(kilojoule).mag == mag<1'000'000>);
static_assert(interconvertible(kilojoule, joule));
static_assert(convertible_to(kilojoule, joule));
static_assert(kilojoule != joule);
static_assert(kilojoule.symbol == "kJ");
@@ -438,33 +438,34 @@ static_assert(si::kilo<metre> * si::milli<metre> == si::deca<metre> * si::deci<m
// comparisons of equivalent units (named vs unnamed/derived)
static_assert(1 / second == hertz);
static_assert(interconvertible(1 / second, hertz));
static_assert(convertible_to(1 / second, hertz));
// comparisons of equivalent units of different quantities
static_assert(hertz == becquerel);
static_assert(interconvertible(hertz, becquerel));
static_assert(convertible_to(hertz, becquerel));
// comparisons of scaled units
static_assert(si::kilo<metre> == kilometre);
static_assert(mag<1000> * metre == si::kilo<metre>);
static_assert(mag<1000> * metre == kilometre);
static_assert(interconvertible(si::kilo<metre>, kilometre));
static_assert(interconvertible(mag<1000> * metre, si::kilo<metre>));
static_assert(interconvertible(mag<1000> * metre, kilometre));
static_assert(convertible_to(si::kilo<metre>, kilometre));
static_assert(convertible_to(mag<1000> * metre, si::kilo<metre>));
static_assert(convertible_to(mag<1000> * metre, kilometre));
static_assert(metre != kilometre);
static_assert(interconvertible(metre, kilometre));
static_assert(convertible_to(metre, kilometre));
static_assert(mag<100> * metre != kilometre);
static_assert(interconvertible(mag<100> * metre, kilometre));
static_assert(convertible_to(mag<100> * metre, kilometre));
static_assert(si::milli<metre> != kilometre);
static_assert(interconvertible(si::milli<metre>, kilometre));
static_assert(convertible_to(si::milli<metre>, kilometre));
// comparisons of non-convertible units
static_assert(metre != metre * metre);
static_assert(!interconvertible(metre, metre* metre));
static_assert(!convertible_to(metre, metre* metre));
// one
static_assert(is_of_type<metre / metre, one_>);
static_assert(is_of_type<si::kilo<metre> / metre, derived_unit<si::kilo_<metre>, per<metre_>>>);
static_assert(metre / metre == one);
static_assert(hertz * second == one);