diff --git a/docs/users_guide/framework_basics/character_of_a_quantity.md b/docs/users_guide/framework_basics/character_of_a_quantity.md index a47eb760..90402906 100644 --- a/docs/users_guide/framework_basics/character_of_a_quantity.md +++ b/docs/users_guide/framework_basics/character_of_a_quantity.md @@ -126,19 +126,19 @@ character override is needed): === "C++23" ```cpp - inline constexpr struct velocity final : quantity_spec {} velocity; + inline constexpr struct velocity final : quantity_spec {} velocity; ``` === "C++20" ```cpp - inline constexpr struct velocity final : quantity_spec {} velocity; + inline constexpr struct velocity final : quantity_spec {} velocity; ``` === "Portable" ```cpp - QUANTITY_SPEC(velocity, speed, position_vector / duration); + QUANTITY_SPEC(velocity, speed, displacement / duration); ``` diff --git a/example/kalman_filter/kalman_filter-example_2.cpp b/example/kalman_filter/kalman_filter-example_2.cpp index b03f8724..5a07edeb 100644 --- a/example/kalman_filter/kalman_filter-example_2.cpp +++ b/example/kalman_filter/kalman_filter-example_2.cpp @@ -61,7 +61,7 @@ void print(auto iteration, QuantityPoint auto measured, const kalman::SystemStat int main() { using namespace mp_units::si::unit_symbols; - using qp = quantity_point; + using qp = quantity_point; using state = kalman::system_state>; const quantity interval = isq::duration(5 * s); diff --git a/example/kalman_filter/kalman_filter-example_3.cpp b/example/kalman_filter/kalman_filter-example_3.cpp index 9c2ca7d4..65aa2b1f 100644 --- a/example/kalman_filter/kalman_filter-example_3.cpp +++ b/example/kalman_filter/kalman_filter-example_3.cpp @@ -61,7 +61,7 @@ void print(auto iteration, QuantityPoint auto measured, const kalman::SystemStat int main() { using namespace mp_units::si::unit_symbols; - using qp = quantity_point; + using qp = quantity_point; using state = kalman::system_state>; const quantity interval = isq::duration(5 * s); diff --git a/example/kalman_filter/kalman_filter-example_4.cpp b/example/kalman_filter/kalman_filter-example_4.cpp index 20813ad8..64e240e1 100644 --- a/example/kalman_filter/kalman_filter-example_4.cpp +++ b/example/kalman_filter/kalman_filter-example_4.cpp @@ -62,7 +62,7 @@ void print(auto iteration, QuantityPoint auto measured, const kalman::SystemStat int main() { using namespace mp_units::si::unit_symbols; - using qp = quantity_point; + using qp = quantity_point; using state = kalman::system_state, quantity_point>; diff --git a/src/core/include/mp-units/framework/quantity_spec.h b/src/core/include/mp-units/framework/quantity_spec.h index bfe9d0b2..dd6c4785 100644 --- a/src/core/include/mp-units/framework/quantity_spec.h +++ b/src/core/include/mp-units/framework/quantity_spec.h @@ -280,7 +280,7 @@ struct quantity_spec : detail::quantity_spec_interface * @code{.cpp} * inline constexpr struct area final : quantity_spec(length)> {} area; * inline constexpr struct volume final : quantity_spec(length)> {} volume; - * inline constexpr struct velocity final : quantity_spec {} velocity; + * inline constexpr struct velocity final : quantity_spec {} velocity; * inline constexpr struct speed final : quantity_spec {} speed; * inline constexpr struct force final : quantity_spec {} force; * inline constexpr struct power final : quantity_spec {} power; @@ -336,7 +336,7 @@ struct propagate_equation { * inline constexpr struct width final : quantity_spec {} width; * inline constexpr struct height final : quantity_spec {} height; * inline constexpr struct diameter final : quantity_spec {} diameter; - * inline constexpr struct position_vector final : quantity_spec {} position_vector; + * inline constexpr struct displacement final : quantity_spec {} displacement; * @endcode * * @note A common convention in this library is to assign the same name for a type and an object of this type. @@ -394,7 +394,7 @@ struct quantity_spec : detail::propagate_equation, detail * * @code{.cpp} * inline constexpr struct angular_measure final : quantity_spec {} angular_measure; - * inline constexpr struct velocity final : quantity_spec {} velocity; + * inline constexpr struct velocity final : quantity_spec {} velocity; * inline constexpr struct weight final : quantity_spec {} weight; * inline constexpr struct kinetic_energy final : quantity_spec(speed)> {} kinetic_energy; * @endcode @@ -470,7 +470,7 @@ struct derived_quantity_spec_impl : * auto frequency = inverse(period_duration); * auto area = pow<2>(length); * auto speed = distance / duration; - * auto velocity = position_vector / duration; + * auto velocity = displacement / duration; * auto acceleration = velocity / duration; * @endcode * @@ -480,7 +480,7 @@ struct derived_quantity_spec_impl : * - the dimension type of `area` is `derived_dimension>` * - the type of `speed` is `derived_quantity_spec>` * - the dimension type of `speed` is `derived_dimension>` - * - the type of `velocity` is `derived_quantity_spec>` + * - the type of `velocity` is `derived_quantity_spec>` * - the dimension type of `velocity` is `derived_dimension>` * - the type of `acceleration` is `derived_quantity_spec>` * - the dimension type of `acceleration` is `derived_dimension>>` diff --git a/src/systems/include/mp-units/systems/isq/space_and_time.h b/src/systems/include/mp-units/systems/isq/space_and_time.h index 3061eaa3..f0b71e90 100644 --- a/src/systems/include/mp-units/systems/isq/space_and_time.h +++ b/src/systems/include/mp-units/systems/isq/space_and_time.h @@ -50,10 +50,10 @@ QUANTITY_SPEC(volume, pow<3>(length)); QUANTITY_SPEC(rotational_displacement, angular_measure, path_length / radius); inline constexpr auto angular_displacement = rotational_displacement; QUANTITY_SPEC(phase_angle, angular_measure); -QUANTITY_SPEC(speed, length / time); // differs from ISO 80000 -QUANTITY_SPEC(velocity, speed, position_vector / duration); // vector // differs from ISO 80000 -QUANTITY_SPEC(acceleration, velocity / duration); // vector -QUANTITY_SPEC(acceleration_of_free_fall, acceleration); // not in ISO 80000 +QUANTITY_SPEC(speed, length / time); // differs from ISO 80000 +QUANTITY_SPEC(velocity, speed, displacement / duration); // vector // differs from ISO 80000 +QUANTITY_SPEC(acceleration, velocity / duration); // vector +QUANTITY_SPEC(acceleration_of_free_fall, acceleration); // not in ISO 80000 QUANTITY_SPEC(angular_velocity, angular_displacement / duration, quantity_character::vector); QUANTITY_SPEC(angular_acceleration, angular_velocity / duration); QUANTITY_SPEC(time_constant, duration); diff --git a/test/runtime/linear_algebra_test.cpp b/test/runtime/linear_algebra_test.cpp index 4799decd..85a7afc7 100644 --- a/test/runtime/linear_algebra_test.cpp +++ b/test/runtime/linear_algebra_test.cpp @@ -103,13 +103,13 @@ TEST_CASE("vector quantity", "[la]") { SECTION("non-truncating") { - const auto v = vector{3, 2, 1} * isq::position_vector[km]; + const auto v = vector{3, 2, 1} * isq::displacement[km]; CHECK(v.numerical_value_in(m) == vector{3000, 2000, 1000}); } SECTION("truncating") { - const auto v = vector{1001, 1002, 1003} * isq::position_vector[m]; + const auto v = vector{1001, 1002, 1003} * isq::displacement[m]; CHECK(v.force_numerical_value_in(km) == vector{1, 1, 1}); } } @@ -123,7 +123,7 @@ TEST_CASE("vector quantity", "[la]") SECTION("multiply by scalar value") { - const auto v = vector{1, 2, 3} * isq::position_vector[m]; + const auto v = vector{1, 2, 3} * isq::displacement[m]; SECTION("integral") { @@ -140,7 +140,7 @@ TEST_CASE("vector quantity", "[la]") SECTION("divide by scalar value") { - const auto v = vector{2, 4, 6} * isq::position_vector[m]; + const auto v = vector{2, 4, 6} * isq::displacement[m]; SECTION("integral") { CHECK((v / 2).numerical_value_in(m) == vector{1, 2, 3}); } SECTION("floating-point") { CHECK((v / 0.5).numerical_value_in(m) == vector{4., 8., 12.}); } @@ -148,32 +148,32 @@ TEST_CASE("vector quantity", "[la]") SECTION("add") { - const auto v = vector{1, 2, 3} * isq::position_vector[m]; + const auto v = vector{1, 2, 3} * isq::displacement[m]; SECTION("same unit") { - const auto u = vector{3, 2, 1} * isq::position_vector[m]; + const auto u = vector{3, 2, 1} * isq::displacement[m]; CHECK((v + u).numerical_value_in(m) == vector{4, 4, 4}); } SECTION("different units") { - const auto u = vector{3, 2, 1} * isq::position_vector[km]; + const auto u = vector{3, 2, 1} * isq::displacement[km]; CHECK((v + u).numerical_value_in(m) == vector{3001, 2002, 1003}); } } SECTION("subtract") { - const auto v = vector{1, 2, 3} * isq::position_vector[m]; + const auto v = vector{1, 2, 3} * isq::displacement[m]; SECTION("same unit") { - const auto u = vector{3, 2, 1} * isq::position_vector[m]; + const auto u = vector{3, 2, 1} * isq::displacement[m]; CHECK((v - u).numerical_value_in(m) == vector{-2, 0, 2}); } SECTION("different units") { - const auto u = vector{3, 2, 1} * isq::position_vector[km]; + const auto u = vector{3, 2, 1} * isq::displacement[km]; CHECK((v - u).numerical_value_in(m) == vector{-2999, -1998, -997}); } } @@ -255,7 +255,7 @@ TEST_CASE("vector quantity", "[la]") SECTION("divide by scalar quantity") { - const auto pos = vector{30, 20, 10} * isq::position_vector[km]; + const auto pos = vector{30, 20, 10} * isq::displacement[km]; SECTION("integral") { @@ -292,7 +292,7 @@ TEST_CASE("vector quantity", "[la]") SECTION("cross product with a vector quantity") { - const auto r = vector{3, 0, 0} * isq::position_vector[m]; + const auto r = vector{3, 0, 0} * isq::displacement[m]; const auto f = vector{0, 10, 0} * isq::force[N]; CHECK(cross_product(r, f) == vector{0, 0, 30} * isq::moment_of_force[N * m]); @@ -309,10 +309,10 @@ TEST_CASE("vector of quantities", "[la]") { SECTION("non-truncating") { - const vector> v = {3 * km, 2 * km, 1 * km}; + const vector> v = {3 * km, 2 * km, 1 * km}; - CHECK(vector>(v) == - vector>{3000 * m, 2000 * m, 1000 * m}); + CHECK(vector>(v) == + vector>{3000 * m, 2000 * m, 1000 * m}); } // truncating not possible (no way to apply quantity_cast to sub-components of a vector) @@ -327,11 +327,11 @@ TEST_CASE("vector of quantities", "[la]") SECTION("multiply by scalar value") { - const vector> v = {1 * m, 2 * m, 3 * m}; + const vector> v = {1 * m, 2 * m, 3 * m}; SECTION("integral") { - const vector> result = {2 * m, 4 * m, 6 * m}; + const vector> result = {2 * m, 4 * m, 6 * m}; SECTION("scalar on LHS") { CHECK(2 * v == result); } SECTION("scalar on RHS") { CHECK(v * 2 == result); } @@ -339,7 +339,7 @@ TEST_CASE("vector of quantities", "[la]") SECTION("floating-point") { - const vector> result = {0.5 * m, 1. * m, 1.5 * m}; + const vector> result = {0.5 * m, 1. * m, 1.5 * m}; SECTION("scalar on LHS") { CHECK(0.5 * v == result); } SECTION("scalar on RHS") { CHECK(v * 0.5 == result); } @@ -348,46 +348,46 @@ TEST_CASE("vector of quantities", "[la]") SECTION("divide by scalar value") { - const vector> v = {2 * m, 4 * m, 6 * m}; + const vector> v = {2 * m, 4 * m, 6 * m}; - SECTION("integral") { CHECK(v / 2 == vector>{1 * m, 2 * m, 3 * m}); } + SECTION("integral") { CHECK(v / 2 == vector>{1 * m, 2 * m, 3 * m}); } SECTION("floating-point") { - CHECK(v / 0.5 == vector>{4. * m, 8. * m, 12. * m}); + CHECK(v / 0.5 == vector>{4. * m, 8. * m, 12. * m}); } } SECTION("add") { - const vector> v = {1 * m, 2 * m, 3 * m}; + const vector> v = {1 * m, 2 * m, 3 * m}; SECTION("same unit") { - const vector> u = {3 * m, 2 * m, 1 * m}; + const vector> u = {3 * m, 2 * m, 1 * m}; - CHECK(v + u == vector>{4 * m, 4 * m, 4 * m}); + CHECK(v + u == vector>{4 * m, 4 * m, 4 * m}); } SECTION("different units") { - const vector> u = {3 * km, 2 * km, 1 * km}; + const vector> u = {3 * km, 2 * km, 1 * km}; - CHECK(v + u == vector>{3001 * m, 2002 * m, 1003 * m}); + CHECK(v + u == vector>{3001 * m, 2002 * m, 1003 * m}); } } SECTION("subtract") { - const vector> v = {1 * m, 2 * m, 3 * m}; + const vector> v = {1 * m, 2 * m, 3 * m}; SECTION("same unit") { - const vector> u = {3 * m, 2 * m, 1 * m}; - CHECK(v - u == vector>{-2 * m, 0 * m, 2 * m}); + const vector> u = {3 * m, 2 * m, 1 * m}; + CHECK(v - u == vector>{-2 * m, 0 * m, 2 * m}); } SECTION("different units") { - const vector> u = {3 * km, 2 * km, 1 * km}; - CHECK(v - u == vector>{-2999 * m, -1998 * m, -997 * m}); + const vector> u = {3 * km, 2 * km, 1 * km}; + CHECK(v - u == vector>{-2999 * m, -1998 * m, -997 * m}); } } @@ -454,7 +454,7 @@ TEST_CASE("vector of quantities", "[la]") SECTION("divide by scalar quantity") { - const vector> pos = {30 * km, 20 * km, 10 * km}; + const vector> pos = {30 * km, 20 * km, 10 * km}; SECTION("integral") { @@ -495,7 +495,7 @@ TEST_CASE("vector of quantities", "[la]") SECTION("cross product with a vector of quantities") { - const vector> r = {3 * m, 0 * m, 0 * m}; + const vector> r = {3 * m, 0 * m, 0 * m}; const vector> f = {0 * N, 10 * N, 0 * N}; CHECK(cross_product(r, f) == vector>{0 * N * m, 0 * N * m, 30 * N * m}); diff --git a/test/static/quantity_spec_test.cpp b/test/static/quantity_spec_test.cpp index 1c7bba62..9db5c448 100644 --- a/test/static/quantity_spec_test.cpp +++ b/test/static/quantity_spec_test.cpp @@ -56,6 +56,7 @@ inline constexpr auto arc_length = path_length; QUANTITY_SPEC_(distance, path_length); QUANTITY_SPEC_(wavelength, length); QUANTITY_SPEC_(position_vector, length, quantity_character::vector); +QUANTITY_SPEC_(displacement, length, quantity_character::vector); QUANTITY_SPEC_(period_duration, time); QUANTITY_SPEC_(rotation, dimensionless); QUANTITY_SPEC_(repetency, inverse(wavelength)); @@ -68,7 +69,7 @@ QUANTITY_SPEC_(rotational_displacement, angular_measure, path_length / radius); QUANTITY_SPEC_(phase_angle, angular_measure); QUANTITY_SPEC_(solid_angular_measure, dimensionless, area / pow<2>(radius), is_kind); QUANTITY_SPEC_(speed, length / time); -QUANTITY_SPEC_(velocity, speed, position_vector / time); +QUANTITY_SPEC_(velocity, speed, displacement / time); QUANTITY_SPEC_(special_speed, speed); QUANTITY_SPEC_(rate_of_climb, speed, height / time); QUANTITY_SPEC_(special_rate_of_climb, rate_of_climb); @@ -377,9 +378,9 @@ static_assert(force * length != torque); static_assert(force * position_vector != energy); static_assert(force * position_vector != torque); static_assert(length / time != speed); -static_assert(position_vector / time != speed); +static_assert(displacement / time != speed); static_assert(length / time != velocity); -static_assert(position_vector / time != velocity); +static_assert(displacement / time != velocity); static_assert(length * time / period_duration != time); static_assert(length * height / width != length); @@ -390,12 +391,12 @@ static_assert(length / speed != time); static_assert(speed * time != length); static_assert(length / time / time != acceleration); -static_assert(position_vector / time / time != acceleration); -static_assert(position_vector / (time * time) != acceleration); +static_assert(displacement / time / time != acceleration); +static_assert(displacement / (time * time) != acceleration); static_assert(velocity / time != acceleration); static_assert(velocity / acceleration != time); static_assert(acceleration * time != velocity); -static_assert(acceleration * (time * time) != position_vector); +static_assert(acceleration * (time * time) != displacement); static_assert(acceleration / speed != frequency); // get_kind @@ -471,7 +472,7 @@ static_assert(get_complexity(speed * area / frequency) == 1); // explode static_assert(explode(frequency).quantity == inverse(period_duration)); static_assert(explode)>(speed).quantity == length / time); -static_assert(explode)>(velocity).quantity == position_vector / time); +static_assert(explode)>(velocity).quantity == displacement / time); static_assert(explode(angular_measure).quantity == arc_length / radius); static_assert(explode(acceleration * time).quantity == velocity); static_assert(explode(area).quantity == area); @@ -582,8 +583,8 @@ static_assert(convertible_impl(inverse(frequency), time) == yes); static_assert(convertible_impl(inverse(period_duration), frequency) == yes); static_assert(convertible_impl(length * length, area) == yes); static_assert(convertible_impl(length / time, speed) == yes); -static_assert(convertible_impl(position_vector / time, speed) == yes); -static_assert(convertible_impl(position_vector / time, velocity) == yes); +static_assert(convertible_impl(displacement / time, speed) == yes); +static_assert(convertible_impl(displacement / time, velocity) == yes); static_assert(convertible_impl(height / time, speed) == yes); static_assert(convertible_impl(height / time, rate_of_climb) == yes); static_assert(convertible_impl(area / length, length) == yes); @@ -597,12 +598,12 @@ static_assert(convertible_impl(area * (area / length), volume) == yes); static_assert(convertible_impl(volume / (length * length), length) == yes); static_assert(convertible_impl(length / speed, time) == yes); static_assert(convertible_impl(speed * time, length) == yes); -static_assert(convertible_impl(position_vector / time / time, acceleration) == yes); -static_assert(convertible_impl(position_vector / (time * time), acceleration) == yes); +static_assert(convertible_impl(displacement / time / time, acceleration) == yes); +static_assert(convertible_impl(displacement / (time * time), acceleration) == yes); static_assert(convertible_impl(velocity / time, acceleration) == yes); static_assert(convertible_impl(velocity / acceleration, time) == yes); static_assert(convertible_impl(acceleration * time, velocity) == yes); -static_assert(convertible_impl(acceleration * (time * time), position_vector) == yes); +static_assert(convertible_impl(acceleration * (time * time), displacement) == yes); static_assert(convertible_impl(mass * pow<2>(length) / pow<2>(time), energy) == yes); static_assert(convertible_impl(force * length, energy) == yes); static_assert(convertible_impl(force * position_vector, moment_of_force) == yes); @@ -648,18 +649,18 @@ static_assert(convertible_impl(distance / speed, time) == yes); // derived quantities to incompatible type static_assert(convertible_impl(height / time, velocity) == cast); -static_assert(convertible_impl(position_vector / time, rate_of_climb) == cast); +static_assert(convertible_impl(displacement / time, rate_of_climb) == cast); // type to compatible derived static_assert(convertible_impl(distance, speed* time) == yes); // type to more specialized derived quantity static_assert(convertible_impl(speed, height / time) == explicit_conversion); -static_assert(convertible_impl(speed, position_vector / time) == explicit_conversion); +static_assert(convertible_impl(speed, displacement / time) == explicit_conversion); // type to a derived quantity on a different branch static_assert(convertible_impl(velocity, height / time) == cast); -static_assert(convertible_impl(rate_of_climb, position_vector / time) == cast); +static_assert(convertible_impl(rate_of_climb, displacement / time) == cast); // derived quantities requiring explosion to a type static_assert(convertible_impl(acceleration * time, velocity) == yes); @@ -792,7 +793,7 @@ static_assert(convertible_impl(length / width, dimensionless) == yes); static_assert(convertible_impl(efficiency, strain) == cast); // quantity character checks -static_assert((position_vector / time).character == quantity_character::vector); +static_assert((displacement / time).character == quantity_character::vector); static_assert((position_vector / position_vector * time).character == quantity_character::scalar); static_assert((velocity / acceleration).character == quantity_character::scalar); diff --git a/test/static/quantity_test.cpp b/test/static/quantity_test.cpp index 276a70e7..16c6ab46 100644 --- a/test/static/quantity_test.cpp +++ b/test/static/quantity_test.cpp @@ -1127,10 +1127,10 @@ static_assert(!QuantityOf, isq::distance / isq::dura static_assert(!QuantityOf, isq::width / isq::duration>); static_assert(QuantityOf, isq::width / isq::duration>); static_assert(QuantityOf[m / s]>, isq::width / isq::duration>); -static_assert(!QuantityOf, isq::position_vector / isq::duration>); -static_assert(QuantityOf, isq::position_vector / isq::duration>); -static_assert(QuantityOf[m / s]>, isq::position_vector / isq::duration>); -static_assert(QuantityOf, isq::position_vector / isq::duration>); +static_assert(!QuantityOf, isq::displacement / isq::duration>); +static_assert(QuantityOf, isq::displacement / isq::duration>); +static_assert(QuantityOf[m / s]>, isq::displacement / isq::duration>); +static_assert(QuantityOf, isq::displacement / isq::duration>); static_assert(QuantityOf); // kind of static_assert(QuantityOf[m]), isq::height>); // kind of