From dfd209ed14f8ef6ebc7057878452eedfe591d9db Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Fri, 2 Apr 2021 18:57:17 +0200 Subject: [PATCH] fix: `femtotonne` enabled --- src/systems/si/include/units/isq/si/mass.h | 4 +- test/unit_test/runtime/fmt_units_test.cpp | 3 +- test/unit_test/static/si_fps_test.cpp | 45 ++++++++++++---------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/systems/si/include/units/isq/si/mass.h b/src/systems/si/include/units/isq/si/mass.h index dd20fb8e..0f2f009e 100644 --- a/src/systems/si/include/units/isq/si/mass.h +++ b/src/systems/si/include/units/isq/si/mass.h @@ -190,8 +190,8 @@ constexpr auto operator"" _q_at(unsigned long long l) { gsl_ExpectsAudit(std::in constexpr auto operator"" _q_at(long double l) { return mass(l); } // ft -/*constexpr auto operator"" _q_ft(unsigned long long l) { gsl_ExpectsAudit(std::in_range(l)); return mass(static_cast(l)); } -constexpr auto operator"" _q_ft(long double l) { return mass(l); }*/ +constexpr auto operator"" _q_ft(unsigned long long l) { gsl_ExpectsAudit(std::in_range(l)); return mass(static_cast(l)); } +constexpr auto operator"" _q_ft(long double l) { return mass(l); } // pt constexpr auto operator"" _q_pt(unsigned long long l) { gsl_ExpectsAudit(std::in_range(l)); return mass(static_cast(l)); } diff --git a/test/unit_test/runtime/fmt_units_test.cpp b/test/unit_test/runtime/fmt_units_test.cpp index 780b9e5f..2c202d1d 100644 --- a/test/unit_test/runtime/fmt_units_test.cpp +++ b/test/unit_test/runtime/fmt_units_test.cpp @@ -37,6 +37,7 @@ using namespace units::isq::si::international; using namespace units::isq::si::us; using namespace units::isq::si::iau; using namespace units::isq::si::imperial; +using namespace units::isq::si::imperial::references; using namespace units::isq::si::typographic; using namespace units::isq::iec80000::references; @@ -56,7 +57,7 @@ TEST_CASE("fmt::format on synthesized unit symbols", "[text][fmt]") CHECK(fmt::format("{}", 1_q_mm) == "1 mm"); CHECK(fmt::format("{}", 1_q_cm) == "1 cm"); CHECK(fmt::format("{}", 1_q_km) == "1 km"); - CHECK(fmt::format("{}", 1_q_ft) == "1 ft"); + CHECK(fmt::format("{}", 1 * ft) == "1 ft"); CHECK(fmt::format("{}", 1_q_ft_us) == "1 ft(us)"); CHECK(fmt::format("{}", 1_q_yd) == "1 yd"); CHECK(fmt::format("{}", 1_q_in) == "1 in"); diff --git a/test/unit_test/static/si_fps_test.cpp b/test/unit_test/static/si_fps_test.cpp index f633feaa..2af500c6 100644 --- a/test/unit_test/static/si_fps_test.cpp +++ b/test/unit_test/static/si_fps_test.cpp @@ -74,8 +74,9 @@ static_assert(si::fps::pressure(1) > 1.4881639435 namespace fps_literals { using namespace units::isq::si::fps::literals; +using namespace units::isq::si::fps::references; -static_assert(1_q_ft == si::length(0.3048)); +static_assert(1 * ft == si::length(0.3048)); static_assert(1_q_lb == si::mass(0.45359237)); static_assert(1_q_s == si::time(1)); static_assert(1_q_ft_per_s == si::speed(0.3048)); @@ -95,10 +96,11 @@ namespace fps_plus_si_literals { using namespace units::isq::si::literals; using namespace units::isq::si::fps::literals; +using namespace units::isq::si::fps::references; // static_assert(100_q_cm == 1_q_m); // ambiguous // static_assert(1'000_q_g == 1_q_kg); // ambiguous -static_assert(1_q_ft == 0.3048_q_m); +static_assert(1 * ft == 0.3048_q_m); static_assert(1_q_lb == 0.45359237_q_kg); static_assert(1_q_s == 1_q_s); static_assert(1_q_ft_per_s == 0.3048_q_m_per_s); @@ -118,38 +120,39 @@ static_assert(1_q_pdl_per_ft2> 1.4881639435_q_Pa && namespace fps_test { using namespace units::isq::si::fps::literals; +using namespace units::isq::si::fps::references; // addition -// static_assert(si::length(1) + 1_q_ft == si::length(1.3048)); // should not compile (different dimensions) -// static_assert(1_q_ft / 0.3048 + si::length(1) == si::length(1.3048)); // should not compile (different dimensions) -static_assert(quantity_cast>(1._q_ft / 0.3048) + si::length(1) == si::length(2)); // 1 m in ft + 1 m -static_assert(si::length(1) + quantity_cast>(1._q_ft / 0.3048) == si::length(2)); // 1 m + 1 m in ft -static_assert(1_q_ft + quantity_cast>(si::length(0.3048)) == 2_q_ft); // 1 ft + 1 ft in m -static_assert(quantity_cast>(si::length(0.3048)) + 1_q_ft == 2_q_ft); // 1 ft in m + 1 ft +// static_assert(si::length(1) + 1 * ft == si::length(1.3048)); // should not compile (different dimensions) +// static_assert(1 * ft / 0.3048 + si::length(1) == si::length(1.3048)); // should not compile (different dimensions) +static_assert(quantity_cast>(1. * ft / 0.3048) + si::length(1) == si::length(2)); // 1 m in ft + 1 m +static_assert(si::length(1) + quantity_cast>(1. * ft / 0.3048) == si::length(2)); // 1 m + 1 m in ft +static_assert(1 * ft + quantity_cast>(si::length(0.3048)) == 2 * ft); // 1 ft + 1 ft in m +static_assert(quantity_cast>(si::length(0.3048)) + 1 * ft == 2 * ft); // 1 ft in m + 1 ft // substraction -// static_assert(1_q_ft - si::length(1) == -si::length(0.6952)); // should not compile (different dimensions) -// static_assert(si::length(1) - 1_q_ft == si::length(0.6952)); // should not compile (different dimensions) -static_assert(quantity_cast>(6._q_ft) - si::length(1) > si::length(0.8287) && - quantity_cast>(6._q_ft) - si::length(1) < si::length(0.8289)); // 6 ft in m - 1 m = ... m -static_assert(si::length(5) - quantity_cast>(6_q_ft) == si::length(3.1712)); // 5 m - 6 ft in m = ... -static_assert(6._q_ft - quantity_cast>(si::length(0.3048)) == 5._q_ft); // 6 ft - 1 ft in m = 5 ft -static_assert(quantity_cast>(si::length(1.8288)) - 1._q_ft == 5._q_ft); // 6 ft in m - 1 ft = 5 ft +// static_assert(1 * ft - si::length(1) == -si::length(0.6952)); // should not compile (different dimensions) +// static_assert(si::length(1) - 1 * ft == si::length(0.6952)); // should not compile (different dimensions) +static_assert(quantity_cast>(6. * ft) - si::length(1) > si::length(0.8287) && + quantity_cast>(6. * ft) - si::length(1) < si::length(0.8289)); // 6 ft in m - 1 m = ... m +static_assert(si::length(5) - quantity_cast>(6 * ft) == si::length(3.1712)); // 5 m - 6 ft in m = ... +static_assert(6. * ft - quantity_cast>(si::length(0.3048)) == 5. * ft); // 6 ft - 1 ft in m = 5 ft +static_assert(quantity_cast>(si::length(1.8288)) - 1. * ft == 5. * ft); // 6 ft in m - 1 ft = 5 ft // multiplication -// static_assert(2_q_ft * si::length(2) == si::area(1.2192)); // should not compile (unknown dimension) -// static_assert(quantity_cast>(2._q_ft) * si::length(2) == si::area(1.2192)); -static_assert(quantity_cast>(2._q_ft) * si::length(0.6096) == si::area(0.371612160)); // 2 ft * 2 ft == 4 sq ft -static_assert(2._q_ft * quantity_cast>(si::length(0.6096)) == 4._q_ft2); +// static_assert(2 * ft * si::length(2) == si::area(1.2192)); // should not compile (unknown dimension) +// static_assert(quantity_cast>(2. * ft) * si::length(2) == si::area(1.2192)); +static_assert(quantity_cast>(2. * ft) * si::length(0.6096) == si::area(0.371612160)); // 2 ft * 2 ft == 4 sq ft +static_assert(2. * ft * quantity_cast>(si::length(0.6096)) == 4._q_ft2); // division // static_assert(si::area(4) / 200_q_cm == si::length(2)); // should not compile (unknown dimension) -static_assert(si::area(1.48644864) / quantity_cast>(4_q_ft) == si::length(1.2192)); // 16 ft2 / 4 ft = 4 ft -static_assert(quantity_cast>(si::area(1.48644864)) / 4._q_ft == 4._q_ft); // 16 ft2 / 4 ft = 4 ft +static_assert(si::area(1.48644864) / quantity_cast>(4 * ft) == si::length(1.2192)); // 16 ft2 / 4 ft = 4 ft +static_assert(quantity_cast>(si::area(1.48644864)) / (4. * ft) == 4. * ft); // 16 ft2 / 4 ft = 4 ft }