From 58daacfd58e705c1f1f1b4a494d4ec6977dbfd3b Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 10 Sep 2020 11:33:58 +0200 Subject: [PATCH] fix: unit tests fixed for DOWNCAST_MODE = OFF --- test/unit_test/runtime/fmt_test.cpp | 4 +++ test/unit_test/static/custom_unit_test.cpp | 4 +-- test/unit_test/static/math_test.cpp | 4 +-- test/unit_test/static/quantity_point_test.cpp | 4 +-- test/unit_test/static/quantity_test.cpp | 14 ++++++--- test/unit_test/static/test_tools.h | 31 +++++++++++++++++++ test/unit_test/static/unit_test.cpp | 4 +-- 7 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 test/unit_test/static/test_tools.h diff --git a/test/unit_test/runtime/fmt_test.cpp b/test/unit_test/runtime/fmt_test.cpp index 16f6a01f..16aa3202 100644 --- a/test/unit_test/runtime/fmt_test.cpp +++ b/test/unit_test/runtime/fmt_test.cpp @@ -467,7 +467,11 @@ TEST_CASE("operator<< on a quantity", "[text][ostream][fmt]") SECTION("percents") { +#if DOWNCAST_MODE == 0 + const auto q = quantity_cast>(15._q_m / 100._q_m); +#else const auto q = quantity_cast(15._q_m / 100._q_m); +#endif os << q; SECTION("iostream") diff --git a/test/unit_test/static/custom_unit_test.cpp b/test/unit_test/static/custom_unit_test.cpp index 87afa540..327b3d85 100644 --- a/test/unit_test/static/custom_unit_test.cpp +++ b/test/unit_test/static/custom_unit_test.cpp @@ -20,6 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +#include "test_tools.h" #include #include #include @@ -49,9 +50,6 @@ using amplitude_spectral_density = quantity -inline constexpr bool compare = DOWNCAST_MODE != 0 ? is_same_v : (is_same_v || units::equivalent); - static_assert(compare, dim_amplitude_spectral_density>); static_assert(compare, dim_power_spectral_density>); diff --git a/test/unit_test/static/math_test.cpp b/test/unit_test/static/math_test.cpp index 6efd92d4..1c120496 100644 --- a/test/unit_test/static/math_test.cpp +++ b/test/unit_test/static/math_test.cpp @@ -20,6 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +#include "test_tools.h" #include "units/math.h" #include "units/physical/international/area.h" #include "units/physical/si/area.h" @@ -33,9 +34,6 @@ using namespace units; using namespace units::physical::si::literals; using namespace units::physical::international::literals; -template -inline constexpr bool compare = DOWNCAST_MODE != 0 ? is_same_v : (is_same_v || units::equivalent); - static_assert(compare(2_q_m)), std::int64_t>); static_assert(compare(2_q_m)), decltype(2_q_m)>); static_assert(compare(2_q_m)), decltype(4_q_m2)>); diff --git a/test/unit_test/static/quantity_point_test.cpp b/test/unit_test/static/quantity_point_test.cpp index c7b73f1e..21670ada 100644 --- a/test/unit_test/static/quantity_point_test.cpp +++ b/test/unit_test/static/quantity_point_test.cpp @@ -20,6 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +#include "test_tools.h" #include "units/math.h" #include "units/physical/si/area.h" #include "units/physical/si/frequency.h" @@ -35,9 +36,6 @@ namespace { using namespace units; using namespace units::physical::si; -template -inline constexpr bool compare = DOWNCAST_MODE != 0 ? std::is_same_v : (std::is_same_v || units::equivalent); - // class invariants template diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index fcda0e0c..f8865ecf 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -20,6 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +#include "test_tools.h" #include "units/math.h" #include "units/physical/si/area.h" #include "units/physical/si/frequency.h" @@ -34,9 +35,6 @@ namespace { using namespace units; using namespace units::physical::si; -template -inline constexpr bool compare = DOWNCAST_MODE != 0 ? std::is_same_v : (std::is_same_v || units::equivalent); - // class invariants template @@ -202,7 +200,11 @@ static_assert(q1.count() == 2); constexpr dimensionless q2 = q1; static_assert(q2.count() == 2000); +#if DOWNCAST_MODE == 0 +static_assert(quantity_cast>(q1).count() == 2000); +#else static_assert(quantity_cast(q1).count() == 2000); +#endif constexpr auto q3 = 10_q_s * 2_q_kHz; static_assert(compare, std::int64_t>>); @@ -310,7 +312,11 @@ static_assert(invalid_dimensionless_operations); static_assert(compare>); +#if DOWNCAST_MODE == 0 +static_assert(quantity_cast>(50._q_m / 100._q_m).count() == 50); +#else static_assert(quantity_cast(50._q_m / 100._q_m).count() == 50); +#endif static_assert(50._q_m / 100._q_m == dimensionless(50)); static_assert(dimensionless(dimensionless(50)).count() == 0.5); @@ -345,7 +351,7 @@ static_assert(compare(2_q_m)), decltype(4_q_m2)>); #if DOWNCAST_MODE == 0 -static_assert(std::is_same_v, units::exp>, scaled_unit, std::int64_t>>); +static_assert(std::is_same_v, units::exponent>, scaled_unit, std::int64_t>>); static_assert(std::is_same_v, std::int64_t>>); #else diff --git a/test/unit_test/static/test_tools.h b/test/unit_test/static/test_tools.h new file mode 100644 index 00000000..c30d0aca --- /dev/null +++ b/test/unit_test/static/test_tools.h @@ -0,0 +1,31 @@ +// The MIT License (MIT) +// +// Copyright (c) 2018 Mateusz Pusz +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include "units/bits/equivalent.h" + +template +inline constexpr bool compare_impl = DOWNCAST_MODE != 0 ? std::is_same_v : (std::is_same_v || units::equivalent); + +template +inline constexpr bool compare = compare_impl, std::remove_cvref_t>; diff --git a/test/unit_test/static/unit_test.cpp b/test/unit_test/static/unit_test.cpp index 66317a74..3c5d0891 100644 --- a/test/unit_test/static/unit_test.cpp +++ b/test/unit_test/static/unit_test.cpp @@ -20,6 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +#include "test_tools.h" #include "units/unit.h" #include "units/bits/equivalent.h" #include "units/physical/si/prefixes.h" @@ -29,9 +30,6 @@ namespace { using namespace units; using namespace units::physical; -template -inline constexpr bool compare = DOWNCAST_MODE != 0 ? std::is_same_v : (std::is_same_v || units::equivalent); - struct metre : named_unit {}; struct centimetre : prefixed_unit {}; struct kilometre : prefixed_unit {};