//  (C) Copyright John Maddock 2006-7.
//  Use, modification and distribution are subject to 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)


#ifndef BOOST_MATH_TEST_RATIONAL_HPP
#define BOOST_MATH_TEST_RATIONAL_HPP

#include <array>
#include <boost/test/tools/floating_point_comparison.hpp>
#include <boost/test/unit_test.hpp>
#include <boost/math/tools/rational.hpp>
#include <boost/math/tools/precision.hpp>

template <class T, class U>
void do_test_spots1(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Everything past this point is generated by the program
   // ../tools/generate_rational_test.cpp
   //

   //
   // Polynomials of order 0
   //
   static const U n1c[1] = { 2 };
   static const std::array<U, 1> n1a = {{ 2 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.125), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.25), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.75), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(6.5), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(10247.25), 1),
      static_cast<T>(0.2e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.125)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.25)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(0.75)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(6.5)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1c, static_cast<T>(10247.25)),
      static_cast<T>(0.2e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(0.125)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(0.25)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(0.75)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(6.5)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n1a, static_cast<T>(10247.25)),
      static_cast<T>(0.2e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.125), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.25), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.75), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(6.5f), 1),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(10247.25f), 1),
      static_cast<T>(0.2e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.125)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.25)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(0.75)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(6.5f)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1c, static_cast<T>(10247.25f)),
      static_cast<T>(0.2e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(0.125)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(0.25)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(0.75)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(6.5f)),
      static_cast<T>(0.2e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n1a, static_cast<T>(10247.25f)),
      static_cast<T>(0.2e1L),
      tolerance);

   //
   // Rational functions of order 0
   //
   static const U d1c[1] = { 3 };
   static const std::array<U, 1> d1a = {{ 3 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.125), 1),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.25), 1),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.75), 1),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(1.0f - 1.0f/64.0f), 1),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(6.5f), 1),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(10247.25f), 1),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.125)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.25)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(0.75)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(6.5f)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1c, d1c, static_cast<T>(10247.25f)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(0.125)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(0.25)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(0.75)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(6.5f)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n1a, d1a, static_cast<T>(10247.25f)),
      static_cast<T>(0.6666666666666666666666666666666666666667e0L),
      tolerance);

   //
   // Polynomials of order 1
   //
   static const U n2c[2] = { 3, 1 };
   static const std::array<U, 2> n2a = {{ 3, 1 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.125), 2),
      static_cast<T>(0.3125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.25), 2),
      static_cast<T>(0.325e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.75), 2),
      static_cast<T>(0.375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f), 2),
      static_cast<T>(0.3984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(6.5), 2),
      static_cast<T>(0.95e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(10247.25), 2),
      static_cast<T>(0.1025025e5L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.125)),
      static_cast<T>(0.3125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.25)),
      static_cast<T>(0.325e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(0.75)),
      static_cast<T>(0.375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(6.5)),
      static_cast<T>(0.95e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2c, static_cast<T>(10247.25)),
      static_cast<T>(0.1025025e5L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(0.125)),
      static_cast<T>(0.3125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(0.25)),
      static_cast<T>(0.325e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(0.75)),
      static_cast<T>(0.375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(6.5)),
      static_cast<T>(0.95e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n2a, static_cast<T>(10247.25)),
      static_cast<T>(0.1025025e5L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(0.125), 2),
      static_cast<T>(0.3015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(0.25), 2),
      static_cast<T>(0.30625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(0.75), 2),
      static_cast<T>(0.35625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f), 2),
      static_cast<T>(0.3968994140625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(6.5f), 2),
      static_cast<T>(0.4525e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(10247.25f), 2),
      static_cast<T>(0.1050061355625e9L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(0.125)),
      static_cast<T>(0.3015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(0.25)),
      static_cast<T>(0.30625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(0.75)),
      static_cast<T>(0.35625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3968994140625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(6.5f)),
      static_cast<T>(0.4525e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1050061355625e9L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2a, static_cast<T>(0.125)),
      static_cast<T>(0.3015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2a, static_cast<T>(0.25)),
      static_cast<T>(0.30625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2a, static_cast<T>(0.75)),
      static_cast<T>(0.35625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3968994140625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2a, static_cast<T>(6.5f)),
      static_cast<T>(0.4525e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n2a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1050061355625e9L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(0.125), 2),
      static_cast<T>(0.3125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(0.25), 2),
      static_cast<T>(0.325e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(0.75), 2),
      static_cast<T>(0.375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f), 2),
      static_cast<T>(0.3984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(6.5f), 2),
      static_cast<T>(0.95e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(10247.25f), 2),
      static_cast<T>(0.1025025e5L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(0.125)),
      static_cast<T>(0.3125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(0.25)),
      static_cast<T>(0.325e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(0.75)),
      static_cast<T>(0.375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(6.5f)),
      static_cast<T>(0.95e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1025025e5L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2a, static_cast<T>(0.125)),
      static_cast<T>(0.3125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2a, static_cast<T>(0.25)),
      static_cast<T>(0.325e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2a, static_cast<T>(0.75)),
      static_cast<T>(0.375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2a, static_cast<T>(6.5f)),
      static_cast<T>(0.95e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n2a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1025025e5L),
      tolerance);

   //
   // Rational functions of order 1
   //
   static const U d2c[2] = { 5, 9 };
   static const std::array<U, 2> d2a = {{ 5, 9 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(0.125), 2),
      static_cast<T>(0.5102040816326530612244897959183673469388e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(0.25), 2),
      static_cast<T>(0.4482758620689655172413793103448275862069e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(0.75), 2),
      static_cast<T>(0.3191489361702127659574468085106382978723e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(1.0f - 1.0f/64.0f), 2),
      static_cast<T>(0.2874859075535512965050732807215332581736e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(6.5f), 2),
      static_cast<T>(0.1496062992125984251968503937007874015748e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(10247.25f), 2),
      static_cast<T>(0.1111376148281068304596377002122405609873e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(0.125)),
      static_cast<T>(0.5102040816326530612244897959183673469388e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(0.25)),
      static_cast<T>(0.4482758620689655172413793103448275862069e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(0.75)),
      static_cast<T>(0.3191489361702127659574468085106382978723e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.2874859075535512965050732807215332581736e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(6.5f)),
      static_cast<T>(0.1496062992125984251968503937007874015748e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2c, d2c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1111376148281068304596377002122405609873e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2a, d2a, static_cast<T>(0.125)),
      static_cast<T>(0.5102040816326530612244897959183673469388e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2a, d2a, static_cast<T>(0.25)),
      static_cast<T>(0.4482758620689655172413793103448275862069e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2a, d2a, static_cast<T>(0.75)),
      static_cast<T>(0.3191489361702127659574468085106382978723e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2a, d2a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.2874859075535512965050732807215332581736e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2a, d2a, static_cast<T>(6.5f)),
      static_cast<T>(0.1496062992125984251968503937007874015748e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n2a, d2a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1111376148281068304596377002122405609873e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots2(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 2
   //
   static const U n3c[3] = { 10, 6, 11 };
   static const std::array<U, 3> n3a = {{ 10, 6, 11 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(0.125), 3),
      static_cast<T>(0.10921875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(0.25), 3),
      static_cast<T>(0.121875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(0.75), 3),
      static_cast<T>(0.206875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(1.0f - 1.0f/64.0f), 3),
      static_cast<T>(0.26565185546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(6.5), 3),
      static_cast<T>(0.51375e3L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(10247.25), 3),
      static_cast<T>(0.11551289516875e10L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(0.125)),
      static_cast<T>(0.10921875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(0.25)),
      static_cast<T>(0.121875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(0.75)),
      static_cast<T>(0.206875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.26565185546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(6.5)),
      static_cast<T>(0.51375e3L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3c, static_cast<T>(10247.25)),
      static_cast<T>(0.11551289516875e10L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3a, static_cast<T>(0.125)),
      static_cast<T>(0.10921875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3a, static_cast<T>(0.25)),
      static_cast<T>(0.121875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3a, static_cast<T>(0.75)),
      static_cast<T>(0.206875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.26565185546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3a, static_cast<T>(6.5)),
      static_cast<T>(0.51375e3L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n3a, static_cast<T>(10247.25)),
      static_cast<T>(0.11551289516875e10L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(0.125), 3),
      static_cast<T>(0.10096435546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(0.25), 3),
      static_cast<T>(0.1041796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(0.75), 3),
      static_cast<T>(0.1685546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(1.0f - 1.0f/64.0f), 3),
      static_cast<T>(0.26142410933971405029296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(6.5f), 3),
      static_cast<T>(0.198991875e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(10247.25f), 3),
      static_cast<T>(0.12128916726310335635546875e18L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(0.125)),
      static_cast<T>(0.10096435546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(0.25)),
      static_cast<T>(0.1041796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(0.75)),
      static_cast<T>(0.1685546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.26142410933971405029296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(6.5f)),
      static_cast<T>(0.198991875e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3c, static_cast<T>(10247.25f)),
      static_cast<T>(0.12128916726310335635546875e18L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3a, static_cast<T>(0.125)),
      static_cast<T>(0.10096435546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3a, static_cast<T>(0.25)),
      static_cast<T>(0.1041796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3a, static_cast<T>(0.75)),
      static_cast<T>(0.1685546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.26142410933971405029296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3a, static_cast<T>(6.5f)),
      static_cast<T>(0.198991875e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n3a, static_cast<T>(10247.25f)),
      static_cast<T>(0.12128916726310335635546875e18L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(0.125), 3),
      static_cast<T>(0.10771484375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(0.25), 3),
      static_cast<T>(0.11671875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(0.75), 3),
      static_cast<T>(0.19140625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(1.0f - 1.0f/64.0f), 3),
      static_cast<T>(0.26398639678955078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(6.5f), 3),
      static_cast<T>(0.3069875e4L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(10247.25f), 3),
      static_cast<T>(0.11836265072405359375e14L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(0.125)),
      static_cast<T>(0.10771484375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(0.25)),
      static_cast<T>(0.11671875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(0.75)),
      static_cast<T>(0.19140625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.26398639678955078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(6.5f)),
      static_cast<T>(0.3069875e4L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3c, static_cast<T>(10247.25f)),
      static_cast<T>(0.11836265072405359375e14L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3a, static_cast<T>(0.125)),
      static_cast<T>(0.10771484375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3a, static_cast<T>(0.25)),
      static_cast<T>(0.11671875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3a, static_cast<T>(0.75)),
      static_cast<T>(0.19140625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.26398639678955078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3a, static_cast<T>(6.5f)),
      static_cast<T>(0.3069875e4L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n3a, static_cast<T>(10247.25f)),
      static_cast<T>(0.11836265072405359375e14L),
      tolerance);

   //
   // Rational functions of order 2
   //
   static const U d3c[3] = { 3, 4, 10 };
   static const std::array<U, 3> d3a = {{ 3, 4, 10 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(0.125), 3),
      static_cast<T>(0.2987179487179487179487179487179487179487e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(0.25), 3),
      static_cast<T>(0.2635135135135135135135135135135135135135e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(0.75), 3),
      static_cast<T>(0.1779569892473118279569892473118279569892e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(1.0f - 1.0f/64.0f), 3),
      static_cast<T>(0.1597671277126831703520981998649164537633e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(6.5f), 3),
      static_cast<T>(0.1137873754152823920265780730897009966777e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(10247.25f), 3),
      static_cast<T>(0.1100015619716026431429617996316152069115e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(0.125)),
      static_cast<T>(0.2987179487179487179487179487179487179487e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(0.25)),
      static_cast<T>(0.2635135135135135135135135135135135135135e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(0.75)),
      static_cast<T>(0.1779569892473118279569892473118279569892e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1597671277126831703520981998649164537633e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(6.5f)),
      static_cast<T>(0.1137873754152823920265780730897009966777e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3c, d3c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1100015619716026431429617996316152069115e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3a, d3a, static_cast<T>(0.125)),
      static_cast<T>(0.2987179487179487179487179487179487179487e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3a, d3a, static_cast<T>(0.25)),
      static_cast<T>(0.2635135135135135135135135135135135135135e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3a, d3a, static_cast<T>(0.75)),
      static_cast<T>(0.1779569892473118279569892473118279569892e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3a, d3a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1597671277126831703520981998649164537633e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3a, d3a, static_cast<T>(6.5f)),
      static_cast<T>(0.1137873754152823920265780730897009966777e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n3a, d3a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1100015619716026431429617996316152069115e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots3(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 3
   //
   static const U n4c[4] = { 1, 4, 9, 11 };
   static const std::array<U, 4> n4a = {{ 1, 4, 9, 11 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(0.125), 4),
      static_cast<T>(0.1662109375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(0.25), 4),
      static_cast<T>(0.2734375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(0.75), 4),
      static_cast<T>(0.13703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(1.0f - 1.0f/64.0f), 4),
      static_cast<T>(0.24150836944580078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(6.5), 4),
      static_cast<T>(0.3428125e4L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(10247.25), 4),
      static_cast<T>(0.11837210107094921875e14L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(0.125)),
      static_cast<T>(0.1662109375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(0.25)),
      static_cast<T>(0.2734375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(0.75)),
      static_cast<T>(0.13703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.24150836944580078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(6.5)),
      static_cast<T>(0.3428125e4L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4c, static_cast<T>(10247.25)),
      static_cast<T>(0.11837210107094921875e14L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4a, static_cast<T>(0.125)),
      static_cast<T>(0.1662109375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4a, static_cast<T>(0.25)),
      static_cast<T>(0.2734375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4a, static_cast<T>(0.75)),
      static_cast<T>(0.13703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.24150836944580078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4a, static_cast<T>(6.5)),
      static_cast<T>(0.3428125e4L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n4a, static_cast<T>(10247.25)),
      static_cast<T>(0.11837210107094921875e14L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(0.125), 4),
      static_cast<T>(0.1064739227294921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(0.25), 4),
      static_cast<T>(0.1287841796875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(0.75), 4),
      static_cast<T>(0.8055419921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(1.0f - 1.0f/64.0f), 4),
      static_cast<T>(0.23334727106775972060859203338623046875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(6.5f), 4),
      static_cast<T>(0.845843359375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(10247.25f), 4),
      static_cast<T>(0.12736106409103529349764202508544921875e26L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(0.125)),
      static_cast<T>(0.1064739227294921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(0.25)),
      static_cast<T>(0.1287841796875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(0.75)),
      static_cast<T>(0.8055419921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.23334727106775972060859203338623046875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(6.5f)),
      static_cast<T>(0.845843359375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4c, static_cast<T>(10247.25f)),
      static_cast<T>(0.12736106409103529349764202508544921875e26L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4a, static_cast<T>(0.125)),
      static_cast<T>(0.1064739227294921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4a, static_cast<T>(0.25)),
      static_cast<T>(0.1287841796875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4a, static_cast<T>(0.75)),
      static_cast<T>(0.8055419921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.23334727106775972060859203338623046875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4a, static_cast<T>(6.5f)),
      static_cast<T>(0.845843359375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n4a, static_cast<T>(10247.25f)),
      static_cast<T>(0.12736106409103529349764202508544921875e26L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(0.125), 4),
      static_cast<T>(0.1517913818359375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(0.25), 4),
      static_cast<T>(0.21513671875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(0.75), 4),
      static_cast<T>(0.104072265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(1.0f - 1.0f/64.0f), 4),
      static_cast<T>(0.23689246584661304950714111328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(6.5f), 4),
      static_cast<T>(0.13013059375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(10247.25f), 4),
      static_cast<T>(0.12428804224649080826343115234375e22L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(0.125)),
      static_cast<T>(0.1517913818359375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(0.25)),
      static_cast<T>(0.21513671875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(0.75)),
      static_cast<T>(0.104072265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.23689246584661304950714111328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(6.5f)),
      static_cast<T>(0.13013059375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4c, static_cast<T>(10247.25f)),
      static_cast<T>(0.12428804224649080826343115234375e22L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4a, static_cast<T>(0.125)),
      static_cast<T>(0.1517913818359375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4a, static_cast<T>(0.25)),
      static_cast<T>(0.21513671875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4a, static_cast<T>(0.75)),
      static_cast<T>(0.104072265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.23689246584661304950714111328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4a, static_cast<T>(6.5f)),
      static_cast<T>(0.13013059375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n4a, static_cast<T>(10247.25f)),
      static_cast<T>(0.12428804224649080826343115234375e22L),
      tolerance);

   //
   // Rational functions of order 3
   //
   static const U d4c[4] = { 10, 2, 5, 4 };
   static const std::array<U, 4> d4a = {{ 10, 2, 5, 4 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(0.125), 4),
      static_cast<T>(0.1608087679516250944822373393801965230537e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(0.25), 4),
      static_cast<T>(0.2514367816091954022988505747126436781609e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(0.75), 4),
      static_cast<T>(0.8564453125e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(1.0f - 1.0f/64.0f), 4),
      static_cast<T>(0.1170714951947222939292918160495461743806e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(6.5f), 4),
      static_cast<T>(0.2572219095854436315888201087975989495404e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(10247.25f), 4),
      static_cast<T>(0.2749884125808399380227005558292823797886e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(0.125)),
      static_cast<T>(0.1608087679516250944822373393801965230537e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(0.25)),
      static_cast<T>(0.2514367816091954022988505747126436781609e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(0.75)),
      static_cast<T>(0.8564453125e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1170714951947222939292918160495461743806e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(6.5f)),
      static_cast<T>(0.2572219095854436315888201087975989495404e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4c, d4c, static_cast<T>(10247.25f)),
      static_cast<T>(0.2749884125808399380227005558292823797886e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4a, d4a, static_cast<T>(0.125)),
      static_cast<T>(0.1608087679516250944822373393801965230537e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4a, d4a, static_cast<T>(0.25)),
      static_cast<T>(0.2514367816091954022988505747126436781609e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4a, d4a, static_cast<T>(0.75)),
      static_cast<T>(0.8564453125e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4a, d4a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1170714951947222939292918160495461743806e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4a, d4a, static_cast<T>(6.5f)),
      static_cast<T>(0.2572219095854436315888201087975989495404e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n4a, d4a, static_cast<T>(10247.25f)),
      static_cast<T>(0.2749884125808399380227005558292823797886e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots4(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 4
   //
   static const U n5c[5] = { 10, 10, 4, 11, 9 };
   static const std::array<U, 5> n5a = {{ 10, 10, 4, 11, 9 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(0.125), 5),
      static_cast<T>(0.11336181640625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(0.25), 5),
      static_cast<T>(0.1295703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(0.75), 5),
      static_cast<T>(0.2723828125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(1.0f - 1.0f/64.0f), 5),
      static_cast<T>(0.42662663042545318603515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(6.5), 5),
      static_cast<T>(0.193304375e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(10247.25), 5),
      static_cast<T>(0.9924842756673782995703125e17L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(0.125)),
      static_cast<T>(0.11336181640625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(0.25)),
      static_cast<T>(0.1295703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(0.75)),
      static_cast<T>(0.2723828125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.42662663042545318603515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(6.5)),
      static_cast<T>(0.193304375e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5c, static_cast<T>(10247.25)),
      static_cast<T>(0.9924842756673782995703125e17L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5a, static_cast<T>(0.125)),
      static_cast<T>(0.11336181640625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5a, static_cast<T>(0.25)),
      static_cast<T>(0.1295703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5a, static_cast<T>(0.75)),
      static_cast<T>(0.2723828125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.42662663042545318603515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5a, static_cast<T>(6.5)),
      static_cast<T>(0.193304375e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n5a, static_cast<T>(10247.25)),
      static_cast<T>(0.9924842756673782995703125e17L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(0.125), 5),
      static_cast<T>(0.10157269060611724853515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(0.25), 5),
      static_cast<T>(0.106434478759765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(0.75), 5),
      static_cast<T>(0.197494049072265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(1.0f - 1.0f/64.0f), 5),
      static_cast<T>(0.4138858164296656028113829961512237787247e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(6.5f), 5),
      static_cast<T>(0.2951521370703125e8L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(10247.25f), 5),
      static_cast<T>(0.1094211231602999407223950000397888253311e34L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(0.125)),
      static_cast<T>(0.10157269060611724853515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(0.25)),
      static_cast<T>(0.106434478759765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(0.75)),
      static_cast<T>(0.197494049072265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4138858164296656028113829961512237787247e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(6.5f)),
      static_cast<T>(0.2951521370703125e8L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1094211231602999407223950000397888253311e34L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5a, static_cast<T>(0.125)),
      static_cast<T>(0.10157269060611724853515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5a, static_cast<T>(0.25)),
      static_cast<T>(0.106434478759765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5a, static_cast<T>(0.75)),
      static_cast<T>(0.197494049072265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4138858164296656028113829961512237787247e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5a, static_cast<T>(6.5f)),
      static_cast<T>(0.2951521370703125e8L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n5a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1094211231602999407223950000397888253311e34L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(0.125), 5),
      static_cast<T>(0.11258152484893798828125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(0.25), 5),
      static_cast<T>(0.1257379150390625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(0.75), 5),
      static_cast<T>(0.2299920654296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(1.0f - 1.0f/64.0f), 5),
      static_cast<T>(0.4188681309761682314274366945028305053711e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(6.5f), 5),
      static_cast<T>(0.45408105703125e7L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(10247.25f), 5),
      static_cast<T>(0.106780963829612765105169679718983215332e30L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(0.125)),
      static_cast<T>(0.11258152484893798828125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(0.25)),
      static_cast<T>(0.1257379150390625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(0.75)),
      static_cast<T>(0.2299920654296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4188681309761682314274366945028305053711e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(6.5f)),
      static_cast<T>(0.45408105703125e7L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5c, static_cast<T>(10247.25f)),
      static_cast<T>(0.106780963829612765105169679718983215332e30L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5a, static_cast<T>(0.125)),
      static_cast<T>(0.11258152484893798828125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5a, static_cast<T>(0.25)),
      static_cast<T>(0.1257379150390625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5a, static_cast<T>(0.75)),
      static_cast<T>(0.2299920654296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4188681309761682314274366945028305053711e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5a, static_cast<T>(6.5f)),
      static_cast<T>(0.45408105703125e7L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n5a, static_cast<T>(10247.25f)),
      static_cast<T>(0.106780963829612765105169679718983215332e30L),
      tolerance);

   //
   // Rational functions of order 4
   //
   static const U d5c[5] = { 6, 9, 6, 2, 5 };
   static const std::array<U, 5> d5a = {{ 6, 9, 6, 2, 5 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(0.125), 5),
      static_cast<T>(0.1569265605461489066882963263374902835513e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(0.25), 5),
      static_cast<T>(0.1493471409275101305718144979738856371004e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(0.75), 5),
      static_cast<T>(0.1468309117708991366603495472731101284481e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(1.0f - 1.0f/64.0f), 5),
      static_cast<T>(0.1564121691159921277310988862398683772017e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(6.5f), 5),
      static_cast<T>(0.1973991741181125982091000185089449263153e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(10247.25f), 5),
      static_cast<T>(0.1800144410401676792233921448870747965702e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(0.125)),
      static_cast<T>(0.1569265605461489066882963263374902835513e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(0.25)),
      static_cast<T>(0.1493471409275101305718144979738856371004e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(0.75)),
      static_cast<T>(0.1468309117708991366603495472731101284481e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1564121691159921277310988862398683772017e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(6.5f)),
      static_cast<T>(0.1973991741181125982091000185089449263153e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5c, d5c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1800144410401676792233921448870747965702e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5a, d5a, static_cast<T>(0.125)),
      static_cast<T>(0.1569265605461489066882963263374902835513e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5a, d5a, static_cast<T>(0.25)),
      static_cast<T>(0.1493471409275101305718144979738856371004e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5a, d5a, static_cast<T>(0.75)),
      static_cast<T>(0.1468309117708991366603495472731101284481e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5a, d5a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1564121691159921277310988862398683772017e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5a, d5a, static_cast<T>(6.5f)),
      static_cast<T>(0.1973991741181125982091000185089449263153e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n5a, d5a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1800144410401676792233921448870747965702e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots5(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 5
   //
   static const U n6c[6] = { 6, 8, 12, 5, 7, 5 };
   static const std::array<U, 6> n6a = {{ 6, 8, 12, 5, 7, 5 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(0.125), 6),
      static_cast<T>(0.7199127197265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(0.25), 6),
      static_cast<T>(0.88603515625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(0.75), 6),
      static_cast<T>(0.242607421875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(1.0f - 1.0f/64.0f), 6),
      static_cast<T>(0.41466238017193973064422607421875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(6.5), 6),
      static_cast<T>(0.7244809375e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(10247.25), 6),
      static_cast<T>(0.5650228315695522094919501953125e21L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(0.125)),
      static_cast<T>(0.7199127197265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(0.25)),
      static_cast<T>(0.88603515625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(0.75)),
      static_cast<T>(0.242607421875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.41466238017193973064422607421875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(6.5)),
      static_cast<T>(0.7244809375e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6c, static_cast<T>(10247.25)),
      static_cast<T>(0.5650228315695522094919501953125e21L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6a, static_cast<T>(0.125)),
      static_cast<T>(0.7199127197265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6a, static_cast<T>(0.25)),
      static_cast<T>(0.88603515625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6a, static_cast<T>(0.75)),
      static_cast<T>(0.242607421875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.41466238017193973064422607421875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6a, static_cast<T>(6.5)),
      static_cast<T>(0.7244809375e5L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n6a, static_cast<T>(10247.25)),
      static_cast<T>(0.5650228315695522094919501953125e21L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(0.125), 6),
      static_cast<T>(0.6127949182875454425811767578125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(0.25), 6),
      static_cast<T>(0.654820728302001953125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(0.75), 6),
      static_cast<T>(0.1616912555694580078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(1.0f - 1.0f/64.0f), 6),
      static_cast<T>(0.4001137167344577683526091194110563264985e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(6.5f), 6),
      static_cast<T>(0.6958411633369140625e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(0.125)),
      static_cast<T>(0.6127949182875454425811767578125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(0.25)),
      static_cast<T>(0.654820728302001953125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(0.75)),
      static_cast<T>(0.1616912555694580078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4001137167344577683526091194110563264985e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6c, static_cast<T>(6.5f)),
      static_cast<T>(0.6958411633369140625e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6a, static_cast<T>(0.125)),
      static_cast<T>(0.6127949182875454425811767578125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6a, static_cast<T>(0.25)),
      static_cast<T>(0.654820728302001953125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6a, static_cast<T>(0.75)),
      static_cast<T>(0.1616912555694580078125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4001137167344577683526091194110563264985e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n6a, static_cast<T>(6.5f)),
      static_cast<T>(0.6958411633369140625e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(0.125), 6),
      static_cast<T>(0.7023593463003635406494140625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(0.25), 6),
      static_cast<T>(0.8192829132080078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(0.75), 6),
      static_cast<T>(0.19558834075927734375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(1.0f - 1.0f/64.0f), 6),
      static_cast<T>(0.4055123471588142408661425974969461094588e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(6.5f), 6),
      static_cast<T>(0.107052491744140625e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(10247.25f), 6),
      static_cast<T>(0.6229253367792843599034768117351560896265e37L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(0.125)),
      static_cast<T>(0.7023593463003635406494140625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(0.25)),
      static_cast<T>(0.8192829132080078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(0.75)),
      static_cast<T>(0.19558834075927734375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4055123471588142408661425974969461094588e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(6.5f)),
      static_cast<T>(0.107052491744140625e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6c, static_cast<T>(10247.25f)),
      static_cast<T>(0.6229253367792843599034768117351560896265e37L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6a, static_cast<T>(0.125)),
      static_cast<T>(0.7023593463003635406494140625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6a, static_cast<T>(0.25)),
      static_cast<T>(0.8192829132080078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6a, static_cast<T>(0.75)),
      static_cast<T>(0.19558834075927734375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4055123471588142408661425974969461094588e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6a, static_cast<T>(6.5f)),
      static_cast<T>(0.107052491744140625e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n6a, static_cast<T>(10247.25f)),
      static_cast<T>(0.6229253367792843599034768117351560896265e37L),
      tolerance);

   //
   // Rational functions of order 5
   //
   static const U d6c[6] = { 5, 11, 7, 12, 10, 5 };
   static const std::array<U, 6> d6a = {{ 5, 11, 7, 12, 10, 5 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(0.125), 6),
      static_cast<T>(0.1105787665293227020667219792530925829572e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(0.25), 6),
      static_cast<T>(0.1052430112515949425820670455863588910799e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(0.75), 6),
      static_cast<T>(0.9120378868534087154447666948125848966555e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(1.0f - 1.0f/64.0f), 6),
      static_cast<T>(0.8626539746676637108178973543021882567334e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(6.5f), 6),
      static_cast<T>(0.9109197333022141385660730837432462113756e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(10247.25f), 6),
      static_cast<T>(0.9999414458034701919327379302959430043671e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(0.125)),
      static_cast<T>(0.1105787665293227020667219792530925829572e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(0.25)),
      static_cast<T>(0.1052430112515949425820670455863588910799e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(0.75)),
      static_cast<T>(0.9120378868534087154447666948125848966555e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8626539746676637108178973543021882567334e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(6.5f)),
      static_cast<T>(0.9109197333022141385660730837432462113756e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6c, d6c, static_cast<T>(10247.25f)),
      static_cast<T>(0.9999414458034701919327379302959430043671e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6a, d6a, static_cast<T>(0.125)),
      static_cast<T>(0.1105787665293227020667219792530925829572e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6a, d6a, static_cast<T>(0.25)),
      static_cast<T>(0.1052430112515949425820670455863588910799e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6a, d6a, static_cast<T>(0.75)),
      static_cast<T>(0.9120378868534087154447666948125848966555e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6a, d6a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8626539746676637108178973543021882567334e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6a, d6a, static_cast<T>(6.5f)),
      static_cast<T>(0.9109197333022141385660730837432462113756e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n6a, d6a, static_cast<T>(10247.25f)),
      static_cast<T>(0.9999414458034701919327379302959430043671e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots6(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 6
   //
   static const U n7c[7] = { 3, 4, 11, 5, 10, 7, 9 };
   static const std::array<U, 7> n7a = {{ 3, 4, 11, 5, 10, 7, 9 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(0.125), 7),
      static_cast<T>(0.3684329986572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(0.25), 7),
      static_cast<T>(0.4813720703125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(0.75), 7),
      static_cast<T>(0.20723876953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(1.0f - 1.0f/64.0f), 7),
      static_cast<T>(0.46413680258337990380823612213134765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(6.5), 7),
      static_cast<T>(0.779707859375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(10247.25), 7),
      static_cast<T>(0.10421241651331160693970241510986328125e26L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(0.125)),
      static_cast<T>(0.3684329986572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(0.25)),
      static_cast<T>(0.4813720703125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(0.75)),
      static_cast<T>(0.20723876953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.46413680258337990380823612213134765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(6.5)),
      static_cast<T>(0.779707859375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7c, static_cast<T>(10247.25)),
      static_cast<T>(0.10421241651331160693970241510986328125e26L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7a, static_cast<T>(0.125)),
      static_cast<T>(0.3684329986572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7a, static_cast<T>(0.25)),
      static_cast<T>(0.4813720703125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7a, static_cast<T>(0.75)),
      static_cast<T>(0.20723876953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.46413680258337990380823612213134765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7a, static_cast<T>(6.5)),
      static_cast<T>(0.779707859375e6L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n7a, static_cast<T>(10247.25)),
      static_cast<T>(0.10421241651331160693970241510986328125e26L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(0.125), 7),
      static_cast<T>(0.3065205223058001138269901275634765625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(0.25), 7),
      static_cast<T>(0.3294349253177642822265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(0.75), 7),
      static_cast<T>(0.11300772249698638916015625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(1.0f - 1.0f/64.0f), 7),
      static_cast<T>(0.4400013192129567626077980251194602528964e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(6.5f), 7),
      static_cast<T>(0.52166734985505126953125e11L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(0.125)),
      static_cast<T>(0.3065205223058001138269901275634765625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(0.25)),
      static_cast<T>(0.3294349253177642822265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(0.75)),
      static_cast<T>(0.11300772249698638916015625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4400013192129567626077980251194602528964e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7c, static_cast<T>(6.5f)),
      static_cast<T>(0.52166734985505126953125e11L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7a, static_cast<T>(0.125)),
      static_cast<T>(0.3065205223058001138269901275634765625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7a, static_cast<T>(0.25)),
      static_cast<T>(0.3294349253177642822265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7a, static_cast<T>(0.75)),
      static_cast<T>(0.11300772249698638916015625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4400013192129567626077980251194602528964e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n7a, static_cast<T>(6.5f)),
      static_cast<T>(0.52166734985505126953125e11L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(0.125), 7),
      static_cast<T>(0.3521641784464009106159210205078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(0.25), 7),
      static_cast<T>(0.41773970127105712890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(0.75), 7),
      static_cast<T>(0.140676963329315185546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(1.0f - 1.0f/64.0f), 7),
      static_cast<T>(0.4465092766607814731253821207562770823074e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(6.5f), 7),
      static_cast<T>(0.802565153877001953125e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(0.125)),
      static_cast<T>(0.3521641784464009106159210205078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(0.25)),
      static_cast<T>(0.41773970127105712890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(0.75)),
      static_cast<T>(0.140676963329315185546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4465092766607814731253821207562770823074e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7c, static_cast<T>(6.5f)),
      static_cast<T>(0.802565153877001953125e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7a, static_cast<T>(0.125)),
      static_cast<T>(0.3521641784464009106159210205078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7a, static_cast<T>(0.25)),
      static_cast<T>(0.41773970127105712890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7a, static_cast<T>(0.75)),
      static_cast<T>(0.140676963329315185546875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4465092766607814731253821207562770823074e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n7a, static_cast<T>(6.5f)),
      static_cast<T>(0.802565153877001953125e10L),
      tolerance);
   //
   // Rational functions of order 6
   //
   static const U d7c[7] = { 2, 8, 10, 8, 1, 11, 1 };
   static const std::array<U, 7> d7a = {{ 2, 8, 10, 8, 1, 11, 1 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(0.125), 7),
      static_cast<T>(0.1161348466465698540596242849979738853664e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(0.25), 7),
      static_cast<T>(0.1010247476558897371522262642824204539632e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(0.75), 7),
      static_cast<T>(0.103079575951134804308491906398377636644e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(1.0f - 1.0f/64.0f), 7),
      static_cast<T>(0.1183671559390403425417413542214181025989e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(6.5f), 7),
      static_cast<T>(0.3757457624476840396478985178609736319955e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(10247.25f), 7),
      static_cast<T>(0.8991031618241406513349732955332873069556e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(0.125)),
      static_cast<T>(0.1161348466465698540596242849979738853664e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(0.25)),
      static_cast<T>(0.1010247476558897371522262642824204539632e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(0.75)),
      static_cast<T>(0.103079575951134804308491906398377636644e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1183671559390403425417413542214181025989e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(6.5f)),
      static_cast<T>(0.3757457624476840396478985178609736319955e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7c, d7c, static_cast<T>(10247.25f)),
      static_cast<T>(0.8991031618241406513349732955332873069556e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7a, d7a, static_cast<T>(0.125)),
      static_cast<T>(0.1161348466465698540596242849979738853664e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7a, d7a, static_cast<T>(0.25)),
      static_cast<T>(0.1010247476558897371522262642824204539632e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7a, d7a, static_cast<T>(0.75)),
      static_cast<T>(0.103079575951134804308491906398377636644e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7a, d7a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1183671559390403425417413542214181025989e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7a, d7a, static_cast<T>(6.5f)),
      static_cast<T>(0.3757457624476840396478985178609736319955e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n7a, d7a, static_cast<T>(10247.25f)),
      static_cast<T>(0.8991031618241406513349732955332873069556e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots7(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 7
   //
   static const U n8c[8] = { 9, 5, 6, 1, 12, 2, 11, 1 };
   static const std::array<U, 8> n8a = {{ 9, 5, 6, 1, 12, 2, 11, 1 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(0.125), 8),
      static_cast<T>(0.9723736286163330078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(0.25), 8),
      static_cast<T>(0.1069219970703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(0.75), 8),
      static_cast<T>(0.2290960693359375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(1.0f - 1.0f/64.0f), 8),
      static_cast<T>(0.4470947054706607559637632220983505249023e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(6.5), 8),
      static_cast<T>(0.13650267734375e7L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(10247.25), 8),
      static_cast<T>(0.1187728773094625678513681460864459228516e29L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(0.125)),
      static_cast<T>(0.9723736286163330078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(0.25)),
      static_cast<T>(0.1069219970703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(0.75)),
      static_cast<T>(0.2290960693359375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4470947054706607559637632220983505249023e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(6.5)),
      static_cast<T>(0.13650267734375e7L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8c, static_cast<T>(10247.25)),
      static_cast<T>(0.1187728773094625678513681460864459228516e29L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8a, static_cast<T>(0.125)),
      static_cast<T>(0.9723736286163330078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8a, static_cast<T>(0.25)),
      static_cast<T>(0.1069219970703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8a, static_cast<T>(0.75)),
      static_cast<T>(0.2290960693359375e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4470947054706607559637632220983505249023e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8a, static_cast<T>(6.5)),
      static_cast<T>(0.13650267734375e7L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n8a, static_cast<T>(10247.25)),
      static_cast<T>(0.1187728773094625678513681460864459228516e29L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(0.125), 8),
      static_cast<T>(0.9079594375725946520105935633182525634766e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(0.25), 8),
      static_cast<T>(0.93363673128187656402587890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(0.75), 8),
      static_cast<T>(0.155691558457911014556884765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(1.0f - 1.0f/64.0f), 8),
      static_cast<T>(0.4258457138999176910226338119632657870077e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(6.5f), 8),
      static_cast<T>(0.30319406120433428955078125e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(0.125)),
      static_cast<T>(0.9079594375725946520105935633182525634766e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(0.25)),
      static_cast<T>(0.93363673128187656402587890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(0.75)),
      static_cast<T>(0.155691558457911014556884765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4258457138999176910226338119632657870077e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8c, static_cast<T>(6.5f)),
      static_cast<T>(0.30319406120433428955078125e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8a, static_cast<T>(0.125)),
      static_cast<T>(0.9079594375725946520105935633182525634766e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8a, static_cast<T>(0.25)),
      static_cast<T>(0.93363673128187656402587890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8a, static_cast<T>(0.75)),
      static_cast<T>(0.155691558457911014556884765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4258457138999176910226338119632657870077e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n8a, static_cast<T>(6.5f)),
      static_cast<T>(0.30319406120433428955078125e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(0.125), 8),
      static_cast<T>(0.9636755005807572160847485065460205078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(0.25), 8),
      static_cast<T>(0.1034546925127506256103515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(0.75), 8),
      static_cast<T>(0.1775887446105480194091796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(1.0f - 1.0f/64.0f), 8),
      static_cast<T>(0.4311765982475354321499772058039525455316e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(6.5f), 8),
      static_cast<T>(0.466452401928975830078125e11L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(0.125)),
      static_cast<T>(0.9636755005807572160847485065460205078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(0.25)),
      static_cast<T>(0.1034546925127506256103515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(0.75)),
      static_cast<T>(0.1775887446105480194091796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4311765982475354321499772058039525455316e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8c, static_cast<T>(6.5f)),
      static_cast<T>(0.466452401928975830078125e11L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8a, static_cast<T>(0.125)),
      static_cast<T>(0.9636755005807572160847485065460205078125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8a, static_cast<T>(0.25)),
      static_cast<T>(0.1034546925127506256103515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8a, static_cast<T>(0.75)),
      static_cast<T>(0.1775887446105480194091796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4311765982475354321499772058039525455316e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n8a, static_cast<T>(6.5f)),
      static_cast<T>(0.466452401928975830078125e11L),
      tolerance);
   //
   // Rational functions of order 7
   //
   static const U d8c[8] = { 7, 10, 10, 11, 2, 4, 1, 7 };
   static const std::array<U, 8> d8a = {{ 7, 10, 10, 11, 2, 4, 1, 7 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(0.125), 8),
      static_cast<T>(0.1153693678861771369296601206130394355814e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(0.25), 8),
      static_cast<T>(0.103714470093009762768860970830101771981e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(0.75), 8),
      static_cast<T>(0.834289461108456229648481346061946410909e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(1.0f - 1.0f/64.0f), 8),
      static_cast<T>(0.8981362736388035283180082845549732926578e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(6.5f), 8),
      static_cast<T>(0.383383275200627223098571833372266642165e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(10247.25f), 8),
      static_cast<T>(0.1430085023641929377426860779365964126311e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(0.125)),
      static_cast<T>(0.1153693678861771369296601206130394355814e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(0.25)),
      static_cast<T>(0.103714470093009762768860970830101771981e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(0.75)),
      static_cast<T>(0.834289461108456229648481346061946410909e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8981362736388035283180082845549732926578e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(6.5f)),
      static_cast<T>(0.383383275200627223098571833372266642165e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8c, d8c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1430085023641929377426860779365964126311e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8a, d8a, static_cast<T>(0.125)),
      static_cast<T>(0.1153693678861771369296601206130394355814e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8a, d8a, static_cast<T>(0.25)),
      static_cast<T>(0.103714470093009762768860970830101771981e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8a, d8a, static_cast<T>(0.75)),
      static_cast<T>(0.834289461108456229648481346061946410909e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8a, d8a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8981362736388035283180082845549732926578e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8a, d8a, static_cast<T>(6.5f)),
      static_cast<T>(0.383383275200627223098571833372266642165e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n8a, d8a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1430085023641929377426860779365964126311e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots8(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 8
   //
   static const U n9c[9] = { 3, 9, 3, 9, 5, 6, 10, 7, 10 };
   static const std::array<U, 9> n9a = {{ 3, 9, 3, 9, 5, 6, 10, 7, 10 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(0.125), 9),
      static_cast<T>(0.419089901447296142578125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(0.25), 9),
      static_cast<T>(0.5606536865234375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(0.75), 9),
      static_cast<T>(0.21955535888671875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(1.0f - 1.0f/64.0f), 9),
      static_cast<T>(0.577754343750660055434309470001608133316e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(6.5), 9),
      static_cast<T>(0.3613143234375e8L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(10247.25), 9),
      static_cast<T>(0.1215873306624182859977656082228297326996e34L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(0.125)),
      static_cast<T>(0.419089901447296142578125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(0.25)),
      static_cast<T>(0.5606536865234375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(0.75)),
      static_cast<T>(0.21955535888671875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.577754343750660055434309470001608133316e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(6.5)),
      static_cast<T>(0.3613143234375e8L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9c, static_cast<T>(10247.25)),
      static_cast<T>(0.1215873306624182859977656082228297326996e34L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9a, static_cast<T>(0.125)),
      static_cast<T>(0.419089901447296142578125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9a, static_cast<T>(0.25)),
      static_cast<T>(0.5606536865234375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9a, static_cast<T>(0.75)),
      static_cast<T>(0.21955535888671875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.577754343750660055434309470001608133316e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9a, static_cast<T>(6.5)),
      static_cast<T>(0.3613143234375e8L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n9a, static_cast<T>(10247.25)),
      static_cast<T>(0.1215873306624182859977656082228297326996e34L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(0.125), 9),
      static_cast<T>(0.3141392057908696244794555241242051124573e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(0.25), 9),
      static_cast<T>(0.35764986560679972171783447265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(0.75), 9),
      static_cast<T>(0.119936861679889261722564697265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(1.0f - 1.0f/64.0f), 9),
      static_cast<T>(0.5392583642412261279423815221065846904997e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(6.5f), 9),
      static_cast<T>(0.103274449934495763275146484375e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(0.125)),
      static_cast<T>(0.3141392057908696244794555241242051124573e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(0.25)),
      static_cast<T>(0.35764986560679972171783447265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(0.75)),
      static_cast<T>(0.119936861679889261722564697265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5392583642412261279423815221065846904997e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9c, static_cast<T>(6.5f)),
      static_cast<T>(0.103274449934495763275146484375e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9a, static_cast<T>(0.125)),
      static_cast<T>(0.3141392057908696244794555241242051124573e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9a, static_cast<T>(0.25)),
      static_cast<T>(0.35764986560679972171783447265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9a, static_cast<T>(0.75)),
      static_cast<T>(0.119936861679889261722564697265625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5392583642412261279423815221065846904997e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n9a, static_cast<T>(6.5f)),
      static_cast<T>(0.103274449934495763275146484375e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(0.125), 9),
      static_cast<T>(0.4131136463269569958356441929936408996582e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(0.25), 9),
      static_cast<T>(0.530599462427198886871337890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(0.75), 9),
      static_cast<T>(0.1499158155731856822967529296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(1.0f - 1.0f/64.0f), 9),
      static_cast<T>(0.5473418303402932093382923399178003205076e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(6.5f), 9),
      static_cast<T>(0.1588837691300188665771484375e14L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(0.125)),
      static_cast<T>(0.4131136463269569958356441929936408996582e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(0.25)),
      static_cast<T>(0.530599462427198886871337890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(0.75)),
      static_cast<T>(0.1499158155731856822967529296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5473418303402932093382923399178003205076e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9c, static_cast<T>(6.5f)),
      static_cast<T>(0.1588837691300188665771484375e14L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9a, static_cast<T>(0.125)),
      static_cast<T>(0.4131136463269569958356441929936408996582e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9a, static_cast<T>(0.25)),
      static_cast<T>(0.530599462427198886871337890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9a, static_cast<T>(0.75)),
      static_cast<T>(0.1499158155731856822967529296875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5473418303402932093382923399178003205076e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n9a, static_cast<T>(6.5f)),
      static_cast<T>(0.1588837691300188665771484375e14L),
      tolerance);
   //
   // Rational functions of order 8
   //
   static const U d9c[9] = { 12, 3, 10, 4, 6, 6, 6, 10, 7 };
   static const std::array<U, 9> d9a = {{ 12, 3, 10, 4, 6, 6, 6, 10, 7 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(0.125), 9),
      static_cast<T>(0.3341827920887278954826517708316980450243e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(0.25), 9),
      static_cast<T>(0.4162555242250224594229316089330159747956e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(0.75), 9),
      static_cast<T>(0.7844550246723573100342976024389406178802e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(1.0f - 1.0f/64.0f), 9),
      static_cast<T>(0.959335028097323235424759017468360386113e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(6.5f), 9),
      static_cast<T>(0.1302420407483849169746727326286868117535e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(10247.25f), 9),
      static_cast<T>(0.1428469874366314841691622991213446692856e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(0.125)),
      static_cast<T>(0.3341827920887278954826517708316980450243e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(0.25)),
      static_cast<T>(0.4162555242250224594229316089330159747956e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(0.75)),
      static_cast<T>(0.7844550246723573100342976024389406178802e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.959335028097323235424759017468360386113e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(6.5f)),
      static_cast<T>(0.1302420407483849169746727326286868117535e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9c, d9c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1428469874366314841691622991213446692856e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9a, d9a, static_cast<T>(0.125)),
      static_cast<T>(0.3341827920887278954826517708316980450243e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9a, d9a, static_cast<T>(0.25)),
      static_cast<T>(0.4162555242250224594229316089330159747956e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9a, d9a, static_cast<T>(0.75)),
      static_cast<T>(0.7844550246723573100342976024389406178802e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9a, d9a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.959335028097323235424759017468360386113e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9a, d9a, static_cast<T>(6.5f)),
      static_cast<T>(0.1302420407483849169746727326286868117535e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n9a, d9a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1428469874366314841691622991213446692856e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots9(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 9
   //
   static const U n10c[10] = { 3, 4, 2, 6, 8, 1, 2, 4, 8, 8 };
   static const std::array<U, 10> n10a = {{ 3, 4, 2, 6, 8, 1, 2, 4, 8, 8 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(0.125), 10),
      static_cast<T>(0.3544962465763092041015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(0.25), 10),
      static_cast<T>(0.4251861572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(0.75), 10),
      static_cast<T>(0.14716278076171875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(1.0f - 1.0f/64.0f), 10),
      static_cast<T>(0.4243246072286939307716124858416151255369e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(6.5), 10),
      static_cast<T>(0.193326261328125e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(10247.25), 10),
      static_cast<T>(0.9967777935240642903307419028007759631098e37L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(0.125)),
      static_cast<T>(0.3544962465763092041015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(0.25)),
      static_cast<T>(0.4251861572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(0.75)),
      static_cast<T>(0.14716278076171875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4243246072286939307716124858416151255369e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(6.5)),
      static_cast<T>(0.193326261328125e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10c, static_cast<T>(10247.25)),
      static_cast<T>(0.9967777935240642903307419028007759631098e37L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10a, static_cast<T>(0.125)),
      static_cast<T>(0.3544962465763092041015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10a, static_cast<T>(0.25)),
      static_cast<T>(0.4251861572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10a, static_cast<T>(0.75)),
      static_cast<T>(0.14716278076171875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.4243246072286939307716124858416151255369e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10a, static_cast<T>(6.5)),
      static_cast<T>(0.193326261328125e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n10a, static_cast<T>(10247.25)),
      static_cast<T>(0.9967777935240642903307419028007759631098e37L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(0.125), 10),
      static_cast<T>(0.3063011647232116718697625401546247303486e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(0.25), 10),
      static_cast<T>(0.3259400503826327621936798095703125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(0.75), 10),
      static_cast<T>(0.8067807371844537556171417236328125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(1.0f - 1.0f/64.0f), 10),
      static_cast<T>(0.3922779295817342542834377568121069117613e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(6.5f), 10),
      static_cast<T>(0.3514067090785774022613525390625e16L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(0.125)),
      static_cast<T>(0.3063011647232116718697625401546247303486e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(0.25)),
      static_cast<T>(0.3259400503826327621936798095703125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(0.75)),
      static_cast<T>(0.8067807371844537556171417236328125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3922779295817342542834377568121069117613e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10c, static_cast<T>(6.5f)),
      static_cast<T>(0.3514067090785774022613525390625e16L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10a, static_cast<T>(0.125)),
      static_cast<T>(0.3063011647232116718697625401546247303486e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10a, static_cast<T>(0.25)),
      static_cast<T>(0.3259400503826327621936798095703125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10a, static_cast<T>(0.75)),
      static_cast<T>(0.8067807371844537556171417236328125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3922779295817342542834377568121069117613e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n10a, static_cast<T>(6.5f)),
      static_cast<T>(0.3514067090785774022613525390625e16L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(0.125), 10),
      static_cast<T>(0.3504093177856933749581003212369978427887e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(0.25), 10),
      static_cast<T>(0.40376020153053104877471923828125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(0.75), 10),
      static_cast<T>(0.97570764957927167415618896484375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(1.0f - 1.0f/64.0f), 10),
      static_cast<T>(0.3980283729084284487958732767615054341702e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(6.5f), 10),
      static_cast<T>(0.54062570627473700347900390625e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(0.125)),
      static_cast<T>(0.3504093177856933749581003212369978427887e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(0.25)),
      static_cast<T>(0.40376020153053104877471923828125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(0.75)),
      static_cast<T>(0.97570764957927167415618896484375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3980283729084284487958732767615054341702e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10c, static_cast<T>(6.5f)),
      static_cast<T>(0.54062570627473700347900390625e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10a, static_cast<T>(0.125)),
      static_cast<T>(0.3504093177856933749581003212369978427887e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10a, static_cast<T>(0.25)),
      static_cast<T>(0.40376020153053104877471923828125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10a, static_cast<T>(0.75)),
      static_cast<T>(0.97570764957927167415618896484375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.3980283729084284487958732767615054341702e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n10a, static_cast<T>(6.5f)),
      static_cast<T>(0.54062570627473700347900390625e15L),
      tolerance);
   //
   // Rational functions of order 9
   //
   static const U d10c[10] = { 3, 11, 1, 12, 8, 8, 7, 10, 8, 8 };
   static const std::array<U, 10> d10a = {{ 3, 11, 1, 12, 8, 8, 7, 10, 8, 8 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(0.125), 10),
      static_cast<T>(0.8027011456035955638016996485812217742707e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(0.25), 10),
      static_cast<T>(0.7037718026559713894599659542655668311705e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(0.75), 10),
      static_cast<T>(0.5819711007563332500606442409694389231031e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(1.0f - 1.0f/64.0f), 10),
      static_cast<T>(0.6021345078884753739086911192013079405483e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(6.5f), 10),
      static_cast<T>(0.9827105949744728065574239430024037810213e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(10247.25f), 10),
      static_cast<T>(0.9999999928576761766405011572543053028339e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(0.125)),
      static_cast<T>(0.8027011456035955638016996485812217742707e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(0.25)),
      static_cast<T>(0.7037718026559713894599659542655668311705e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(0.75)),
      static_cast<T>(0.5819711007563332500606442409694389231031e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6021345078884753739086911192013079405483e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(6.5f)),
      static_cast<T>(0.9827105949744728065574239430024037810213e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10c, d10c, static_cast<T>(10247.25f)),
      static_cast<T>(0.9999999928576761766405011572543053028339e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10a, d10a, static_cast<T>(0.125)),
      static_cast<T>(0.8027011456035955638016996485812217742707e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10a, d10a, static_cast<T>(0.25)),
      static_cast<T>(0.7037718026559713894599659542655668311705e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10a, d10a, static_cast<T>(0.75)),
      static_cast<T>(0.5819711007563332500606442409694389231031e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10a, d10a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6021345078884753739086911192013079405483e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10a, d10a, static_cast<T>(6.5f)),
      static_cast<T>(0.9827105949744728065574239430024037810213e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n10a, d10a, static_cast<T>(10247.25f)),
      static_cast<T>(0.9999999928576761766405011572543053028339e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots10(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 10
   //
   static const U n11c[11] = { 2, 2, 8, 11, 3, 4, 10, 11, 5, 1, 6 };
   static const std::array<U, 11> n11a = {{ 2, 2, 8, 11, 3, 4, 10, 11, 5, 1, 6 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(0.125), 11),
      static_cast<T>(0.239738257043063640594482421875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(0.25), 11),
      static_cast<T>(0.31906986236572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(0.75), 11),
      static_cast<T>(0.187007007598876953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(1.0f - 1.0f/64.0f), 11),
      static_cast<T>(0.5807897685780276847943015550157497273176e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(6.5), 11),
      static_cast<T>(0.85061053443359375e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(0.125)),
      static_cast<T>(0.239738257043063640594482421875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(0.25)),
      static_cast<T>(0.31906986236572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(0.75)),
      static_cast<T>(0.187007007598876953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5807897685780276847943015550157497273176e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11c, static_cast<T>(6.5)),
      static_cast<T>(0.85061053443359375e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11a, static_cast<T>(0.125)),
      static_cast<T>(0.239738257043063640594482421875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11a, static_cast<T>(0.25)),
      static_cast<T>(0.31906986236572265625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11a, static_cast<T>(0.75)),
      static_cast<T>(0.187007007598876953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5807897685780276847943015550157497273176e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n11a, static_cast<T>(6.5)),
      static_cast<T>(0.85061053443359375e9L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(0.125), 11),
      static_cast<T>(0.2033245269357184586631048794913567689946e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(0.25), 11),
      static_cast<T>(0.2158985776148256263695657253265380859375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(0.75), 11),
      static_cast<T>(0.8727145384755203849636018276214599609375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(1.0f - 1.0f/64.0f), 11),
      static_cast<T>(0.5363972553738812062759598952966094072427e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(6.5f), 11),
      static_cast<T>(0.1092297265410211371166019439697265625e18L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(0.125)),
      static_cast<T>(0.2033245269357184586631048794913567689946e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(0.25)),
      static_cast<T>(0.2158985776148256263695657253265380859375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(0.75)),
      static_cast<T>(0.8727145384755203849636018276214599609375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5363972553738812062759598952966094072427e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11c, static_cast<T>(6.5f)),
      static_cast<T>(0.1092297265410211371166019439697265625e18L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11a, static_cast<T>(0.125)),
      static_cast<T>(0.2033245269357184586631048794913567689946e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11a, static_cast<T>(0.25)),
      static_cast<T>(0.2158985776148256263695657253265380859375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11a, static_cast<T>(0.75)),
      static_cast<T>(0.8727145384755203849636018276214599609375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.5363972553738812062759598952966094072427e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n11a, static_cast<T>(6.5f)),
      static_cast<T>(0.1092297265410211371166019439697265625e18L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(0.125), 11),
      static_cast<T>(0.2265962154857476693048390359308541519567e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(0.25), 11),
      static_cast<T>(0.26359431045930250547826290130615234375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(0.75), 11),
      static_cast<T>(0.109695271796736051328480243682861328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(1.0f - 1.0f/64.0f), 11),
      static_cast<T>(0.544594037205212653994625925380682572437e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(6.5f), 11),
      static_cast<T>(0.16804573314003253556400299072265625e17L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(0.125)),
      static_cast<T>(0.2265962154857476693048390359308541519567e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(0.25)),
      static_cast<T>(0.26359431045930250547826290130615234375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(0.75)),
      static_cast<T>(0.109695271796736051328480243682861328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.544594037205212653994625925380682572437e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11c, static_cast<T>(6.5f)),
      static_cast<T>(0.16804573314003253556400299072265625e17L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11a, static_cast<T>(0.125)),
      static_cast<T>(0.2265962154857476693048390359308541519567e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11a, static_cast<T>(0.25)),
      static_cast<T>(0.26359431045930250547826290130615234375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11a, static_cast<T>(0.75)),
      static_cast<T>(0.109695271796736051328480243682861328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.544594037205212653994625925380682572437e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n11a, static_cast<T>(6.5f)),
      static_cast<T>(0.16804573314003253556400299072265625e17L),
      tolerance);
   //
   // Rational functions of order 10
   //
   static const U d11c[11] = { 4, 1, 3, 9, 11, 8, 11, 2, 6, 6, 4 };
   static const std::array<U, 11> d11a = {{ 4, 1, 3, 9, 11, 8, 11, 2, 6, 6, 4 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(0.125), 11),
      static_cast<T>(0.5718365676248588095654568811483084403598e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(0.25), 11),
      static_cast<T>(0.6888631839546304707516922567568791812269e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(0.75), 11),
      static_cast<T>(0.9783539912974912482969079012097816310129e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(1.0f - 1.0f/64.0f), 11),
      static_cast<T>(0.9694017102874332007392886881642471036972e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(6.5f), 11),
      static_cast<T>(0.1243900864392932237542421996384079347041e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(10247.25f), 11),
      static_cast<T>(0.1499804844733304585200728061706913399511e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(0.125)),
      static_cast<T>(0.5718365676248588095654568811483084403598e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(0.25)),
      static_cast<T>(0.6888631839546304707516922567568791812269e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(0.75)),
      static_cast<T>(0.9783539912974912482969079012097816310129e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9694017102874332007392886881642471036972e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(6.5f)),
      static_cast<T>(0.1243900864392932237542421996384079347041e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11c, d11c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1499804844733304585200728061706913399511e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11a, d11a, static_cast<T>(0.125)),
      static_cast<T>(0.5718365676248588095654568811483084403598e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11a, d11a, static_cast<T>(0.25)),
      static_cast<T>(0.6888631839546304707516922567568791812269e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11a, d11a, static_cast<T>(0.75)),
      static_cast<T>(0.9783539912974912482969079012097816310129e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11a, d11a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9694017102874332007392886881642471036972e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11a, d11a, static_cast<T>(6.5f)),
      static_cast<T>(0.1243900864392932237542421996384079347041e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n11a, d11a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1499804844733304585200728061706913399511e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots11(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 11
   //
   static const U n12c[12] = { 10, 12, 4, 1, 12, 7, 11, 5, 12, 5, 10, 6 };
   static const std::array<U, 12> n12a = {{ 10, 12, 4, 1, 12, 7, 11, 5, 12, 5, 10, 6 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(0.125), 12),
      static_cast<T>(0.1156764154392294585704803466796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(0.25), 12),
      static_cast<T>(0.13322539806365966796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(0.75), 12),
      static_cast<T>(0.32148390293121337890625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(1.0f - 1.0f/64.0f), 12),
      static_cast<T>(0.8737331822870016474402916385744166660743e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(6.5), 12),
      static_cast<T>(0.67419250750654296875e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(0.125)),
      static_cast<T>(0.1156764154392294585704803466796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(0.25)),
      static_cast<T>(0.13322539806365966796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(0.75)),
      static_cast<T>(0.32148390293121337890625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8737331822870016474402916385744166660743e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12c, static_cast<T>(6.5)),
      static_cast<T>(0.67419250750654296875e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12a, static_cast<T>(0.125)),
      static_cast<T>(0.1156764154392294585704803466796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12a, static_cast<T>(0.25)),
      static_cast<T>(0.13322539806365966796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12a, static_cast<T>(0.75)),
      static_cast<T>(0.32148390293121337890625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8737331822870016474402916385744166660743e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n12a, static_cast<T>(6.5)),
      static_cast<T>(0.67419250750654296875e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(0.125), 12),
      static_cast<T>(0.101884810991335118067599354446661763518e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(0.25), 12),
      static_cast<T>(0.1076605959896767217287560924887657165527e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(0.75), 12),
      static_cast<T>(0.2041755737073560794669901952147483825684e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(1.0f - 1.0f/64.0f), 12),
      static_cast<T>(0.8060387357327405373376954971672611741429e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(6.5f), 12),
      static_cast<T>(0.4778085851102157284559772014617919921875e19L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(0.125)),
      static_cast<T>(0.101884810991335118067599354446661763518e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(0.25)),
      static_cast<T>(0.1076605959896767217287560924887657165527e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(0.75)),
      static_cast<T>(0.2041755737073560794669901952147483825684e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8060387357327405373376954971672611741429e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12c, static_cast<T>(6.5f)),
      static_cast<T>(0.4778085851102157284559772014617919921875e19L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12a, static_cast<T>(0.125)),
      static_cast<T>(0.101884810991335118067599354446661763518e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12a, static_cast<T>(0.25)),
      static_cast<T>(0.1076605959896767217287560924887657165527e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12a, static_cast<T>(0.75)),
      static_cast<T>(0.2041755737073560794669901952147483825684e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8060387357327405373376954971672611741429e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n12a, static_cast<T>(6.5f)),
      static_cast<T>(0.4778085851102157284559772014617919921875e19L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(0.125), 12),
      static_cast<T>(0.1150784879306809445407948355732941081442e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(0.25), 12),
      static_cast<T>(0.1306423839587068869150243699550628662109e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(0.75), 12),
      static_cast<T>(0.2389007649431414392893202602863311767578e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(1.0f - 1.0f/64.0f), 12),
      static_cast<T>(0.8172456997919903871367065368048367483356e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(6.5f), 12),
      static_cast<T>(0.73509013093879343685534954071044921875e18L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(0.125)),
      static_cast<T>(0.1150784879306809445407948355732941081442e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(0.25)),
      static_cast<T>(0.1306423839587068869150243699550628662109e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(0.75)),
      static_cast<T>(0.2389007649431414392893202602863311767578e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8172456997919903871367065368048367483356e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12c, static_cast<T>(6.5f)),
      static_cast<T>(0.73509013093879343685534954071044921875e18L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12a, static_cast<T>(0.125)),
      static_cast<T>(0.1150784879306809445407948355732941081442e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12a, static_cast<T>(0.25)),
      static_cast<T>(0.1306423839587068869150243699550628662109e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12a, static_cast<T>(0.75)),
      static_cast<T>(0.2389007649431414392893202602863311767578e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8172456997919903871367065368048367483356e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n12a, static_cast<T>(6.5f)),
      static_cast<T>(0.73509013093879343685534954071044921875e18L),
      tolerance);
   //
   // Rational functions of order 11
   //
   static const U d12c[12] = { 12, 5, 2, 8, 3, 2, 6, 9, 2, 8, 9, 12 };
   static const std::array<U, 12> d12a = {{ 12, 5, 2, 8, 3, 2, 6, 9, 2, 8, 9, 12 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(0.125), 12),
      static_cast<T>(0.9128003783370762743953357962892418132189e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(0.25), 12),
      static_cast<T>(0.9857041905689267091438933694601440838819e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(0.75), 12),
      static_cast<T>(0.1248112763387283893598834927961632655902e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(1.0f - 1.0f/64.0f), 12),
      static_cast<T>(0.1227813945781309965073515980672922656926e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(6.5f), 12),
      static_cast<T>(0.5670462630528956417277364302989555872917e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(10247.25f), 12),
      static_cast<T>(0.5000447249679368028702341332079904080375e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(0.125)),
      static_cast<T>(0.9128003783370762743953357962892418132189e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(0.25)),
      static_cast<T>(0.9857041905689267091438933694601440838819e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(0.75)),
      static_cast<T>(0.1248112763387283893598834927961632655902e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1227813945781309965073515980672922656926e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(6.5f)),
      static_cast<T>(0.5670462630528956417277364302989555872917e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12c, d12c, static_cast<T>(10247.25f)),
      static_cast<T>(0.5000447249679368028702341332079904080375e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12a, d12a, static_cast<T>(0.125)),
      static_cast<T>(0.9128003783370762743953357962892418132189e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12a, d12a, static_cast<T>(0.25)),
      static_cast<T>(0.9857041905689267091438933694601440838819e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12a, d12a, static_cast<T>(0.75)),
      static_cast<T>(0.1248112763387283893598834927961632655902e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12a, d12a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1227813945781309965073515980672922656926e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12a, d12a, static_cast<T>(6.5f)),
      static_cast<T>(0.5670462630528956417277364302989555872917e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n12a, d12a, static_cast<T>(10247.25f)),
      static_cast<T>(0.5000447249679368028702341332079904080375e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots12(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 12
   //
   static const U n13c[13] = { 4, 11, 7, 1, 1, 1, 8, 11, 10, 12, 8, 2, 1 };
   static const std::array<U, 13> n13a = {{ 4, 11, 7, 1, 1, 1, 8, 11, 10, 12, 8, 2, 1 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(0.125), 13),
      static_cast<T>(0.5486639239141368307173252105712890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(0.25), 13),
      static_cast<T>(0.7210838854312896728515625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(0.75), 13),
      static_cast<T>(0.22524036943912506103515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(1.0f - 1.0f/64.0f), 13),
      static_cast<T>(0.7013317633407797455061737623412208147977e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(6.5), 13),
      static_cast<T>(0.8801602436469970703125e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(0.125)),
      static_cast<T>(0.5486639239141368307173252105712890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(0.25)),
      static_cast<T>(0.7210838854312896728515625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(0.75)),
      static_cast<T>(0.22524036943912506103515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7013317633407797455061737623412208147977e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13c, static_cast<T>(6.5)),
      static_cast<T>(0.8801602436469970703125e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13a, static_cast<T>(0.125)),
      static_cast<T>(0.5486639239141368307173252105712890625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13a, static_cast<T>(0.25)),
      static_cast<T>(0.7210838854312896728515625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13a, static_cast<T>(0.75)),
      static_cast<T>(0.22524036943912506103515625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7013317633407797455061737623412208147977e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n13a, static_cast<T>(6.5)),
      static_cast<T>(0.8801602436469970703125e10L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(0.125), 13),
      static_cast<T>(0.4173587859727185607499727379291788731397e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(0.25), 13),
      static_cast<T>(0.4715104623414053008900737040676176548004e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(0.75), 13),
      static_cast<T>(0.1338397611887558369403450342360883951187e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(1.0f - 1.0f/64.0f), 13),
      static_cast<T>(0.6407202225497595548875186059951665936749e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(6.5f), 13),
      static_cast<T>(0.3403521961549553788009664398431777954102e20L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(0.125)),
      static_cast<T>(0.4173587859727185607499727379291788731397e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(0.25)),
      static_cast<T>(0.4715104623414053008900737040676176548004e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(0.75)),
      static_cast<T>(0.1338397611887558369403450342360883951187e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6407202225497595548875186059951665936749e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13c, static_cast<T>(6.5f)),
      static_cast<T>(0.3403521961549553788009664398431777954102e20L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13a, static_cast<T>(0.125)),
      static_cast<T>(0.4173587859727185607499727379291788731397e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13a, static_cast<T>(0.25)),
      static_cast<T>(0.4715104623414053008900737040676176548004e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13a, static_cast<T>(0.75)),
      static_cast<T>(0.1338397611887558369403450342360883951187e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6407202225497595548875186059951665936749e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n13a, static_cast<T>(6.5f)),
      static_cast<T>(0.3403521961549553788009664398431777954102e20L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(0.125), 13),
      static_cast<T>(0.5388702877817484859997819034334309851175e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(0.25), 13),
      static_cast<T>(0.6860418493656212035602948162704706192017e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(0.75), 13),
      static_cast<T>(0.165119681585007782587126712314784526825e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(1.0f - 1.0f/64.0f), 13),
      static_cast<T>(0.6502554641775335160762093775188993967491e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(6.5f), 13),
      static_cast<T>(0.5236187633153159677245637536048889160156e19L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(0.125)),
      static_cast<T>(0.5388702877817484859997819034334309851175e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(0.25)),
      static_cast<T>(0.6860418493656212035602948162704706192017e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(0.75)),
      static_cast<T>(0.165119681585007782587126712314784526825e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6502554641775335160762093775188993967491e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13c, static_cast<T>(6.5f)),
      static_cast<T>(0.5236187633153159677245637536048889160156e19L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13a, static_cast<T>(0.125)),
      static_cast<T>(0.5388702877817484859997819034334309851175e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13a, static_cast<T>(0.25)),
      static_cast<T>(0.6860418493656212035602948162704706192017e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13a, static_cast<T>(0.75)),
      static_cast<T>(0.165119681585007782587126712314784526825e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.6502554641775335160762093775188993967491e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n13a, static_cast<T>(6.5f)),
      static_cast<T>(0.5236187633153159677245637536048889160156e19L),
      tolerance);
   //
   // Rational functions of order 12
   //
   static const U d13c[13] = { 4, 7, 1, 6, 11, 4, 9, 11, 1, 10, 1, 11, 12 };
   static const std::array<U, 13> d13a = {{ 4, 7, 1, 6, 11, 4, 9, 11, 1, 10, 1, 11, 12 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(0.125), 13),
      static_cast<T>(0.1118537310443419140823936840990235560775e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(0.25), 13),
      static_cast<T>(0.12106743933208147312270004711488386001e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(0.75), 13),
      static_cast<T>(0.1042994706832119738384940706309786965245e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(1.0f - 1.0f/64.0f), 13),
      static_cast<T>(0.8849937505065081554917467830175954168154e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(6.5f), 13),
      static_cast<T>(0.1125049235146435310211414108934070096386e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(10247.25f), 13),
      static_cast<T>(0.8334214878002966556152610218152238753709e-1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(0.125)),
      static_cast<T>(0.1118537310443419140823936840990235560775e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(0.25)),
      static_cast<T>(0.12106743933208147312270004711488386001e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(0.75)),
      static_cast<T>(0.1042994706832119738384940706309786965245e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8849937505065081554917467830175954168154e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(6.5f)),
      static_cast<T>(0.1125049235146435310211414108934070096386e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13c, d13c, static_cast<T>(10247.25f)),
      static_cast<T>(0.8334214878002966556152610218152238753709e-1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13a, d13a, static_cast<T>(0.125)),
      static_cast<T>(0.1118537310443419140823936840990235560775e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13a, d13a, static_cast<T>(0.25)),
      static_cast<T>(0.12106743933208147312270004711488386001e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13a, d13a, static_cast<T>(0.75)),
      static_cast<T>(0.1042994706832119738384940706309786965245e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13a, d13a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8849937505065081554917467830175954168154e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13a, d13a, static_cast<T>(6.5f)),
      static_cast<T>(0.1125049235146435310211414108934070096386e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n13a, d13a, static_cast<T>(10247.25f)),
      static_cast<T>(0.8334214878002966556152610218152238753709e-1L),
      tolerance);
}
template <class T, class U>
void do_test_spots13(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 13
   //
   static const U n14c[14] = { 5, 5, 3, 5, 12, 8, 10, 5, 5, 9, 2, 10, 3, 3 };
   static const std::array<U, 14> n14a = {{ 5, 5, 3, 5, 12, 8, 10, 5, 5, 9, 2, 10, 3, 3 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(0.125), 14),
      static_cast<T>(0.5684855352437807596288621425628662109375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(0.25), 14),
      static_cast<T>(0.657317422330379486083984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(0.75), 14),
      static_cast<T>(0.2256699807941913604736328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(1.0f - 1.0f/64.0f), 14),
      static_cast<T>(0.7710103154409585858207746641830426369713e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(6.5), 14),
      static_cast<T>(0.1372059025011920166015625e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(0.125)),
      static_cast<T>(0.5684855352437807596288621425628662109375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(0.25)),
      static_cast<T>(0.657317422330379486083984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(0.75)),
      static_cast<T>(0.2256699807941913604736328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7710103154409585858207746641830426369713e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14c, static_cast<T>(6.5)),
      static_cast<T>(0.1372059025011920166015625e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14a, static_cast<T>(0.125)),
      static_cast<T>(0.5684855352437807596288621425628662109375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14a, static_cast<T>(0.25)),
      static_cast<T>(0.657317422330379486083984375e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14a, static_cast<T>(0.75)),
      static_cast<T>(0.2256699807941913604736328125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7710103154409585858207746641830426369713e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n14a, static_cast<T>(6.5)),
      static_cast<T>(0.1372059025011920166015625e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(0.125), 14),
      static_cast<T>(0.5078877218214320312311861835604176527818e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(0.25), 14),
      static_cast<T>(0.5325630803958699699407475236512254923582e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(0.75), 14),
      static_cast<T>(0.1183906394403697492911931021808413788676e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(1.0f - 1.0f/64.0f), 14),
      static_cast<T>(0.7015764398304385537424317046920004042802e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(6.5f), 14),
      static_cast<T>(0.4205557544065332561152158209905028343201e22L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(0.125)),
      static_cast<T>(0.5078877218214320312311861835604176527818e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(0.25)),
      static_cast<T>(0.5325630803958699699407475236512254923582e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(0.75)),
      static_cast<T>(0.1183906394403697492911931021808413788676e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7015764398304385537424317046920004042802e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14c, static_cast<T>(6.5f)),
      static_cast<T>(0.4205557544065332561152158209905028343201e22L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14a, static_cast<T>(0.125)),
      static_cast<T>(0.5078877218214320312311861835604176527818e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14a, static_cast<T>(0.25)),
      static_cast<T>(0.5325630803958699699407475236512254923582e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14a, static_cast<T>(0.75)),
      static_cast<T>(0.1183906394403697492911931021808413788676e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7015764398304385537424317046920004042802e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n14a, static_cast<T>(6.5f)),
      static_cast<T>(0.4205557544065332561152158209905028343201e22L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(0.125), 14),
      static_cast<T>(0.5631017745714562498494894684833412222547e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(0.25), 14),
      static_cast<T>(0.6302523215834798797629900946049019694328e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(0.75), 14),
      static_cast<T>(0.1411875192538263323882574695744551718235e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(1.0f - 1.0f/64.0f), 14),
      static_cast<T>(0.7119189230023502768177083984172702519672e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(6.5f), 14),
      static_cast<T>(0.6470088529331280863353320322930812835693e21L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(0.125)),
      static_cast<T>(0.5631017745714562498494894684833412222547e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(0.25)),
      static_cast<T>(0.6302523215834798797629900946049019694328e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(0.75)),
      static_cast<T>(0.1411875192538263323882574695744551718235e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7119189230023502768177083984172702519672e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14c, static_cast<T>(6.5f)),
      static_cast<T>(0.6470088529331280863353320322930812835693e21L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14a, static_cast<T>(0.125)),
      static_cast<T>(0.5631017745714562498494894684833412222547e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14a, static_cast<T>(0.25)),
      static_cast<T>(0.6302523215834798797629900946049019694328e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14a, static_cast<T>(0.75)),
      static_cast<T>(0.1411875192538263323882574695744551718235e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7119189230023502768177083984172702519672e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n14a, static_cast<T>(6.5f)),
      static_cast<T>(0.6470088529331280863353320322930812835693e21L),
      tolerance);
   //
   // Rational functions of order 13
   //
   static const U d14c[14] = { 1, 2, 1, 8, 5, 8, 2, 11, 3, 6, 5, 9, 7, 10 };
   static const std::array<U, 14> d14a = {{ 1, 2, 1, 8, 5, 8, 2, 11, 3, 6, 5, 9, 7, 10 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(0.125), 14),
      static_cast<T>(0.4431848049037056640776200482297774574883e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(0.25), 14),
      static_cast<T>(0.3830343514018902583833597521450902906851e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(0.75), 14),
      static_cast<T>(0.1657621200711495617835320787645038062003e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(1.0f - 1.0f/64.0f), 14),
      static_cast<T>(0.1117985091800992684003226640313705018678e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(6.5f), 14),
      static_cast<T>(0.3280672161259396135368350556553925507681e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(10247.25f), 14),
      static_cast<T>(0.3000087891957249835881866421118445480875e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(0.125)),
      static_cast<T>(0.4431848049037056640776200482297774574883e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(0.25)),
      static_cast<T>(0.3830343514018902583833597521450902906851e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(0.75)),
      static_cast<T>(0.1657621200711495617835320787645038062003e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1117985091800992684003226640313705018678e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(6.5f)),
      static_cast<T>(0.3280672161259396135368350556553925507681e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14c, d14c, static_cast<T>(10247.25f)),
      static_cast<T>(0.3000087891957249835881866421118445480875e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14a, d14a, static_cast<T>(0.125)),
      static_cast<T>(0.4431848049037056640776200482297774574883e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14a, d14a, static_cast<T>(0.25)),
      static_cast<T>(0.3830343514018902583833597521450902906851e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14a, d14a, static_cast<T>(0.75)),
      static_cast<T>(0.1657621200711495617835320787645038062003e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14a, d14a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1117985091800992684003226640313705018678e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14a, d14a, static_cast<T>(6.5f)),
      static_cast<T>(0.3280672161259396135368350556553925507681e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n14a, d14a, static_cast<T>(10247.25f)),
      static_cast<T>(0.3000087891957249835881866421118445480875e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots14(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 14
   //
   static const U n15c[15] = { 6, 2, 10, 2, 4, 11, 4, 6, 5, 5, 10, 12, 8, 6, 2 };
   static const std::array<U, 15> n15a = {{ 6, 2, 10, 2, 4, 11, 4, 6, 5, 5, 10, 12, 8, 6, 2 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(0.125), 15),
      static_cast<T>(0.6411486971785507193999364972114562988281e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(0.25), 15),
      static_cast<T>(0.7184068299829959869384765625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(0.75), 15),
      static_cast<T>(0.21735079027712345123291015625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(1.0f - 1.0f/64.0f), 15),
      static_cast<T>(0.8299984286646360949452954853655163780233e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(6.5), 15),
      static_cast<T>(0.7599432765217742919921875e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(0.125)),
      static_cast<T>(0.6411486971785507193999364972114562988281e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(0.25)),
      static_cast<T>(0.7184068299829959869384765625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(0.75)),
      static_cast<T>(0.21735079027712345123291015625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8299984286646360949452954853655163780233e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15c, static_cast<T>(6.5)),
      static_cast<T>(0.7599432765217742919921875e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15a, static_cast<T>(0.125)),
      static_cast<T>(0.6411486971785507193999364972114562988281e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15a, static_cast<T>(0.25)),
      static_cast<T>(0.7184068299829959869384765625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15a, static_cast<T>(0.75)),
      static_cast<T>(0.21735079027712345123291015625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8299984286646360949452954853655163780233e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n15a, static_cast<T>(6.5)),
      static_cast<T>(0.7599432765217742919921875e12L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(0.125), 15),
      static_cast<T>(0.603369928436724862526100235763586452224e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(0.25), 15),
      static_cast<T>(0.6164622568840771005271861326946236658841e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(0.75), 15),
      static_cast<T>(0.1204200081304656236302896843426424311474e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(1.0f - 1.0f/64.0f), 15),
      static_cast<T>(0.7438435296991670658675730793779505088179e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(6.5f), 15),
      static_cast<T>(0.123975649339443727300884144392229616642e24L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(0.125)),
      static_cast<T>(0.603369928436724862526100235763586452224e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(0.25)),
      static_cast<T>(0.6164622568840771005271861326946236658841e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(0.75)),
      static_cast<T>(0.1204200081304656236302896843426424311474e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7438435296991670658675730793779505088179e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15c, static_cast<T>(6.5f)),
      static_cast<T>(0.123975649339443727300884144392229616642e24L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15a, static_cast<T>(0.125)),
      static_cast<T>(0.603369928436724862526100235763586452224e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15a, static_cast<T>(0.25)),
      static_cast<T>(0.6164622568840771005271861326946236658841e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15a, static_cast<T>(0.75)),
      static_cast<T>(0.1204200081304656236302896843426424311474e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7438435296991670658675730793779505088179e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n15a, static_cast<T>(6.5f)),
      static_cast<T>(0.123975649339443727300884144392229616642e24L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(0.125), 15),
      static_cast<T>(0.6269594274937989002088018861086916177919e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(0.25), 15),
      static_cast<T>(0.6658490275363084021087445307784946635365e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(0.75), 15),
      static_cast<T>(0.1405600108406208315070529124568565748632e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(1.0f - 1.0f/64.0f), 15),
      static_cast<T>(0.7546981889007411462781694774633148026087e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(6.5f), 15),
      static_cast<T>(0.1907317682145288112321802221418917179108e23L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(0.125)),
      static_cast<T>(0.6269594274937989002088018861086916177919e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(0.25)),
      static_cast<T>(0.6658490275363084021087445307784946635365e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(0.75)),
      static_cast<T>(0.1405600108406208315070529124568565748632e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7546981889007411462781694774633148026087e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15c, static_cast<T>(6.5f)),
      static_cast<T>(0.1907317682145288112321802221418917179108e23L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15a, static_cast<T>(0.125)),
      static_cast<T>(0.6269594274937989002088018861086916177919e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15a, static_cast<T>(0.25)),
      static_cast<T>(0.6658490275363084021087445307784946635365e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15a, static_cast<T>(0.75)),
      static_cast<T>(0.1405600108406208315070529124568565748632e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7546981889007411462781694774633148026087e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n15a, static_cast<T>(6.5f)),
      static_cast<T>(0.1907317682145288112321802221418917179108e23L),
      tolerance);
   //
   // Rational functions of order 14
   //
   static const U d15c[15] = { 7, 10, 7, 1, 10, 11, 11, 10, 7, 1, 10, 9, 8, 2, 3 };
   static const std::array<U, 15> d15a = {{ 7, 10, 7, 1, 10, 11, 11, 10, 7, 1, 10, 9, 8, 2, 3 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(0.125), 15),
      static_cast<T>(0.7665435387801205084357966990293734431712e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(0.25), 15),
      static_cast<T>(0.7179510450452743437979498898508621162489e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(0.75), 15),
      static_cast<T>(0.7245051156202447814210400449367214490615e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(1.0f - 1.0f/64.0f), 15),
      static_cast<T>(0.8564567127146107292325365412425895512358e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(6.5f), 15),
      static_cast<T>(0.8943937154363365123476971638815814742919e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(10247.25f), 15),
      static_cast<T>(0.6668184674989563469735607034881326982176e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(0.125)),
      static_cast<T>(0.7665435387801205084357966990293734431712e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(0.25)),
      static_cast<T>(0.7179510450452743437979498898508621162489e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(0.75)),
      static_cast<T>(0.7245051156202447814210400449367214490615e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8564567127146107292325365412425895512358e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(6.5f)),
      static_cast<T>(0.8943937154363365123476971638815814742919e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15c, d15c, static_cast<T>(10247.25f)),
      static_cast<T>(0.6668184674989563469735607034881326982176e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15a, d15a, static_cast<T>(0.125)),
      static_cast<T>(0.7665435387801205084357966990293734431712e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15a, d15a, static_cast<T>(0.25)),
      static_cast<T>(0.7179510450452743437979498898508621162489e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15a, d15a, static_cast<T>(0.75)),
      static_cast<T>(0.7245051156202447814210400449367214490615e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15a, d15a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8564567127146107292325365412425895512358e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15a, d15a, static_cast<T>(6.5f)),
      static_cast<T>(0.8943937154363365123476971638815814742919e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n15a, d15a, static_cast<T>(10247.25f)),
      static_cast<T>(0.6668184674989563469735607034881326982176e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots15(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 15
   //
   static const U n16c[16] = { 5, 3, 4, 6, 7, 9, 7, 6, 12, 12, 7, 12, 10, 3, 6, 2 };
   static const std::array<U, 16> n16a = {{ 5, 3, 4, 6, 7, 9, 7, 6, 12, 12, 7, 12, 10, 3, 6, 2 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(0.125), 16),
      static_cast<T>(0.545123276921327715172083117067813873291e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(0.25), 16),
      static_cast<T>(0.613219709135591983795166015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(0.75), 16),
      static_cast<T>(0.2195364624075591564178466796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(1.0f - 1.0f/64.0f), 16),
      static_cast<T>(0.9836568924934260045838041177111855604603e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(6.5), 16),
      static_cast<T>(0.474557924297607818603515625e13L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(0.125)),
      static_cast<T>(0.545123276921327715172083117067813873291e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(0.25)),
      static_cast<T>(0.613219709135591983795166015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(0.75)),
      static_cast<T>(0.2195364624075591564178466796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9836568924934260045838041177111855604603e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16c, static_cast<T>(6.5)),
      static_cast<T>(0.474557924297607818603515625e13L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16a, static_cast<T>(0.125)),
      static_cast<T>(0.545123276921327715172083117067813873291e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16a, static_cast<T>(0.25)),
      static_cast<T>(0.613219709135591983795166015625e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16a, static_cast<T>(0.75)),
      static_cast<T>(0.2195364624075591564178466796875e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9836568924934260045838041177111855604603e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n16a, static_cast<T>(6.5)),
      static_cast<T>(0.474557924297607818603515625e13L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(0.125), 16),
      static_cast<T>(0.5047874876401281302859159688868887179229e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(0.25), 16),
      static_cast<T>(0.5204705680902215943553490440365294489311e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(0.75), 16),
      static_cast<T>(0.1080276729363941941482185615797106947866e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(1.0f - 1.0f/64.0f), 16),
      static_cast<T>(0.8750139513999183433264859554731006794881e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(6.5f), 16),
      static_cast<T>(0.5231073382834479254225049897383445873857e25L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(0.125)),
      static_cast<T>(0.5047874876401281302859159688868887179229e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(0.25)),
      static_cast<T>(0.5204705680902215943553490440365294489311e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(0.75)),
      static_cast<T>(0.1080276729363941941482185615797106947866e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8750139513999183433264859554731006794881e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16c, static_cast<T>(6.5f)),
      static_cast<T>(0.5231073382834479254225049897383445873857e25L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16a, static_cast<T>(0.125)),
      static_cast<T>(0.5047874876401281302859159688868887179229e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16a, static_cast<T>(0.25)),
      static_cast<T>(0.5204705680902215943553490440365294489311e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16a, static_cast<T>(0.75)),
      static_cast<T>(0.1080276729363941941482185615797106947866e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8750139513999183433264859554731006794881e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n16a, static_cast<T>(6.5f)),
      static_cast<T>(0.5231073382834479254225049897383445873857e25L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(0.125), 16),
      static_cast<T>(0.5382999011210250422873277510951097433836e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(0.25), 16),
      static_cast<T>(0.5818822723608863774213961761461177957244e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(0.75), 16),
      static_cast<T>(0.1273702305818589255309580821062809263822e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(1.0f - 1.0f/64.0f), 16),
      static_cast<T>(0.8881094109459487932205571611155308490038e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(6.5f), 16),
      static_cast<T>(0.8047805204360737314192426765205301344395e24L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(0.125)),
      static_cast<T>(0.5382999011210250422873277510951097433836e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(0.25)),
      static_cast<T>(0.5818822723608863774213961761461177957244e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(0.75)),
      static_cast<T>(0.1273702305818589255309580821062809263822e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8881094109459487932205571611155308490038e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16c, static_cast<T>(6.5f)),
      static_cast<T>(0.8047805204360737314192426765205301344395e24L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16a, static_cast<T>(0.125)),
      static_cast<T>(0.5382999011210250422873277510951097433836e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16a, static_cast<T>(0.25)),
      static_cast<T>(0.5818822723608863774213961761461177957244e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16a, static_cast<T>(0.75)),
      static_cast<T>(0.1273702305818589255309580821062809263822e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8881094109459487932205571611155308490038e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n16a, static_cast<T>(6.5f)),
      static_cast<T>(0.8047805204360737314192426765205301344395e24L),
      tolerance);
   //
   // Rational functions of order 15
   //
   static const U d16c[16] = { 9, 5, 2, 4, 4, 12, 11, 5, 1, 4, 1, 7, 9, 6, 6, 10 };
   static const std::array<U, 16> d16a = {{ 9, 5, 2, 4, 4, 12, 11, 5, 1, 4, 1, 7, 9, 6, 6, 10 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(0.125), 16),
      static_cast<T>(0.5639916333371058636233240074655101514789e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(0.25), 16),
      static_cast<T>(0.5858114501425065583332351775671440891069e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(0.75), 16),
      static_cast<T>(0.9254727283150680371198227978127749853934e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(1.0f - 1.0f/64.0f), 16),
      static_cast<T>(0.1155192269792597191440811772688208898465e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(6.5f), 16),
      static_cast<T>(0.2736469218296852258039959401695110274611e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(10247.25f), 16),
      static_cast<T>(0.2000468408076577399196121638600795513365e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(0.125)),
      static_cast<T>(0.5639916333371058636233240074655101514789e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(0.25)),
      static_cast<T>(0.5858114501425065583332351775671440891069e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(0.75)),
      static_cast<T>(0.9254727283150680371198227978127749853934e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1155192269792597191440811772688208898465e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(6.5f)),
      static_cast<T>(0.2736469218296852258039959401695110274611e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16c, d16c, static_cast<T>(10247.25f)),
      static_cast<T>(0.2000468408076577399196121638600795513365e0L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16a, d16a, static_cast<T>(0.125)),
      static_cast<T>(0.5639916333371058636233240074655101514789e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16a, d16a, static_cast<T>(0.25)),
      static_cast<T>(0.5858114501425065583332351775671440891069e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16a, d16a, static_cast<T>(0.75)),
      static_cast<T>(0.9254727283150680371198227978127749853934e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16a, d16a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.1155192269792597191440811772688208898465e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16a, d16a, static_cast<T>(6.5f)),
      static_cast<T>(0.2736469218296852258039959401695110274611e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n16a, d16a, static_cast<T>(10247.25f)),
      static_cast<T>(0.2000468408076577399196121638600795513365e0L),
      tolerance);
}

template <class T, class U>
void do_test_spots16(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 16
   //
   static const U n17c[17] = { 9, 6, 11, 2, 9, 10, 6, 3, 3, 3, 4, 9, 10, 2, 3, 2, 2 };
   static const std::array<U, 17> n17a = {{ 9, 6, 11, 2, 9, 10, 6, 3, 3, 3, 4, 9, 10, 2, 3, 2, 2 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(0.125), 17),
      static_cast<T>(0.9928308216189925872185995103791356086731e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(0.25), 17),
      static_cast<T>(0.112653836444951593875885009765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(0.75), 17),
      static_cast<T>(0.288157429718412458896636962890625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(1.0f - 1.0f/64.0f), 17),
      static_cast<T>(0.8499409476622319741012411965028222548509e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(6.5), 17),
      static_cast<T>(0.24291309657542805938720703125e14L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(0.125)),
      static_cast<T>(0.9928308216189925872185995103791356086731e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(0.25)),
      static_cast<T>(0.112653836444951593875885009765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(0.75)),
      static_cast<T>(0.288157429718412458896636962890625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8499409476622319741012411965028222548509e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17c, static_cast<T>(6.5)),
      static_cast<T>(0.24291309657542805938720703125e14L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17a, static_cast<T>(0.125)),
      static_cast<T>(0.9928308216189925872185995103791356086731e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17a, static_cast<T>(0.25)),
      static_cast<T>(0.112653836444951593875885009765625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17a, static_cast<T>(0.75)),
      static_cast<T>(0.288157429718412458896636962890625e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8499409476622319741012411965028222548509e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n17a, static_cast<T>(6.5)),
      static_cast<T>(0.24291309657542805938720703125e14L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(0.125), 17),
      static_cast<T>(0.9096443722112564415334975111453014308977e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(0.25), 17),
      static_cast<T>(0.9418604266644799371155545586464796770088e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(0.75), 17),
      static_cast<T>(0.1800748238050061998856161277204890325265e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(1.0f - 1.0f/64.0f), 17),
      static_cast<T>(0.7725414891276907880696219594586980069116e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(6.5f), 17),
      static_cast<T>(0.2112416072820759278619692697965107844211e27L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(0.125)),
      static_cast<T>(0.9096443722112564415334975111453014308977e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(0.25)),
      static_cast<T>(0.9418604266644799371155545586464796770088e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(0.75)),
      static_cast<T>(0.1800748238050061998856161277204890325265e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7725414891276907880696219594586980069116e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17c, static_cast<T>(6.5f)),
      static_cast<T>(0.2112416072820759278619692697965107844211e27L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17a, static_cast<T>(0.125)),
      static_cast<T>(0.9096443722112564415334975111453014308977e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17a, static_cast<T>(0.25)),
      static_cast<T>(0.9418604266644799371155545586464796770088e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17a, static_cast<T>(0.75)),
      static_cast<T>(0.1800748238050061998856161277204890325265e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7725414891276907880696219594586980069116e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n17a, static_cast<T>(6.5f)),
      static_cast<T>(0.2112416072820759278619692697965107844211e27L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(0.125), 17),
      static_cast<T>(0.9771549776900515322679800891624114471814e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(0.25), 17),
      static_cast<T>(0.1067441706657919748462218234585918708035e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(0.75), 17),
      static_cast<T>(0.210099765073341599847488170293985376702e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(1.0f - 1.0f/64.0f), 17),
      static_cast<T>(0.7833754810186065148643778635770900387673e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(6.5f), 17),
      static_cast<T>(0.3249870881262706582491835681484781298786e26L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(0.125)),
      static_cast<T>(0.9771549776900515322679800891624114471814e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(0.25)),
      static_cast<T>(0.1067441706657919748462218234585918708035e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(0.75)),
      static_cast<T>(0.210099765073341599847488170293985376702e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7833754810186065148643778635770900387673e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17c, static_cast<T>(6.5f)),
      static_cast<T>(0.3249870881262706582491835681484781298786e26L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17a, static_cast<T>(0.125)),
      static_cast<T>(0.9771549776900515322679800891624114471814e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17a, static_cast<T>(0.25)),
      static_cast<T>(0.1067441706657919748462218234585918708035e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17a, static_cast<T>(0.75)),
      static_cast<T>(0.210099765073341599847488170293985376702e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7833754810186065148643778635770900387673e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n17a, static_cast<T>(6.5f)),
      static_cast<T>(0.3249870881262706582491835681484781298786e26L),
      tolerance);
   //
   // Rational functions of order 16
   //
   static const U d17c[17] = { 7, 12, 3, 11, 10, 2, 5, 10, 4, 11, 10, 6, 2, 12, 1, 2, 1 };
   static const std::array<U, 17> d17a = {{ 7, 12, 3, 11, 10, 2, 5, 10, 4, 11, 10, 6, 2, 12, 1, 2, 1 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(0.125), 17),
      static_cast<T>(0.1158375951946763080209403673166347533318e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(0.25), 17),
      static_cast<T>(0.1082966720285644924561131930917359028989e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(0.75), 17),
      static_cast<T>(0.9405394059495731884564238556014726773139e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(1.0f - 1.0f/64.0f), 17),
      static_cast<T>(0.8654376623250381987950547557864849720673e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(6.5f), 17),
      static_cast<T>(0.1737601600028386310221746538845672721834e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(10247.25f), 17),
      static_cast<T>(0.1999804873273333726353229695741031917586e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(0.125)),
      static_cast<T>(0.1158375951946763080209403673166347533318e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(0.25)),
      static_cast<T>(0.1082966720285644924561131930917359028989e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(0.75)),
      static_cast<T>(0.9405394059495731884564238556014726773139e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8654376623250381987950547557864849720673e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(6.5f)),
      static_cast<T>(0.1737601600028386310221746538845672721834e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17c, d17c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1999804873273333726353229695741031917586e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17a, d17a, static_cast<T>(0.125)),
      static_cast<T>(0.1158375951946763080209403673166347533318e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17a, d17a, static_cast<T>(0.25)),
      static_cast<T>(0.1082966720285644924561131930917359028989e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17a, d17a, static_cast<T>(0.75)),
      static_cast<T>(0.9405394059495731884564238556014726773139e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17a, d17a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8654376623250381987950547557864849720673e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17a, d17a, static_cast<T>(6.5f)),
      static_cast<T>(0.1737601600028386310221746538845672721834e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n17a, d17a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1999804873273333726353229695741031917586e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots17(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 17
   //
   static const U n18c[18] = { 6, 5, 7, 8, 12, 9, 4, 1, 3, 5, 1, 5, 12, 8, 4, 6, 1, 10 };
   static const std::array<U, 18> n18a = {{ 6, 5, 7, 8, 12, 9, 4, 1, 3, 5, 1, 5, 12, 8, 4, 6, 1, 10 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(0.125), 18),
      static_cast<T>(0.6753220299099845114199069939786568284035e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(0.25), 18),
      static_cast<T>(0.7869269511546008288860321044921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(0.75), 18),
      static_cast<T>(0.25590585466590709984302520751953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(1.0f - 1.0f/64.0f), 18),
      static_cast<T>(0.9432688198514753127308115619023015607828e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(6.5), 18),
      static_cast<T>(0.680830157865510950897216796875e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(0.125)),
      static_cast<T>(0.6753220299099845114199069939786568284035e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(0.25)),
      static_cast<T>(0.7869269511546008288860321044921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(0.75)),
      static_cast<T>(0.25590585466590709984302520751953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9432688198514753127308115619023015607828e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18c, static_cast<T>(6.5)),
      static_cast<T>(0.680830157865510950897216796875e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18a, static_cast<T>(0.125)),
      static_cast<T>(0.6753220299099845114199069939786568284035e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18a, static_cast<T>(0.25)),
      static_cast<T>(0.7869269511546008288860321044921875e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18a, static_cast<T>(0.75)),
      static_cast<T>(0.25590585466590709984302520751953125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9432688198514753127308115619023015607828e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n18a, static_cast<T>(6.5)),
      static_cast<T>(0.680830157865510950897216796875e15L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(0.125), 18),
      static_cast<T>(0.6079865225649211447450201991749585071453e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(0.25), 18),
      static_cast<T>(0.6341988806453956744898332268528529098717e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(0.75), 18),
      static_cast<T>(0.1439378129034890784564674906867431936064e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(1.0f - 1.0f/64.0f), 18),
      static_cast<T>(0.8374908316692411299816073455081075151876e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(6.5f), 18),
      static_cast<T>(0.4367459075155664096657376949959960997093e29L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(0.125)),
      static_cast<T>(0.6079865225649211447450201991749585071453e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(0.25)),
      static_cast<T>(0.6341988806453956744898332268528529098717e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(0.75)),
      static_cast<T>(0.1439378129034890784564674906867431936064e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8374908316692411299816073455081075151876e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18c, static_cast<T>(6.5f)),
      static_cast<T>(0.4367459075155664096657376949959960997093e29L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18a, static_cast<T>(0.125)),
      static_cast<T>(0.6079865225649211447450201991749585071453e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18a, static_cast<T>(0.25)),
      static_cast<T>(0.6341988806453956744898332268528529098717e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18a, static_cast<T>(0.75)),
      static_cast<T>(0.1439378129034890784564674906867431936064e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8374908316692411299816073455081075151876e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n18a, static_cast<T>(6.5f)),
      static_cast<T>(0.4367459075155664096657376949959960997093e29L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(0.125), 18),
      static_cast<T>(0.6638921805193691579601615933996680571626e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(0.25), 18),
      static_cast<T>(0.7367955225815826979593329074114116394867e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(0.75), 18),
      static_cast<T>(0.1719170838713187712752899875823242581419e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(1.0f - 1.0f/64.0f), 18),
      static_cast<T>(0.8498319559814513066479820652780774757461e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(6.5f), 18),
      static_cast<T>(0.6719167807931790917934426081938401533989e28L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(0.125)),
      static_cast<T>(0.6638921805193691579601615933996680571626e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(0.25)),
      static_cast<T>(0.7367955225815826979593329074114116394867e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(0.75)),
      static_cast<T>(0.1719170838713187712752899875823242581419e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8498319559814513066479820652780774757461e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18c, static_cast<T>(6.5f)),
      static_cast<T>(0.6719167807931790917934426081938401533989e28L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18a, static_cast<T>(0.125)),
      static_cast<T>(0.6638921805193691579601615933996680571626e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18a, static_cast<T>(0.25)),
      static_cast<T>(0.7367955225815826979593329074114116394867e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18a, static_cast<T>(0.75)),
      static_cast<T>(0.1719170838713187712752899875823242581419e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8498319559814513066479820652780774757461e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n18a, static_cast<T>(6.5f)),
      static_cast<T>(0.6719167807931790917934426081938401533989e28L),
      tolerance);
   //
   // Rational functions of order 17
   //
   static const U d18c[18] = { 6, 2, 11, 2, 12, 4, 1, 5, 7, 12, 5, 7, 5, 7, 5, 7, 2, 9 };
   static const std::array<U, 18> d18a = {{ 6, 2, 11, 2, 12, 4, 1, 5, 7, 12, 5, 7, 5, 7, 5, 7, 2, 9 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(0.125), 18),
      static_cast<T>(0.1050457095586493221315235501384188635425e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(0.25), 18),
      static_cast<T>(0.1082394733850278225180153358339433604182e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(0.75), 18),
      static_cast<T>(0.1117650157149023587583496399377426188558e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(1.0f - 1.0f/64.0f), 18),
      static_cast<T>(0.9882013696252427983431096654690843223851e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(6.5f), 18),
      static_cast<T>(0.1086348665080997883580887205673821889245e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(10247.25f), 18),
      static_cast<T>(0.1111097856940394090609547290690047016487e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(0.125)),
      static_cast<T>(0.1050457095586493221315235501384188635425e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(0.25)),
      static_cast<T>(0.1082394733850278225180153358339433604182e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(0.75)),
      static_cast<T>(0.1117650157149023587583496399377426188558e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9882013696252427983431096654690843223851e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(6.5f)),
      static_cast<T>(0.1086348665080997883580887205673821889245e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18c, d18c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1111097856940394090609547290690047016487e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18a, d18a, static_cast<T>(0.125)),
      static_cast<T>(0.1050457095586493221315235501384188635425e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18a, d18a, static_cast<T>(0.25)),
      static_cast<T>(0.1082394733850278225180153358339433604182e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18a, d18a, static_cast<T>(0.75)),
      static_cast<T>(0.1117650157149023587583496399377426188558e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18a, d18a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.9882013696252427983431096654690843223851e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18a, d18a, static_cast<T>(6.5f)),
      static_cast<T>(0.1086348665080997883580887205673821889245e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n18a, d18a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1111097856940394090609547290690047016487e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots18(T, U)
{
   //
   // Tolerance is 4 eps expressed as a percentage:
   //
   T tolerance = boost::math::tools::epsilon<T>() * 4 * 100;

   //
   // Polynomials of order 18
   //
   static const U n19c[19] = { 7, 2, 4, 2, 4, 3, 9, 1, 9, 3, 7, 2, 10, 4, 2, 5, 11, 3, 9 };
   static const std::array<U, 19> n19a = {{ 7, 2, 4, 2, 4, 3, 9, 1, 9, 3, 7, 2, 10, 4, 2, 5, 11, 3, 9 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(0.125), 19),
      static_cast<T>(0.7317509740045990140888676478425622917712e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(0.25), 19),
      static_cast<T>(0.7802219584656995721161365509033203125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(0.75), 19),
      static_cast<T>(0.17609299321266007609665393829345703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(1.0f - 1.0f/64.0f), 19),
      static_cast<T>(0.8327888521934174049333133442289010778727e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(6.5), 19),
      static_cast<T>(0.4179028813935817562572479248046875e16L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(0.125)),
      static_cast<T>(0.7317509740045990140888676478425622917712e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(0.25)),
      static_cast<T>(0.7802219584656995721161365509033203125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(0.75)),
      static_cast<T>(0.17609299321266007609665393829345703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8327888521934174049333133442289010778727e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19c, static_cast<T>(6.5)),
      static_cast<T>(0.4179028813935817562572479248046875e16L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19a, static_cast<T>(0.125)),
      static_cast<T>(0.7317509740045990140888676478425622917712e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19a, static_cast<T>(0.25)),
      static_cast<T>(0.7802219584656995721161365509033203125e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19a, static_cast<T>(0.75)),
      static_cast<T>(0.17609299321266007609665393829345703125e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8327888521934174049333133442289010778727e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_polynomial(n19a, static_cast<T>(6.5)),
      static_cast<T>(0.4179028813935817562572479248046875e16L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(0.125), 19),
      static_cast<T>(0.7032234433238304833197011488540991991734e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(0.25), 19),
      static_cast<T>(0.7141177719741940632063571816842174888595e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(0.75), 19),
      static_cast<T>(0.107671418972012709727788225142148040292e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(1.0f - 1.0f/64.0f), 19),
      static_cast<T>(0.7205306905267900876445365429703520869133e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(6.5f), 19),
      static_cast<T>(0.1670453627683043936397442394984734181614e31L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(0.125)),
      static_cast<T>(0.7032234433238304833197011488540991991734e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(0.25)),
      static_cast<T>(0.7141177719741940632063571816842174888595e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(0.75)),
      static_cast<T>(0.107671418972012709727788225142148040292e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7205306905267900876445365429703520869133e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19c, static_cast<T>(6.5f)),
      static_cast<T>(0.1670453627683043936397442394984734181614e31L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19a, static_cast<T>(0.125)),
      static_cast<T>(0.7032234433238304833197011488540991991734e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19a, static_cast<T>(0.25)),
      static_cast<T>(0.7141177719741940632063571816842174888595e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19a, static_cast<T>(0.75)),
      static_cast<T>(0.107671418972012709727788225142148040292e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7205306905267900876445365429703520869133e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_even_polynomial(n19a, static_cast<T>(6.5f)),
      static_cast<T>(0.1670453627683043936397442394984734181614e31L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(0.125), 19),
      static_cast<T>(0.7257875465906438665576091908327935933871e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(0.25), 19),
      static_cast<T>(0.7564710878967762528254287267368699554382e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(0.75), 19),
      static_cast<T>(0.120228558629350279637050966856197387056e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(1.0f - 1.0f/64.0f), 19),
      static_cast<T>(0.7308565745034058033214339484143259295627e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(6.5f), 19),
      static_cast<T>(0.2569928657973913748303757530804975664022e30L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(0.125)),
      static_cast<T>(0.7257875465906438665576091908327935933871e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(0.25)),
      static_cast<T>(0.7564710878967762528254287267368699554382e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(0.75)),
      static_cast<T>(0.120228558629350279637050966856197387056e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7308565745034058033214339484143259295627e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19c, static_cast<T>(6.5f)),
      static_cast<T>(0.2569928657973913748303757530804975664022e30L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19a, static_cast<T>(0.125)),
      static_cast<T>(0.7257875465906438665576091908327935933871e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19a, static_cast<T>(0.25)),
      static_cast<T>(0.7564710878967762528254287267368699554382e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19a, static_cast<T>(0.75)),
      static_cast<T>(0.120228558629350279637050966856197387056e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.7308565745034058033214339484143259295627e2L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_odd_polynomial(n19a, static_cast<T>(6.5f)),
      static_cast<T>(0.2569928657973913748303757530804975664022e30L),
      tolerance);
   //
   // Rational functions of order 18
   //
   static const U d19c[19] = { 3, 2, 3, 3, 10, 6, 2, 6, 9, 8, 8, 10, 5, 7, 6, 4, 6, 9, 7 };
   static const std::array<U, 19> d19a = {{ 3, 2, 3, 3, 10, 6, 2, 6, 9, 8, 8, 10, 5, 7, 6, 4, 6, 9, 7 }};
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(0.125), 19),
      static_cast<T>(0.2213824709533496994632324982010106870288e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(0.25), 19),
      static_cast<T>(0.2063899260318829004588039751781791436716e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(0.75), 19),
      static_cast<T>(0.1085337280046506127330919833145641152667e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(1.0f - 1.0f/64.0f), 19),
      static_cast<T>(0.8530644127293554041631338796773621506306e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(6.5f), 19),
      static_cast<T>(0.1140014406058131768268407547610620204626e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(10247.25f), 19),
      static_cast<T>(0.1285594810697167354761598106316532892359e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(0.125)),
      static_cast<T>(0.2213824709533496994632324982010106870288e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(0.25)),
      static_cast<T>(0.2063899260318829004588039751781791436716e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(0.75)),
      static_cast<T>(0.1085337280046506127330919833145641152667e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8530644127293554041631338796773621506306e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(6.5f)),
      static_cast<T>(0.1140014406058131768268407547610620204626e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19c, d19c, static_cast<T>(10247.25f)),
      static_cast<T>(0.1285594810697167354761598106316532892359e1L),
      tolerance);

   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19a, d19a, static_cast<T>(0.125)),
      static_cast<T>(0.2213824709533496994632324982010106870288e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19a, d19a, static_cast<T>(0.25)),
      static_cast<T>(0.2063899260318829004588039751781791436716e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19a, d19a, static_cast<T>(0.75)),
      static_cast<T>(0.1085337280046506127330919833145641152667e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19a, d19a, static_cast<T>(1.0f - 1.0f/64.0f)),
      static_cast<T>(0.8530644127293554041631338796773621506306e0L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19a, d19a, static_cast<T>(6.5f)),
      static_cast<T>(0.1140014406058131768268407547610620204626e1L),
      tolerance);
   BOOST_CHECK_CLOSE(
      boost::math::tools::evaluate_rational(n19a, d19a, static_cast<T>(10247.25f)),
      static_cast<T>(0.1285594810697167354761598106316532892359e1L),
      tolerance);
}

template <class T, class U>
void do_test_spots(T t, U u)
{
   do_test_spots1(t, u);
   do_test_spots2(t, u);
   do_test_spots3(t, u);
   do_test_spots4(t, u);
   do_test_spots5(t, u);
   do_test_spots6(t, u);
   do_test_spots7(t, u);
   do_test_spots8(t, u);
   do_test_spots9(t, u);
   do_test_spots10(t, u);
   do_test_spots11(t, u);
   do_test_spots12(t, u);
   do_test_spots13(t, u);
   do_test_spots14(t, u);
   do_test_spots15(t, u);
   do_test_spots16(t, u);
   do_test_spots17(t, u);
   do_test_spots18(t, u);
}

#endif
