// Copyright 2010 Paul A. Bristow
//
// 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_0.txt)

/* Temporary test program to discover which platforms support

numeric_limits

digits10 and

new max_digits10.

This is needed to produce or select a macro to avoid compilation failure in Boost.Test
for platforms that do not include either or both of these.

BOOST_NO_CXX11_NUMERIC_LIMITS is tested here.

[Boost C++ Libraries]

#5758: Boost.Test Floating-point comparison diagnostic output does not support radix 10.

*/

#include <boost/config.hpp>
#include <boost/version.hpp>

#include <iostream>
#include <limits>

int main()
{
   std::cout  << "Platform: " << BOOST_PLATFORM            << '\n'
        << "Compiler: " << BOOST_COMPILER            << '\n'
        << "STL     : " << BOOST_STDLIB              << '\n'
        << "Boost   : " << BOOST_VERSION/100000      << "."
                        << BOOST_VERSION/100 % 1000  << "."
                        << BOOST_VERSION % 100       << std::endl;

   int digits10 = std::numeric_limits<double>::digits10;
   std::cout << "std::numeric_limits<double>::digits10 = " << digits10 << std::endl;

#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
   // OK to use C++11 max_digits10;
   int max_digits10 = std::numeric_limits<double>::max_digits10;
   std::cout << "std::numeric_limits<double>::max_digits10 = " << max_digits10 << std::endl;
#else
   // No support for max_digits10; so use Kahan formula instead.
   int max_digits10 = 2 + std::numeric_limits<double>::digits * 3010/10000;
   std::cout << "2 + std::numeric_limits<double>::digits * 3010/10000; = " <<
   2 + std::numeric_limits<double>::digits * 3010/10000;
#endif


} // int main()

/*

Output:

  Description: Autorun "J:\Cpp\MathToolkit\test\Math_test\Debug\ztest_max_digits10.exe"
  Platform: Win32
  Compiler: Microsoft Visual C++ version 10.0
  STL     : Dinkumware standard library version 520
  Boost   : 1.50.0
  std::numeric_limits<double>::digits10 = 15
  std::numeric_limits<double>::max_digits10 = 17

  1>  Description: Autorun "J:\Cpp\Misc\Debug\zztest_max_digits10.exe"
  1>  Platform: Win32
  1>  Compiler: Microsoft Visual C++ version 12.0
  1>  STL     : Dinkumware standard library version 610
  1>  Boost   : 1.55.0
  1>  std::numeric_limits<double>::digits10 = 15
  1>  std::numeric_limits<double>::max_digits10 = 17


*/