refactor: std::common_type usage replaced with dedicated functions for units, dimensions, and references
This commit is contained in:
1 parent
649252d691
commit
f2e63fdeb1
6 files changed
+74
-97
No files matched your search
@@ -174,15 +174,15 @@ static_assert(1 / time != frequency);
|
||||
static_assert(interconvertible(1 / time, frequency));
|
||||
static_assert(1 / frequency == time);
|
||||
static_assert(frequency * time == dimension_one);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(1 / time), decltype(frequency)>, frequency_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(frequency), decltype(1 / time)>, frequency_>);
|
||||
static_assert(is_of_type<detail::common_dimension(1 / time, frequency), frequency_>);
|
||||
static_assert(is_of_type<detail::common_dimension(frequency, 1 / time), frequency_>);
|
||||
|
||||
static_assert(length * length != area);
|
||||
static_assert(interconvertible(length * length, area));
|
||||
static_assert(length * length != volume);
|
||||
static_assert(area / length == length);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(length * length), decltype(area)>, area_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(area), decltype(length * length)>, area_>);
|
||||
static_assert(is_of_type<detail::common_dimension(length* length, area), area_>);
|
||||
static_assert(is_of_type<detail::common_dimension(area, length* length), area_>);
|
||||
|
||||
static_assert(length * length * length != volume);
|
||||
static_assert(area * length != volume);
|
||||
@@ -197,10 +197,9 @@ static_assert(length * time != speed);
|
||||
static_assert(length / time / time != speed);
|
||||
static_assert(length / speed == time);
|
||||
static_assert(speed * time == length);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(length / time), decltype(speed)>, speed_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(speed), decltype(length / time)>, speed_>);
|
||||
static_assert(
|
||||
std::is_same_v<std::common_type_t<decltype(length / time), decltype(length / time)>, decltype(length / time)>);
|
||||
static_assert(is_of_type<detail::common_dimension(length / time, speed), speed_>);
|
||||
static_assert(is_of_type<detail::common_dimension(speed, length / time), speed_>);
|
||||
static_assert(is_of_type<detail::common_dimension(length / time, length / time), decltype(length / time)>);
|
||||
|
||||
static_assert(length / time / time != acceleration);
|
||||
static_assert(length / (time * time) != acceleration);
|
||||
@@ -213,8 +212,8 @@ static_assert(acceleration / speed != frequency);
|
||||
// comparison of convertible named dimensions
|
||||
static_assert(velocity != speed);
|
||||
static_assert(interconvertible(speed, velocity));
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(velocity), decltype(speed)>, velocity_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(speed), decltype(velocity)>, velocity_>);
|
||||
static_assert(is_of_type<detail::common_dimension(velocity, speed), velocity_>);
|
||||
static_assert(is_of_type<detail::common_dimension(speed, velocity), velocity_>);
|
||||
|
||||
// comparison of convertible unnamed dimensions
|
||||
static_assert(is_of_type<mass * acceleration, derived_dimension<length_, mass_, per<units::power<time_, 2>>>>);
|
||||
|
||||
@@ -469,35 +469,33 @@ static_assert(
|
||||
is_of_type<pow<2>(mag<3600>* second), scaled_unit<mag<3600> * mag<3600>, derived_unit<power<second_, 2>>>>);
|
||||
|
||||
// common_type
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(gram), decltype(gram)>, gram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(kilogram), decltype(kilogram)>, kilogram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(si::kilo<gram>), decltype(kilogram)>, kilogram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(kilogram), decltype(si::kilo<gram>)>, kilogram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(mag<1000> * gram), decltype(kilogram)>, kilogram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(kilogram), decltype(mag<1000> * gram)>, kilogram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(1 / second), decltype(hertz)>, hertz_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(hertz), decltype(1 / second)>, hertz_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(gram), decltype(kilogram)>, gram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(kilogram), decltype(gram)>, gram_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(second), decltype(hour)>, second_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(hour), decltype(second)>, second_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(minute), decltype(hour)>, minute_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(hour), decltype(minute)>, minute_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(si::kilo<metre>), decltype(si::milli<metre>)>,
|
||||
std::remove_const_t<decltype(si::milli<metre>)>>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(si::milli<metre>), decltype(si::kilo<metre>)>,
|
||||
std::remove_const_t<decltype(si::milli<metre>)>>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(yard), decltype(mile)>, yard_>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(mile), decltype(yard)>, yard_>);
|
||||
static_assert(is_of_type<detail::common_unit(gram, gram), gram_>);
|
||||
static_assert(is_of_type<detail::common_unit(kilogram, kilogram), kilogram_>);
|
||||
static_assert(is_of_type<detail::common_unit(si::kilo<gram>, kilogram), kilogram_>);
|
||||
static_assert(is_of_type<detail::common_unit(kilogram, si::kilo<gram>), kilogram_>);
|
||||
static_assert(is_of_type<detail::common_unit(mag<1000>* gram, kilogram), kilogram_>);
|
||||
static_assert(is_of_type<detail::common_unit(kilogram, mag<1000>* gram), kilogram_>);
|
||||
static_assert(is_of_type<detail::common_unit(1 / second, hertz), hertz_>);
|
||||
static_assert(is_of_type<detail::common_unit(hertz, 1 / second), hertz_>);
|
||||
static_assert(is_of_type<detail::common_unit(gram, kilogram), gram_>);
|
||||
static_assert(is_of_type<detail::common_unit(kilogram, gram), gram_>);
|
||||
static_assert(is_of_type<detail::common_unit(second, hour), second_>);
|
||||
static_assert(is_of_type<detail::common_unit(hour, second), second_>);
|
||||
static_assert(is_of_type<detail::common_unit(minute, hour), minute_>);
|
||||
static_assert(is_of_type<detail::common_unit(hour, minute), minute_>);
|
||||
static_assert(
|
||||
is_of_type<detail::common_unit(si::kilo<metre>, si::milli<metre>), std::remove_const_t<decltype(si::milli<metre>)>>);
|
||||
static_assert(
|
||||
is_of_type<detail::common_unit(si::milli<metre>, si::kilo<metre>), std::remove_const_t<decltype(si::milli<metre>)>>);
|
||||
static_assert(is_of_type<detail::common_unit(yard, mile), yard_>);
|
||||
static_assert(is_of_type<detail::common_unit(mile, yard), yard_>);
|
||||
// TODO The below have long/unreadable magnitude types
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(kilometre / hour), decltype(metre / second)>,
|
||||
scaled_unit<mag<ratio{1, 18}>, derived_unit<metre_, per<second_>>>>);
|
||||
static_assert(std::is_same_v<std::common_type_t<decltype(metre / second), decltype(kilometre / hour)>,
|
||||
scaled_unit<mag<ratio{1, 18}>, derived_unit<metre_, per<second_>>>>);
|
||||
static_assert(
|
||||
std::is_same_v<std::common_type_t<decltype(kilometre), decltype(mile)>, scaled_unit<mag<ratio{8, 125}>, metre_>>);
|
||||
static_assert(
|
||||
std::is_same_v<std::common_type_t<decltype(mile), decltype(kilometre)>, scaled_unit<mag<ratio{8, 125}>, metre_>>);
|
||||
static_assert(is_of_type<detail::common_unit(kilometre / hour, metre / second),
|
||||
scaled_unit<mag<ratio{1, 18}>, derived_unit<metre_, per<second_>>>>);
|
||||
static_assert(is_of_type<detail::common_unit(metre / second, kilometre / hour),
|
||||
scaled_unit<mag<ratio{1, 18}>, derived_unit<metre_, per<second_>>>>);
|
||||
static_assert(is_of_type<detail::common_unit(kilometre, mile), scaled_unit<mag<ratio{8, 125}>, metre_>>);
|
||||
static_assert(is_of_type<detail::common_unit(mile, kilometre), scaled_unit<mag<ratio{8, 125}>, metre_>>);
|
||||
|
||||
// unit symbols
|
||||
#ifdef __cpp_lib_constexpr_string
|
||||
|
||||
Reference in new issue
Block a user