mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-01 03:14:29 +02:00
refactor: representation concepts refactored + some quantities switched to complex
This commit is contained in:
@@ -37,9 +37,10 @@ import std;
|
||||
|
||||
#if MP_UNITS_HOSTED
|
||||
template<typename T>
|
||||
constexpr bool mp_units::is_scalar<std::complex<T>> = true;
|
||||
constexpr bool mp_units::is_complex<std::complex<T>> = true;
|
||||
#endif
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace mp_units;
|
||||
@@ -268,7 +269,9 @@ static_assert(Representation<double>);
|
||||
static_assert(!Representation<bool>);
|
||||
static_assert(!Representation<std::optional<int>>);
|
||||
#if MP_UNITS_HOSTED
|
||||
static_assert(Representation<std::complex<float>>);
|
||||
static_assert(Representation<std::complex<double>>);
|
||||
static_assert(Representation<std::complex<long double>>);
|
||||
static_assert(!Representation<std::string>);
|
||||
static_assert(!Representation<std::chrono::seconds>);
|
||||
#endif
|
||||
@@ -279,7 +282,7 @@ static_assert(RepresentationOf<double, quantity_character::scalar>);
|
||||
static_assert(!RepresentationOf<bool, quantity_character::scalar>);
|
||||
static_assert(!RepresentationOf<std::optional<int>, quantity_character::scalar>);
|
||||
#if MP_UNITS_HOSTED
|
||||
static_assert(RepresentationOf<std::complex<double>, quantity_character::scalar>);
|
||||
static_assert(RepresentationOf<std::complex<double>, quantity_character::complex>);
|
||||
static_assert(!RepresentationOf<std::chrono::seconds, quantity_character::scalar>);
|
||||
static_assert(!RepresentationOf<std::string, quantity_character::scalar>);
|
||||
#endif
|
||||
|
@@ -303,8 +303,8 @@ static_assert(verify(isq::instantaneous_power, scalar, W));
|
||||
static_assert(verify(isq::resistance, scalar, Ω));
|
||||
static_assert(verify(isq::conductance, scalar, S));
|
||||
static_assert(verify(isq::phase_difference, scalar, rad));
|
||||
static_assert(verify(isq::electric_current_phasor, scalar, A));
|
||||
static_assert(verify(isq::voltage_phasor, scalar, V));
|
||||
static_assert(verify(isq::electric_current_phasor, complex, A));
|
||||
static_assert(verify(isq::voltage_phasor, complex, V));
|
||||
static_assert(verify(isq::impedance, scalar, Ω));
|
||||
static_assert(verify(isq::complex_impedance, scalar, Ω));
|
||||
static_assert(verify(isq::resistance_to_alternating_current, scalar, Ω));
|
||||
@@ -321,7 +321,7 @@ static_assert(verify(isq::loss_angle, scalar, rad));
|
||||
static_assert(verify(isq::active_power, scalar, W));
|
||||
static_assert(verify(isq::apparent_power, scalar, V* A));
|
||||
static_assert(verify(isq::power_factor, scalar, one));
|
||||
static_assert(verify(isq::complex_power, scalar, V* A));
|
||||
static_assert(verify(isq::complex_power, complex, V* A));
|
||||
static_assert(verify(isq::reactive_power, scalar, V* A));
|
||||
static_assert(verify(isq::non_active_power, scalar, V* A));
|
||||
static_assert(verify(isq::active_energy, scalar, J, W* h));
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include <mp-units/bits/hacks.h>
|
||||
#include <mp-units/ext/fixed_string.h>
|
||||
#include <mp-units/ext/type_traits.h>
|
||||
#include <mp-units/systems/isq/electromagnetism.h>
|
||||
#include <mp-units/systems/isq/mechanics.h>
|
||||
#include <mp-units/systems/isq/space_and_time.h>
|
||||
#include <mp-units/systems/si.h>
|
||||
@@ -46,7 +47,7 @@ import std;
|
||||
|
||||
#if MP_UNITS_HOSTED
|
||||
template<typename T>
|
||||
constexpr bool mp_units::is_scalar<std::complex<T>> = true;
|
||||
constexpr bool mp_units::is_complex<std::complex<T>> = true;
|
||||
#endif
|
||||
|
||||
template<>
|
||||
@@ -282,8 +283,12 @@ static_assert((1. * rad + 1. * deg).in(deg) != 0 * deg);
|
||||
|
||||
#if MP_UNITS_HOSTED
|
||||
using namespace std::complex_literals;
|
||||
static_assert(((2. + 1i) * V).in(mV).numerical_value_in(mV) == 2000. + 1000i);
|
||||
static_assert(((2. + 1i) * V).in(mV).numerical_value_in(V) == 2. + 1i);
|
||||
static_assert(((2.f + 1if) * isq::voltage_phasor[V]).in(mV).numerical_value_in(mV) == 2000.f + 1000if);
|
||||
static_assert(((2.f + 1if) * isq::voltage_phasor[V]).in(mV).numerical_value_in(V) == 2.f + 1if);
|
||||
static_assert(((2. + 1i) * isq::voltage_phasor[V]).in(mV).numerical_value_in(mV) == 2000. + 1000i);
|
||||
static_assert(((2. + 1i) * isq::voltage_phasor[V]).in(mV).numerical_value_in(V) == 2. + 1i);
|
||||
static_assert(((2.L + 1il) * isq::voltage_phasor[V]).in(mV).numerical_value_in(mV) == 2000.L + 1000il);
|
||||
static_assert(((2.L + 1il) * isq::voltage_phasor[V]).in(mV).numerical_value_in(V) == 2.L + 1il);
|
||||
#endif
|
||||
|
||||
template<template<auto, typename> typename Q>
|
||||
|
Reference in New Issue
Block a user