test: std::complex-based quantities tests added

This commit is contained in:
Mateusz Pusz
2024-09-17 12:48:13 -06:00
parent 8a68221eb9
commit 7ce8d695b1

View File

@@ -37,9 +37,15 @@ import std;
#include <utility> #include <utility>
#if MP_UNITS_HOSTED #if MP_UNITS_HOSTED
#include <chrono> #include <chrono>
#include <complex>
#endif #endif
#endif #endif
#if MP_UNITS_HOSTED
template<typename T>
constexpr bool mp_units::is_scalar<std::complex<T>> = true;
#endif
template<> template<>
constexpr bool mp_units::is_vector<int> = true; constexpr bool mp_units::is_vector<int> = true;
@@ -267,6 +273,12 @@ static_assert(quantity<isq::length[m], int>(2000 * m).force_in(km).numerical_val
static_assert((15. * m).in(nm).numerical_value_in(m) == 15.); static_assert((15. * m).in(nm).numerical_value_in(m) == 15.);
static_assert((15'000. * nm).in(m).numerical_value_in(nm) == 15'000.); static_assert((15'000. * nm).in(m).numerical_value_in(nm) == 15'000.);
#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);
#endif
template<template<auto, typename> typename Q> template<template<auto, typename> typename Q>
concept invalid_unit_conversion = requires { concept invalid_unit_conversion = requires {
requires !requires { Q<isq::length[m], int>(2000 * m).in(km); }; // truncating conversion requires !requires { Q<isq::length[m], int>(2000 * m).in(km); }; // truncating conversion