///////////////////////////////////////////////////////////////
// Copyright 2012 John Maddock. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
#ifdef _MSC_VER
-# define _SCL_SECURE_NO_WARNINGS
+#define _SCL_SECURE_NO_WARNINGS
#endif
#if defined(HAS_GMP)
#include <boost/multiprecision/cpp_bin_float.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
-
using namespace boost::multiprecision;
#ifdef BOOST_MSVC
-#pragma warning(disable:4127)
+#pragma warning(disable : 4127)
#endif
-
template <class T>
T generate_random()
{
- typedef int e_type;
+ typedef int e_type;
static boost::random::mt19937 gen;
- T val = gen();
- T prev_val = -1;
- while(val != prev_val)
+ T val = gen();
+ T prev_val = -1;
+ while (val != prev_val)
{
val *= (gen.max)();
prev_val = val;
template <class From, class To>
void test_convert_imp(boost::mpl::int_<number_kind_floating_point> const&, boost::mpl::int_<number_kind_integer> const&)
{
- for(unsigned i = 0; i < 100; ++i)
+ for (unsigned i = 0; i < 100; ++i)
{
From from = generate_random<From>();
- To t1(from);
- To t2 = from.template convert_to<To>();
+ To t1(from);
+ To t2 = from.template convert_to<To>();
BOOST_CHECK_EQUAL(From(trunc(from)), From(t1));
BOOST_CHECK_EQUAL(From(trunc(from)), From(t2));
- test_convert_neg_int<From, To>(from, boost::mpl::bool_<std::numeric_limits<From>::is_signed && std::numeric_limits<To>::is_signed>());
+ test_convert_neg_int<From, To>(from, boost::mpl::bool_ < std::numeric_limits<From>::is_signed && std::numeric_limits<To>::is_signed > ());
}
}
void test_convert_neg_rat(From from, const boost::mpl::true_&)
{
from = -from;
- To t3(from);
- To t4 = from.template convert_to<To>();
+ To t3(from);
+ To t4 = from.template convert_to<To>();
From tol = std::numeric_limits<From>::epsilon();
BOOST_CHECK_CLOSE_FRACTION(From(t3), from, tol);
BOOST_CHECK_CLOSE_FRACTION(From(t4), from, tol);
template <class From, class To>
void test_convert_imp(boost::mpl::int_<number_kind_floating_point> const&, boost::mpl::int_<number_kind_rational> const&)
{
- for(unsigned i = 0; i < 100; ++i)
+ for (unsigned i = 0; i < 100; ++i)
{
From from = generate_random<From>();
- To t1(from);
- To t2 = from.template convert_to<To>();
+ To t1(from);
+ To t2 = from.template convert_to<To>();
From tol = std::numeric_limits<From>::epsilon();
BOOST_CHECK_CLOSE_FRACTION(From(t1), from, tol);
BOOST_CHECK_CLOSE_FRACTION(From(t2), from, tol);
- test_convert_neg_rat<From, To>(from, boost::mpl::bool_<std::numeric_limits<From>::is_signed && std::numeric_limits<To>::is_signed>());
+ test_convert_neg_rat<From, To>(from, boost::mpl::bool_ < std::numeric_limits<From>::is_signed && std::numeric_limits<To>::is_signed > ());
}
}
template <class From, class To>
void test_convert_imp(boost::mpl::int_<number_kind_floating_point> const&, boost::mpl::int_<number_kind_floating_point> const&)
{
- for(unsigned i = 0; i < 100; ++i)
+ for (unsigned i = 0; i < 100; ++i)
{
From from = generate_random<From>();
- To t1(from);
- To t2 = from.template convert_to<To>();
- To answer(from.str());
- To tol = (std::max)(std::numeric_limits<To>::epsilon(), To(std::numeric_limits<From>::epsilon())) * 2;
+ To t1(from);
+ To t2 = from.template convert_to<To>();
+ To answer(from.str());
+ To tol = (std::max)(std::numeric_limits<To>::epsilon(), To(std::numeric_limits<From>::epsilon())) * 2;
BOOST_CHECK_CLOSE_FRACTION(t1, answer, tol);
BOOST_CHECK_CLOSE_FRACTION(t2, answer, tol);
- test_convert_neg_float<From, To>(from, boost::mpl::bool_<std::numeric_limits<From>::is_signed && std::numeric_limits<To>::is_signed>());
+ test_convert_neg_float<From, To>(from, boost::mpl::bool_ < std::numeric_limits<From>::is_signed && std::numeric_limits<To>::is_signed > ());
}
}
test_convert_imp<From, To>(typename number_category<From>::type(), typename number_category<To>::type());
}
-
int main()
{
test_convert<mpf_float_50, cpp_int>();
test_convert<mpf_float_50, int128_t>();
test_convert<mpf_float_50, uint128_t>();
-
test_convert<mpf_float_50, cpp_rational>();
test_convert<mpf_float_50, cpp_dec_float_50>();