Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / multiprecision / test / test_cpp_bin_float_io.cpp
index 65ed3b6..73daec4 100644 (file)
@@ -6,7 +6,7 @@
 // or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #ifdef _MSC_VER
-#  define _SCL_SECURE_NO_WARNINGS
+#define _SCL_SECURE_NO_WARNINGS
 #endif
 
 #include <boost/multiprecision/cpp_bin_float.hpp>
@@ -20,7 +20,7 @@
 #include <iomanip>
 
 #ifdef BOOST_MSVC
-#pragma warning(disable:4127)
+#pragma warning(disable : 4127)
 #endif
 
 template <class Clock>
@@ -40,57 +40,53 @@ struct stopwatch
       m_start = Clock::now();
    }
 
-private:
+ private:
    typename Clock::time_point m_start;
 };
 
-
 void print_flags(std::ios_base::fmtflags f)
 {
    std::cout << "Formatting flags were: ";
-   if(f & std::ios_base::scientific)
+   if (f & std::ios_base::scientific)
       std::cout << "scientific ";
-   if(f & std::ios_base::fixed)
+   if (f & std::ios_base::fixed)
       std::cout << "fixed ";
-   if(f & std::ios_base::showpoint)
+   if (f & std::ios_base::showpoint)
       std::cout << "showpoint ";
-   if(f & std::ios_base::showpos)
+   if (f & std::ios_base::showpos)
       std::cout << "showpos ";
    std::cout << std::endl;
 }
 
-
 template <class T>
 void test()
 {
-   typedef T mp_t;
-   boost::array<std::ios_base::fmtflags, 9> f = 
-   {{
-      std::ios_base::fmtflags(0), std::ios_base::showpoint, std::ios_base::showpos, std::ios_base::scientific, std::ios_base::scientific|std::ios_base::showpos,
-      std::ios_base::scientific|std::ios_base::showpoint, std::ios_base::fixed, std::ios_base::fixed|std::ios_base::showpoint,
-      std::ios_base::fixed|std::ios_base::showpos
-   }};
+   typedef T                                mp_t;
+   boost::array<std::ios_base::fmtflags, 9> f =
+       {{std::ios_base::fmtflags(0), std::ios_base::showpoint, std::ios_base::showpos, std::ios_base::scientific, std::ios_base::scientific | std::ios_base::showpos,
+         std::ios_base::scientific | std::ios_base::showpoint, std::ios_base::fixed, std::ios_base::fixed | std::ios_base::showpoint,
+         std::ios_base::fixed | std::ios_base::showpos}};
 
    boost::array<boost::array<const char*, 13 * 9>, 40> string_data = {{
 #include "libs/multiprecision/test/string_data.ipp"
    }};
 
-   double num = 123456789.0;
+   double num   = 123456789.0;
    double denom = 1;
-   double val = num;
-   for(unsigned j = 0; j < 40; ++j)
+   double val   = num;
+   for (unsigned j = 0; j < 40; ++j)
    {
       unsigned col = 0;
-      for(unsigned prec = 1; prec < 14; ++prec)
+      for (unsigned prec = 1; prec < 14; ++prec)
       {
-         for(unsigned i = 0; i < f.size(); ++i, ++col)
+         for (unsigned i = 0; i < f.size(); ++i, ++col)
          {
             std::stringstream ss;
             ss.precision(prec);
             ss.flags(f[i]);
             ss << mp_t(val);
             const char* expect = string_data[j][col];
-            if(ss.str() != expect)
+            if (ss.str() != expect)
             {
                std::cout << std::setprecision(20) << "Testing value " << val << std::endl;
                print_flags(f[i]);
@@ -103,26 +99,26 @@ void test()
          }
       }
       num = -num;
-      if(j & 1)
+      if (j & 1)
          denom *= 8;
       val = num / denom;
    }
 
-   boost::array<const char*, 13 * 9> zeros = 
-       {{ "0", "0.", "+0", "0.0e+00", "+0.0e+00", "0.0e+00", "0.0", "0.0", "+0.0", "0", "0.0", "+0", "0.00e+00", "+0.00e+00", "0.00e+00", "0.00", "0.00", "+0.00", "0", "0.00", "+0", "0.000e+00", "+0.000e+00", "0.000e+00", "0.000", "0.000", "+0.000", "0", "0.000", "+0", "0.0000e+00", "+0.0000e+00", "0.0000e+00", "0.0000", "0.0000", "+0.0000", "0", "0.0000", "+0", "0.00000e+00", "+0.00000e+00", "0.00000e+00", "0.00000", "0.00000", "+0.00000", "0", "0.00000", "+0", "0.000000e+00", "+0.000000e+00", "0.000000e+00", "0.000000", "0.000000", "+0.000000", "0", "0.000000", "+0", "0.0000000e+00", "+0.0000000e+00", "0.0000000e+00", "0.0000000", "0.0000000", "+0.0000000", "0", "0.0000000", "+0", "0.00000000e+00", "+0.00000000e+00", "0.00000000e+00", "0.00000000", "0.00000000", "+0.00000000", "0", "0.00000000", "+0", "0.000000000e+00", "+0.000000000e+00", "0.000000000e+00", "0.000000000", "0.000000000", "+0.000000000", "0", "0.000000000", "+0", "0.0000000000e+00", "+0.0000000000e+00", "0.0000000000e+00", "0.0000000000", "0.0000000000", "+0.0000000000", "0", "0.0000000000", "+0", "0.00000000000e+00", "+0.00000000000e+00", "0.00000000000e+00", "0.00000000000", "0.00000000000", "+0.00000000000", "0", "0.00000000000", "+0", "0.000000000000e+00", "+0.000000000000e+00", "0.000000000000e+00", "0.000000000000", "0.000000000000", "+0.000000000000", "0", "0.000000000000", "+0", "0.0000000000000e+00", "+0.0000000000000e+00", "0.0000000000000e+00", "0.0000000000000", "0.0000000000000", "+0.0000000000000"  }};
+   boost::array<const char*, 13 * 9> zeros =
+       {{"0", "0.", "+0", "0.0e+00", "+0.0e+00", "0.0e+00", "0.0", "0.0", "+0.0", "0", "0.0", "+0", "0.00e+00", "+0.00e+00", "0.00e+00", "0.00", "0.00", "+0.00", "0", "0.00", "+0", "0.000e+00", "+0.000e+00", "0.000e+00", "0.000", "0.000", "+0.000", "0", "0.000", "+0", "0.0000e+00", "+0.0000e+00", "0.0000e+00", "0.0000", "0.0000", "+0.0000", "0", "0.0000", "+0", "0.00000e+00", "+0.00000e+00", "0.00000e+00", "0.00000", "0.00000", "+0.00000", "0", "0.00000", "+0", "0.000000e+00", "+0.000000e+00", "0.000000e+00", "0.000000", "0.000000", "+0.000000", "0", "0.000000", "+0", "0.0000000e+00", "+0.0000000e+00", "0.0000000e+00", "0.0000000", "0.0000000", "+0.0000000", "0", "0.0000000", "+0", "0.00000000e+00", "+0.00000000e+00", "0.00000000e+00", "0.00000000", "0.00000000", "+0.00000000", "0", "0.00000000", "+0", "0.000000000e+00", "+0.000000000e+00", "0.000000000e+00", "0.000000000", "0.000000000", "+0.000000000", "0", "0.000000000", "+0", "0.0000000000e+00", "+0.0000000000e+00", "0.0000000000e+00", "0.0000000000", "0.0000000000", "+0.0000000000", "0", "0.0000000000", "+0", "0.00000000000e+00", "+0.00000000000e+00", "0.00000000000e+00", "0.00000000000", "0.00000000000", "+0.00000000000", "0", "0.00000000000", "+0", "0.000000000000e+00", "+0.000000000000e+00", "0.000000000000e+00", "0.000000000000", "0.000000000000", "+0.000000000000", "0", "0.000000000000", "+0", "0.0000000000000e+00", "+0.0000000000000e+00", "0.0000000000000e+00", "0.0000000000000", "0.0000000000000", "+0.0000000000000"}};
 
    unsigned col = 0;
-   val = 0;
-   for(unsigned prec = 1; prec < 14; ++prec)
+   val          = 0;
+   for (unsigned prec = 1; prec < 14; ++prec)
    {
-      for(unsigned i = 0; i < f.size(); ++i, ++col)
+      for (unsigned i = 0; i < f.size(); ++i, ++col)
       {
          std::stringstream ss;
          ss.precision(prec);
          ss.flags(f[i]);
          ss << mp_t(val);
          const char* expect = zeros[col];
-         if(ss.str() != expect)
+         if (ss.str() != expect)
          {
             std::cout << std::setprecision(20) << "Testing value " << val << std::endl;
             print_flags(f[i]);
@@ -135,7 +131,7 @@ void test()
       }
    }
 
-   if(std::numeric_limits<mp_t>::has_infinity)
+   if (std::numeric_limits<mp_t>::has_infinity)
    {
       T val = std::numeric_limits<T>::infinity();
       BOOST_CHECK_EQUAL(val.str(), "inf");
@@ -151,7 +147,7 @@ void test()
       val = static_cast<T>("-inf");
       BOOST_CHECK_EQUAL(val, -std::numeric_limits<T>::infinity());
    }
-   if(std::numeric_limits<mp_t>::has_quiet_NaN)
+   if (std::numeric_limits<mp_t>::has_quiet_NaN)
    {
       T val = std::numeric_limits<T>::quiet_NaN();
       BOOST_CHECK_EQUAL(val.str(), "nan");
@@ -173,10 +169,10 @@ template <class T>
 T generate_random()
 {
    typedef typename T::backend_type::exponent_type e_type;
-   static boost::random::mt19937 gen;
-   T val = gen();
-   T prev_val = -1;
-   while(val != prev_val)
+   static boost::random::mt19937                   gen;
+   T                                               val      = gen();
+   T                                               prev_val = -1;
+   while (val != prev_val)
    {
       val *= (gen.max)();
       prev_val = val;
@@ -211,16 +207,16 @@ void do_round_trip(const T& val)
 {
    do_round_trip(val, std::ios_base::fmtflags(0));
    do_round_trip(val, std::ios_base::fmtflags(std::ios_base::scientific));
-   if((fabs(val) > 1) && (fabs(val) < 1e100))
+   if ((fabs(val) > 1) && (fabs(val) < 1e100))
       do_round_trip(val, std::ios_base::fmtflags(std::ios_base::fixed));
 
    static int error_count = 0;
 
-   if(error_count != boost::detail::test_errors())
+   if (error_count != boost::detail::test_errors())
    {
       error_count = boost::detail::test_errors();
       std::cout << "Errors occured while testing value....";
-      if(val.backend().sign())
+      if (val.backend().sign())
          std::cout << "-";
       std::cout << boost::multiprecision::cpp_int(val.backend().bits()) << "e" << val.backend().exponent() << std::endl;
    }
@@ -237,26 +233,27 @@ void test_round_trip()
    stopwatch<boost::chrono::high_resolution_clock> w;
 
 #ifndef CI_SUPPRESS_KNOWN_ISSUES
-   while(boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() < 200)
+   while (boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() < 200)
 #else
-   while(boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() < 50)
+   while (boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() < 50)
 #endif
    {
       T val = generate_random<T>();
       do_round_trip(val);
       do_round_trip(T(-val));
-      do_round_trip(T(1/val));
-      do_round_trip(T(-1/val));
+      do_round_trip(T(1 / val));
+      do_round_trip(T(-1 / val));
 
-      if(boost::detail::test_errors() > 200) break; // escape if there are too many errors.
+      if (boost::detail::test_errors() > 200)
+         break; // escape if there are too many errors.
    }
 
    std::cout << "Execution time = " << boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() << "s" << std::endl;
 }
 
 #if !defined(TEST1) && !defined(TEST2)
-#  define TEST1
-#  define TEST2
+#define TEST1
+#define TEST2
 #endif
 
 int main()
@@ -272,4 +269,3 @@ int main()
 #endif
    return boost::report_errors();
 }
-