diff --git a/include/boost/ratio/ratio.hpp b/include/boost/ratio/ratio.hpp index 9eef602..6278291 100644 --- a/include/boost/ratio/ratio.hpp +++ b/include/boost/ratio/ratio.hpp @@ -33,20 +33,17 @@ time2_demo contained this comment: #define BOOST_RATIO_RATIO_HPP #include +#include namespace boost { -/* -template -struct ratio_gcd : - ratio::value, - mpl::lcm_c::value>::type +template struct ratio_gcd: ratio< + ratio_detail::gcd::value, + ratio_detail::lcm::value>::type { }; -*/ } // namespace boost - #endif // BOOST_RATIO_RATIO_HPP diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 98b29c0..889d254 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -34,6 +34,7 @@ compile ratio_arithmetic/ratio_add_pass.cpp ; compile ratio_arithmetic/ratio_subtract_pass.cpp ; compile ratio_arithmetic/ratio_multiply_pass.cpp ; compile ratio_arithmetic/ratio_divide_pass.cpp ; +compile ratio_arithmetic/ratio_gcd_pass.cpp ; compile-fail ratio_arithmetic/ratio_add_fail.cpp ; compile-fail ratio_arithmetic/ratio_add_2_fail.cpp ; #compile-fail ratio_arithmetic/ratio_add_3_fail.cpp ; diff --git a/test/ratio_arithmetic/ratio_gcd_pass.cpp b/test/ratio_arithmetic/ratio_gcd_pass.cpp new file mode 100644 index 0000000..2685183 --- /dev/null +++ b/test/ratio_arithmetic/ratio_gcd_pass.cpp @@ -0,0 +1,65 @@ +// Copyright 2023 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include + +#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) + +void test() +{ + { + typedef boost::ratio<1, 1> R1; + typedef boost::ratio<1, 1> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 1); + } + { + typedef boost::ratio<1, 2> R1; + typedef boost::ratio<1, 1> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 2); + } + { + typedef boost::ratio<-1, 2> R1; + typedef boost::ratio<1, 1> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 2); + } + { + typedef boost::ratio<1, -2> R1; + typedef boost::ratio<1, 1> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 2); + } + { + typedef boost::ratio<1, 2> R1; + typedef boost::ratio<-1, 1> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 2); + } + { + typedef boost::ratio<1, 2> R1; + typedef boost::ratio<1, -1> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 2); + } + { + typedef boost::ratio<1, 2> R1; + typedef boost::ratio<1, 3> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 6); + } + { + typedef boost::ratio<7, 13> R1; + typedef boost::ratio<11, 13> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 1 && R::den == 13); + } + { + typedef boost::ratio<21, 55> R1; + typedef boost::ratio<14, 25> R2; + typedef boost::ratio_gcd R; + STATIC_ASSERT(R::num == 7 && R::den == 275); + } +}