mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-03 20:34:26 +02:00
Floating point classification functions
Add the ability for `isnan`, `isfinite`, and `isinf` to work on dimensioned quantities.
This commit is contained in:
@@ -72,6 +72,12 @@ TEST_CASE("'fma()' returns a common reference.", "[math][fma]")
|
||||
REQUIRE(fma(isq::speed(10.0 * m / s), isq::time(2.0 * s), isq::height(42.0 * m)) == isq::length(62.0 * m));
|
||||
}
|
||||
|
||||
TEST_CASE("'isfinite()' accepts dimensioned arguments", "[math][isfinite]") { REQUIRE(isfinite(4.0 * isq::length[m])); }
|
||||
|
||||
TEST_CASE("'isinf()' accepts dimensioned arguments", "[math][isinf]") { REQUIRE(!isinf(4.0 * isq::length[m])); }
|
||||
|
||||
TEST_CASE("'isnan()' accepts dimensioned arguments", "[math][isnan]") { REQUIRE(!isnan(4.0 * isq::length[m])); }
|
||||
|
||||
|
||||
TEST_CASE("'pow<Num, Den>()' on quantity changes the value and the dimension accordingly", "[math][pow]")
|
||||
{
|
||||
|
@@ -49,6 +49,16 @@ static_assert(compare(pow<1>(2 * m), 2 * m));
|
||||
static_assert(compare(pow<2>(2 * m), 4 * pow<2>(m), 4 * m2));
|
||||
static_assert(compare(pow<2>(2 * km), 4 * pow<2>(km), 4 * square(km)));
|
||||
static_assert(compare(pow<2>(2 * ft), 4 * pow<2>(ft), 4 * square(ft)));
|
||||
static_assert(isfinite(2 * m));
|
||||
static_assert(isfinite(2.0 * one));
|
||||
static_assert(!isfinite(std::numeric_limits<double>::quiet_NaN() * one));
|
||||
static_assert(!isfinite(std::numeric_limits<double>::infinity() * km));
|
||||
static_assert(!isinf(2 * m));
|
||||
static_assert(!isinf(2.0 * one));
|
||||
static_assert(isinf(std::numeric_limits<double>::infinity() * one));
|
||||
static_assert(!isnan(2 * m));
|
||||
static_assert(!isnan(std::numeric_limits<double>::infinity() * one));
|
||||
static_assert(isnan(std::numeric_limits<double>::quiet_NaN() * m));
|
||||
static_assert(compare(sqrt(4 * m2), 2 * m));
|
||||
static_assert(compare(sqrt(4 * square(km)), 2 * km));
|
||||
static_assert(compare(sqrt(4 * square(ft)), 2 * ft));
|
||||
|
Reference in New Issue
Block a user