test: CGS tests added

This commit is contained in:
Mateusz Pusz
2023-05-27 17:26:06 +02:00
parent b59af895dd
commit d13165d9ae
2 changed files with 24 additions and 75 deletions

View File

@@ -35,7 +35,7 @@ target_compile_options(
add_library(
unit_tests_static
angle_test.cpp
# cgs_test.cpp
cgs_test.cpp
chrono_test.cpp
# concepts_test.cpp
# custom_rep_test_min_expl.cpp

View File

@@ -20,84 +20,33 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#include <mp_units/bits/unit_text.h>
#include <mp_units/concepts.h>
#include <mp_units/isq/si/cgs/cgs.h>
#include <mp_units/unit.h>
#include <mp-units/systems/cgs/cgs.h>
#include <mp-units/systems/isq/mechanics.h>
#include <mp-units/systems/isq/space_and_time.h>
#include <mp-units/systems/si/unit_symbols.h>
template<class T>
requires mp_units::is_scalar<T>
inline constexpr bool mp_units::is_vector<T> = true;
namespace {
using namespace mp_units;
using namespace mp_units::isq::si::cgs;
using namespace mp_units::cgs;
using namespace mp_units::cgs::unit_symbols;
/* ************** BASE DIMENSIONS **************** */
// length
static_assert(centimetre::symbol == "cm");
// mass
// time
/* ************** DERIVED DIMENSIONS IN TERMS OF BASE UNITS **************** */
// speed
static_assert((10_q_cm / 5_q_s).number() == 2);
static_assert((2_q_cm_per_s).number() == 2);
static_assert(10_q_cm / 5_q_s == 2_q_cm_per_s);
static_assert(10_q_cm / 2_q_cm_per_s == 5_q_s);
static_assert(10_q_cm == 2_q_cm_per_s * 5_q_s);
static_assert(detail::unit_text<dim_speed, centimetre_per_second>() == "cm/s");
// area
static_assert(as_ratio(centimetre::mag / dimension_unit<dim_length>::mag) == ratio(1));
static_assert((1_q_cm * 1_q_cm).number() == 1);
static_assert((1_q_cm2).number() == 1);
static_assert(1_q_cm * 1_q_cm == 1_q_cm2);
static_assert(100_q_cm * 100_q_cm == area<isq::si::square_metre>(1));
static_assert(100_q_cm * 100_q_cm == length<isq::si::metre>(1) * length<isq::si::metre>(1));
static_assert(100_q_cm2 / 10_q_cm == 10_q_cm);
static_assert(detail::unit_text<dim_area, square_centimetre>() == basic_symbol_text("cm²", "cm^2"));
/* ************** DERIVED DIMENSIONS WITH NAMED UNITS **************** */
// acceleration
static_assert(10_q_cm_per_s / 10_q_s == 1_q_Gal);
static_assert(10_q_cm_per_s / 1_q_Gal == 10_q_s);
static_assert(1_q_Gal * 10_q_s == 10_q_cm_per_s);
// force
static_assert(10_q_g * 10_q_Gal == 100_q_dyn);
static_assert(100_q_dyn / 10_q_g == 10_q_Gal);
static_assert(100_q_dyn / 10_q_Gal == 10_q_g);
// pressure
static_assert(10_q_dyn / 10_q_cm2 == 1_q_Ba);
static_assert(10_q_dyn / 1_q_Ba == 10_q_cm2);
static_assert(1_q_Ba * 10_q_cm2 == 10_q_dyn);
// energy
static_assert(10_q_dyn * 10_q_cm == 100_q_erg);
static_assert(100_q_erg / 10_q_cm == 10_q_dyn);
static_assert(100_q_erg / 10_q_dyn == 10_q_cm);
/* ************** DERIVED DIMENSIONS IN TERMS OF OTHER UNITS **************** */
// power
static_assert(10_q_erg / 10_q_s == 1_q_erg_per_s);
static_assert(1_q_erg_per_s * 10_q_s == 10_q_erg);
static_assert(10_q_erg / 1_q_erg_per_s == 10_q_s);
static_assert(detail::unit_text<dim_power, erg_per_second>() == "erg/s");
// https://en.wikipedia.org/wiki/Centimetre%E2%80%93gram%E2%80%93second_system_of_units#Definitions_and_conversion_factors_of_CGS_units_in_mechanics
static_assert(isq::length(100 * cm) == isq::length(1 * si::metre));
static_assert(isq::mass(1000 * g) == isq::mass(1 * si::kilogram));
static_assert(isq::time(1 * s) == isq::time(1 * si::second));
static_assert(isq::speed(100 * (cm / s)) == isq::speed(1 * (si::metre / si::second)));
static_assert(isq::acceleration(100 * Gal) == isq::acceleration(1 * (si::metre / square<si::second>)));
static_assert(isq::force(100'000 * dyn) == isq::force(1 * si::newton));
static_assert(isq::energy(10'000'000 * erg) == isq::energy(1 * si::joule));
static_assert(isq::power(10'000'000 * (erg / s)) == isq::power(1 * si::watt));
static_assert(isq::pressure(10 * Ba) == isq::pressure(1 * si::pascal));
static_assert(isq::dynamic_viscosity(10 * P) == isq::dynamic_viscosity(1 * (si::pascal * si::second)));
static_assert(isq::kinematic_viscosity(10'000 * St) == isq::kinematic_viscosity(1 * (square<si::metre> / si::second)));
static_assert(isq::wavenumber(1 * K) == isq::wavenumber(100 * (1 / si::metre)));
} // namespace