More SI tests added

This commit is contained in:
Mateusz Pusz
2019-12-11 13:55:58 +01:00
parent 5a7324596d
commit a10660d065

View File

@@ -78,6 +78,10 @@ namespace {
// time
static_assert(1us == 1000ns);
static_assert(1ms == 1000us);
static_assert(1s == 1000ms);
static_assert(1min == 60s);
static_assert(1h == 3600s);
static_assert(nanosecond::symbol == "ns");
@@ -92,11 +96,22 @@ namespace {
// luminous intensity
/* ************** DERIVED DIMENSIONS WITH NAMED UNITS **************** */
// frequency
static_assert(1000mHz == 1Hz);
static_assert(1000Hz == 1kHz);
static_assert(1000kHz == 1MHz);
static_assert(1000MHz == 1GHz);
static_assert(1000GHz == 1THz);
static_assert(millihertz::symbol == "mHz");
static_assert(kilohertz::symbol == "kHz");
static_assert(megahertz::symbol == "MHz");
static_assert(gigahertz::symbol == "GHz");
static_assert(terahertz::symbol == "THz");
static_assert(2 / 1s == 2Hz);
static_assert(120 / 1min == 2Hz);
static_assert(1000 / 1s == 1kHz);
@@ -105,14 +120,10 @@ namespace {
static_assert(10Hz * 1min == 600);
static_assert(2 / 1Hz == 2s);
static_assert(millihertz::symbol == "mHz");
static_assert(kilohertz::symbol == "kHz");
static_assert(megahertz::symbol == "MHz");
static_assert(gigahertz::symbol == "GHz");
static_assert(terahertz::symbol == "THz");
// force
static_assert(10kg * 10mps_sq == 100N);
static_assert(100N / 1mps_sq == 100kg);
static_assert(100.N / 1kg == 100mps_sq);
// pressure
@@ -120,31 +131,65 @@ namespace {
// energy
static_assert(1000mJ == 1_J);
static_assert(1000_J == 1kJ);
static_assert(1000kJ == 1MJ);
static_assert(1000MJ == 1GJ);
static_assert(millijoule::symbol == "mJ");
static_assert(kilojoule::symbol == "kJ");
static_assert(megajoule::symbol == "MJ");
static_assert(gigajoule::symbol == "GJ");
static_assert(10N * 10m == 100_J);
static_assert(100_J / 10m == 10N);
static_assert(100_J / 10N == 10m);
static_assert(10Pa * 10cub_m == 100_J);
static_assert(100_J / 10Pa == 10cub_m);
static_assert(100_J / 10cub_m == 10Pa);
// power
static_assert(1000mW == 1W);
static_assert(1000W == 1kW);
static_assert(1000kW == 1MW);
static_assert(1000MW == 1GW);
static_assert(milliwatt::symbol == "mW");
static_assert(kilowatt::symbol == "kW");
static_assert(megawatt::symbol == "MW");
static_assert(gigawatt::symbol == "GW");
static_assert(10_J / 10s == 1W);
static_assert(1W * 10s == 10_J);
static_assert(10_J / 1W == 10s);
// electric charge
static_assert(10A * 10s == 100C);
static_assert(100C / 10A == 10s);
static_assert(100C / 10s == 10A);
// voltage
static_assert(10W / 10A == 1V);
static_assert(10W / 1V == 10A);
static_assert(1V * 10A == 10W);
static_assert(10_J / 10C == 1V);
static_assert(10_J / 1V == 10C);
static_assert(10C * 1V == 10_J);
// capacitance
static_assert(10C / 10V == 1F);
static_assert(10C / 1F == 10V);
static_assert(10V * 1F == 10C);
/* ************** DERIVED DIMENSIONS IN TERMS OF BASE UNITS **************** */
// velocity
static_assert(std::is_same_v<decltype(1km / 1s), quantity<si::dim_velocity, scaled_unit<metre_per_second, ratio<1000>>, std::int64_t>>);
static_assert(std::is_same_v<decltype(1km / 1s), velocity<scaled_unit<metre_per_second, ratio<1000>>, std::int64_t>>);
static_assert(10m / 5s == 2mps);
static_assert(10 / 5s * 1m == 2mps);
@@ -162,15 +207,19 @@ namespace {
static_assert(2km / 2kmph == 1h);
// static_assert(2000m / 2kmph == 1h); // should not compile
static_assert(quantity_cast<quantity<si::dim_length, kilometre, int>>(2000m) / 2kmph == 1h);
// static_assert(metre_per_second::symbol == basic_fixed_string("m/s"));
// static_assert(kilometre_per_hour::symbol == basic_fixed_string("km/h"));
static_assert(quantity_cast<kilometre>(2000m) / 2kmph == 1h);
static_assert(detail::unit_text<dim_velocity, metre_per_second>() == "m/s");
static_assert(kilometre_per_hour::symbol == "km/h");
static_assert(mile_per_hour::symbol == "mi/h");
// acceleration
static_assert(10mps / 10s == 1mps_sq);
static_assert(10mps / 1mps_sq == 10s);
static_assert(1mps_sq * 10s == 10mps);
static_assert(detail::unit_text<dim_acceleration, metre_per_second_sq>() == "m/s²");
// area
@@ -178,6 +227,8 @@ namespace {
static_assert(10km * 10km == 100sq_km);
static_assert(1sq_m == 10'000sq_cm);
static_assert(detail::unit_text<dim_area, square_metre>() == "");
// volume
static_assert(1m * 1m * 1m == 1cub_m);
@@ -185,9 +236,14 @@ namespace {
static_assert(10km * 10km * 10km == 1000cub_km);
static_assert(1cub_m == 1'000'000cub_cm);
static_assert(detail::unit_text<dim_volume, cubic_metre>() == "");
/* ************** DERIVED DIMENSIONS IN TERMS OF OTHER UNITS **************** */
static_assert(10N / 2m == 5Npm);
static_assert(10N / 5Npm == 2m);
static_assert(2m * 5Npm == 10N);
static_assert(detail::unit_text<dim_surface_tension, newton_per_metre>() == "N/m");
} // namespace