From 58106618ac04fd84ae8b37fb145be13213f0c75b Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Wed, 18 Sep 2019 18:34:54 -0600 Subject: [PATCH] ratio_pow and ratio_sqrt fixed + unit tests added --- src/include/units/ratio.h | 19 +++++++++++++++++-- test/unit_test/CMakeLists.txt | 2 +- .../{test_tools.cpp => test_ratio.cpp} | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) rename test/unit_test/{test_tools.cpp => test_ratio.cpp} (72%) diff --git a/src/include/units/ratio.h b/src/include/units/ratio.h index 8a8a0a7f..09055d96 100644 --- a/src/include/units/ratio.h +++ b/src/include/units/ratio.h @@ -128,10 +128,15 @@ namespace std::experimental::units { }; template - struct ratio_pow_impl { + struct ratio_pow_impl { using type = R; }; + template + struct ratio_pow_impl { + using type = ratio<1>; + }; + } template @@ -158,10 +163,20 @@ namespace std::experimental::units { return sqrt_impl(v, 1, v); } + template + struct ratio_sqrt_impl { + using type = ratio; + }; + + template + struct ratio_sqrt_impl> { + using type = ratio<0>; + }; + } template - using ratio_sqrt = ratio; + using ratio_sqrt = detail::ratio_sqrt_impl::type; // common_ratio diff --git a/test/unit_test/CMakeLists.txt b/test/unit_test/CMakeLists.txt index cbb5f987..328cbe37 100644 --- a/test/unit_test/CMakeLists.txt +++ b/test/unit_test/CMakeLists.txt @@ -25,7 +25,7 @@ add_library(unit_tests test_custom_units.cpp test_dimension.cpp test_quantity.cpp - test_tools.cpp + test_ratio.cpp test_type_list.cpp test_units.cpp ) diff --git a/test/unit_test/test_tools.cpp b/test/unit_test/test_ratio.cpp similarity index 72% rename from test/unit_test/test_tools.cpp rename to test/unit_test/test_ratio.cpp index 23899293..d60acfdf 100644 --- a/test/unit_test/test_tools.cpp +++ b/test/unit_test/test_ratio.cpp @@ -41,6 +41,21 @@ namespace { static_assert(std::is_same_v, ratio<2>>, ratio<1, 16>>); static_assert(std::is_same_v, ratio<3>>, ratio<2>>); + static_assert(std::is_same_v, 0>, ratio<1>>); + static_assert(std::is_same_v, 1>, ratio<2>>); + static_assert(std::is_same_v, 2>, ratio<4>>); + static_assert(std::is_same_v, 3>, ratio<8>>); + static_assert(std::is_same_v, 0>, ratio<1>>); + static_assert(std::is_same_v, 1>, ratio<1, 2>>); + static_assert(std::is_same_v, 2>, ratio<1, 4>>); + static_assert(std::is_same_v, 3>, ratio<1, 8>>); + + static_assert(std::is_same_v>, ratio<3>>); + static_assert(std::is_same_v>, ratio<2>>); + static_assert(std::is_same_v>, ratio<1>>); + static_assert(std::is_same_v>, ratio<0>>); + static_assert(std::is_same_v>, ratio<1, 2>>); + // common_ratio static_assert(std::is_same_v, ratio<1000>>, ratio<1>>);