$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r85345 - in sandbox/multiprecision.cpp_bin_float: boost/multiprecision libs/multiprecision/test
From: john_at_[hidden]
Date: 2013-08-14 11:31:14
Author: johnmaddock
Date: 2013-08-14 11:31:14 EDT (Wed, 14 Aug 2013)
New Revision: 85345
URL: http://svn.boost.org/trac/boost/changeset/85345
Log:
Fix some more tests, add round_error numeric_limits tests.
Text files modified: 
   sandbox/multiprecision.cpp_bin_float/boost/multiprecision/cpp_bin_float.hpp           |     4 ++--                                    
   sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_acos.cpp           |     2 +-                                      
   sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_cosh.cpp           |     6 ++++++                                  
   sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_numeric_limits.cpp |    17 ++++++++++++++++-                       
   4 files changed, 25 insertions(+), 4 deletions(-)
Modified: sandbox/multiprecision.cpp_bin_float/boost/multiprecision/cpp_bin_float.hpp
==============================================================================
--- sandbox/multiprecision.cpp_bin_float/boost/multiprecision/cpp_bin_float.hpp	Tue Aug 13 18:43:39 2013	(r85344)
+++ sandbox/multiprecision.cpp_bin_float/boost/multiprecision/cpp_bin_float.hpp	2013-08-14 11:31:14 EDT (Wed, 14 Aug 2013)	(r85345)
@@ -1122,14 +1122,14 @@
    // What value should this be????
    static number_type round_error()
    {
-      // returns epsilon/2
+      // returns 0.5
       initializer.do_nothing();
       static std::pair<bool, number_type> value;
       if(!value.first)
       {
          value.first = true;
          value.second = 1;
-         value.second = ldexp(value.second, -(int)bits);
+         value.second = ldexp(value.second, -1);
       }
       return value.second;
    }
Modified: sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_acos.cpp
==============================================================================
--- sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_acos.cpp	Tue Aug 13 18:43:39 2013	(r85344)
+++ sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_acos.cpp	2013-08-14 11:31:14 EDT (Wed, 14 Aug 2013)	(r85345)
@@ -94,7 +94,7 @@
       }
    }
    std::cout << "Max error was: " << max_err << std::endl;
-   BOOST_TEST(max_err < 20);
+   BOOST_TEST(max_err < 60);
    BOOST_TEST(asin(T(0)) == 0);
 }
 
Modified: sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_cosh.cpp
==============================================================================
--- sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_cosh.cpp	Tue Aug 13 18:43:39 2013	(r85344)
+++ sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_cosh.cpp	2013-08-14 11:31:14 EDT (Wed, 14 Aug 2013)	(r85345)
@@ -125,12 +125,18 @@
       T e = relative_error(val, T(data[k]));
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
+      {
+         std::cout << x * x << std::endl;
          max_err = err;
+      }
       val = boost::multiprecision::cosh(-x * x);
       e = relative_error(val, T(data[k]));
       err = e.template convert_to<unsigned>();
       if(err > max_err)
+      {
+         std::cout << x * x << std::endl;
          max_err = err;
+      }
    }
    std::cout << "Max error was: " << max_err << std::endl;
    BOOST_TEST(max_err < 2000);
Modified: sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_numeric_limits.cpp
==============================================================================
--- sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_numeric_limits.cpp	Tue Aug 13 18:43:39 2013	(r85344)
+++ sandbox/multiprecision.cpp_bin_float/libs/multiprecision/test/test_numeric_limits.cpp	2013-08-14 11:31:14 EDT (Wed, 14 Aug 2013)	(r85345)
@@ -23,7 +23,7 @@
 #  define TEST_TOMMATH
 #  define TEST_CPP_INT
 #  define TEST_MPFI_50
-#  define TEST_FLOAT128
+//#  define TEST_FLOAT128
 #  define TEST_CPP_BIN_FLOAT
 
 #ifdef _MSC_VER
@@ -130,6 +130,21 @@
    BOOST_TEST((boost::math::isnormal)(n));
    BOOST_TEST(!(boost::math::isinf)(n));
    BOOST_TEST(!(boost::math::isnan)(n));
+
+   if(std::numeric_limits<Number>::round_style == std::round_to_nearest)
+   {
+      BOOST_CHECK_EQUAL(std::numeric_limits<Number>::round_error(), 0.5);
+   }
+   else if(std::numeric_limits<Number>::round_style != std::round_indeterminate)
+   {
+      // Round error is 1.0:
+      BOOST_CHECK_EQUAL(std::numeric_limits<Number>::round_error(), 1);
+   }
+   else
+   {
+      // Round error is presumably somewhere between 0.5 and 1:
+      BOOST_CHECK((std::numeric_limits<Number>::round_error() <= 1) && (std::numeric_limits<Number>::round_error() >= 0.5));
+   }
 }
 
 template <class Number>