From 043410d2f8dbec33a9fb25bdecee6200e08421ca Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Tue, 20 Dec 2022 11:20:47 +0100 Subject: [PATCH] feat: ISQ quantity names conflicts resolved with inline namespaces --- src/systems/isq/include/units/isq/electromagnetism.h | 9 ++++----- src/systems/isq/include/units/isq/mechanics.h | 6 +++--- src/systems/isq/include/units/isq/space_and_time.h | 4 ++-- src/systems/isq/include/units/isq/thermodynamics.h | 6 +++--- test/unit_test/runtime/fmt_test.cpp | 2 +- test/unit_test/static/isq_test.cpp | 8 ++++---- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/systems/isq/include/units/isq/electromagnetism.h b/src/systems/isq/include/units/isq/electromagnetism.h index e6cf89f4..3a48678f 100644 --- a/src/systems/isq/include/units/isq/electromagnetism.h +++ b/src/systems/isq/include/units/isq/electromagnetism.h @@ -27,7 +27,7 @@ #include #include -namespace units::isq { +namespace units::isq::inline electromagnetism { QUANTITY_SPEC(electric_charge, electric_current* time); QUANTITY_SPEC(electric_charge_density, electric_charge / volume); @@ -106,9 +106,8 @@ QUANTITY_SPEC(coupling_factor, mutual_inductance / pow<1, 2>(pow<2>(self_inducta QUANTITY_SPEC(leakage_factor, pow<2>(coupling_factor)); QUANTITY_SPEC(conductivity, electric_current_density / electric_field_strength, quantity_character::scalar); QUANTITY_SPEC(resistivity, 1 / conductivity); -// QUANTITY_SPEC(power, voltage* electric_current); // TODO conflicts with mechanical power -// inline constexpr auto instantaneous_power = power; -QUANTITY_SPEC(instantaneous_power, voltage* electric_current); +QUANTITY_SPEC(power, voltage* electric_current); +inline constexpr auto instantaneous_power = power; QUANTITY_SPEC(resistance, voltage / electric_current); QUANTITY_SPEC(conductance, 1 / resistance); QUANTITY_SPEC(phase_difference, phase_angle); @@ -135,4 +134,4 @@ QUANTITY_SPEC(reactive_power, complex_power); QUANTITY_SPEC(non_active_power, pow<1, 2>(pow<2>(apparent_power))); QUANTITY_SPEC(active_energy, instantaneous_power* time); -} // namespace units::isq +} // namespace units::isq::inline electromagnetism diff --git a/src/systems/isq/include/units/isq/mechanics.h b/src/systems/isq/include/units/isq/mechanics.h index dad811d0..bf21958c 100644 --- a/src/systems/isq/include/units/isq/mechanics.h +++ b/src/systems/isq/include/units/isq/mechanics.h @@ -26,7 +26,7 @@ #include #include -namespace units::isq { +namespace units::isq::inline mechanics { QUANTITY_SPEC(mass_density, mass / volume); inline constexpr auto density = mass_density; @@ -99,11 +99,11 @@ QUANTITY_SPEC(kinetic_energy, mass* pow<2>(speed)); QUANTITY_SPEC(mechanical_energy, potential_energy); QUANTITY_SPEC(mechanical_work, force* displacement, quantity_character::scalar); inline constexpr auto work = mechanical_work; -QUANTITY_SPEC(efficiency_mechanics, power / power); +QUANTITY_SPEC(efficiency, power / power); QUANTITY_SPEC(mass_flow, mass_density* velocity); // vector QUANTITY_SPEC(mass_flow_rate, mass_flow* area, quantity_character::scalar); QUANTITY_SPEC(mass_change_rate, mass / time); QUANTITY_SPEC(volume_flow_rate, velocity* area, quantity_character::scalar); QUANTITY_SPEC(action, mechanical_energy* time); -} // namespace units::isq +} // namespace units::isq::inline mechanics diff --git a/src/systems/isq/include/units/isq/space_and_time.h b/src/systems/isq/include/units/isq/space_and_time.h index aafcdc64..5762e875 100644 --- a/src/systems/isq/include/units/isq/space_and_time.h +++ b/src/systems/isq/include/units/isq/space_and_time.h @@ -25,7 +25,7 @@ #include #include -namespace units::isq { +namespace units::isq::inline space_and_time { QUANTITY_SPEC(width, length); inline constexpr auto breadth = width; @@ -82,4 +82,4 @@ QUANTITY_SPEC(phase_coefficient, phase_angle / path_length); QUANTITY_SPEC(propagation_coefficient, 1 / length); // γ = α + iβ where α denotes attenuation // and β the phase coefficient of a plane wave -} // namespace units::isq +} // namespace units::isq::inline space_and_time diff --git a/src/systems/isq/include/units/isq/thermodynamics.h b/src/systems/isq/include/units/isq/thermodynamics.h index e7bee2ae..ed693225 100644 --- a/src/systems/isq/include/units/isq/thermodynamics.h +++ b/src/systems/isq/include/units/isq/thermodynamics.h @@ -27,7 +27,7 @@ #include #include -namespace units::isq { +namespace units::isq::inline thermodynamics { QUANTITY_SPEC(Celsius_temperature, thermodynamic_temperature); // TODO should we account for T0 here? QUANTITY_SPEC(linear_expansion_coefficient, 1 / length * (length / thermodynamic_temperature)); @@ -79,7 +79,7 @@ inline constexpr auto specific_Gibbs_function = specific_Gibbs_energy; QUANTITY_SPEC(Massieu_function, Helmholtz_energy / thermodynamic_temperature); // TODO how to handle "negative" part QUANTITY_SPEC(Planck_function, Gibbs_energy / thermodynamic_temperature); // TODO how to handle "negative" part QUANTITY_SPEC(Joule_Thomson_coefficient, thermodynamic_temperature / pressure); -QUANTITY_SPEC(efficiency_thermodynamics, work / heat); +QUANTITY_SPEC(efficiency, work / heat); QUANTITY_SPEC(maximum_efficiency, thermodynamic_temperature / thermodynamic_temperature); QUANTITY_SPEC(specific_gas_constant, entropy / mass); QUANTITY_SPEC(mass_concentration_of_water, mass / volume); @@ -95,4 +95,4 @@ QUANTITY_SPEC(relative_mass_ratio_of_vapour, mass_ratio_of_water_vapour_to_dry_gas / mass_ratio_of_water_vapour_to_dry_gas); QUANTITY_SPEC(dew_point_temperature, thermodynamic_temperature); -} // namespace units::isq +} // namespace units::isq::inline thermodynamics diff --git a/test/unit_test/runtime/fmt_test.cpp b/test/unit_test/runtime/fmt_test.cpp index 2b03b9f6..89186fb7 100644 --- a/test/unit_test/runtime/fmt_test.cpp +++ b/test/unit_test/runtime/fmt_test.cpp @@ -45,7 +45,7 @@ TEST_CASE("operator<< on a quantity", "[text][ostream][fmt]") { SECTION("integral representation") { - const auto q = 60 * isq::power[W]; + const auto q = 60 * isq::mechanics::power[W]; os << q; SECTION("iostream") { CHECK(os.str() == "60 W"); } diff --git a/test/unit_test/static/isq_test.cpp b/test/unit_test/static/isq_test.cpp index 3a58acbb..a326adad 100644 --- a/test/unit_test/static/isq_test.cpp +++ b/test/unit_test/static/isq_test.cpp @@ -148,13 +148,13 @@ static_assert(verify(isq::drag_factor, scalar, one)); static_assert(verify(isq::dynamic_viscosity, scalar, Pa* s, kg / m / s)); static_assert(verify(isq::kinematic_viscosity, scalar, m2 / s)); static_assert(verify(isq::surface_tension, scalar, N / m, kg / s2)); -static_assert(verify(isq::power, scalar, W, N* m / s, kg* m2 / s3)); +static_assert(verify(isq::mechanics::power, scalar, W, N* m / s, kg* m2 / s3)); static_assert(verify(isq::potential_energy, scalar, J, kg* m2 / s2)); static_assert(verify(isq::kinetic_energy, scalar, J, kg* m2 / s2)); static_assert(verify(isq::mechanical_energy, scalar, J, kg* m2 / s2)); static_assert(verify(isq::mechanical_work, scalar, J, kg* m2 / s2)); static_assert(verify(isq::work, scalar, J, kg* m2 / s2)); -static_assert(verify(isq::efficiency_mechanics, scalar, one)); +static_assert(verify(isq::mechanics::efficiency, scalar, one)); static_assert(verify(isq::mass_flow, vector, kg / m2 / s)); static_assert(verify(isq::mass_flow_rate, scalar, kg / s)); static_assert(verify(isq::mass_change_rate, scalar, kg / s)); @@ -211,7 +211,7 @@ static_assert(verify(isq::specific_Gibbs_function, scalar, J / kg, m2 / s2)); static_assert(verify(isq::Massieu_function, scalar, J / K, kg* m2 / s2 / K)); static_assert(verify(isq::Planck_function, scalar, J / K, kg* m2 / s2 / K)); static_assert(verify(isq::Joule_Thomson_coefficient, scalar, K / Pa, m* s2* K / kg)); -static_assert(verify(isq::efficiency_thermodynamics, scalar, one)); +static_assert(verify(isq::thermodynamics::efficiency, scalar, one)); static_assert(verify(isq::maximum_efficiency, scalar, one)); static_assert(verify(isq::specific_gas_constant, scalar, J / (kg * K), m2 / s2 / K)); static_assert(verify(isq::mass_concentration_of_water, scalar, kg / m3)); @@ -297,7 +297,7 @@ static_assert(verify(isq::coupling_factor, scalar, one)); static_assert(verify(isq::leakage_factor, scalar, one)); static_assert(verify(isq::conductivity, scalar, S / m)); static_assert(verify(isq::resistivity, scalar, si::ohm* m)); -// static_assert(verify(isq::power, scalar, W)); +static_assert(verify(isq::electromagnetism::power, scalar, W)); static_assert(verify(isq::instantaneous_power, scalar, W)); static_assert(verify(isq::resistance, scalar, si::ohm)); static_assert(verify(isq::conductance, scalar, S));