﻿/**
 *	@file	unit_test_fnd_cmath_double_factorial.cpp
 *
 *	@brief	double_factorial のテスト
 *
 *	@author	myoukaku
 */

#include <bksge/fnd/cmath/double_factorial.hpp>
#include <gtest/gtest.h>
#include <limits>
#include <cstdint>
#include "constexpr_test.hpp"

namespace bksge_cmath_test
{

namespace double_factorial_test
{

GTEST_TEST(CMathTest, DoubleFactorialTest)
{
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  1, bksge::double_factorial<std::int8_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  1, bksge::double_factorial<std::int8_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  2, bksge::double_factorial<std::int8_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  3, bksge::double_factorial<std::int8_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  8, bksge::double_factorial<std::int8_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 15, bksge::double_factorial<std::int8_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 48, bksge::double_factorial<std::int8_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(105, bksge::double_factorial<std::int8_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  0, bksge::double_factorial<std::int8_t>( 8));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  1U, bksge::double_factorial<std::uint8_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  1U, bksge::double_factorial<std::uint8_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  2U, bksge::double_factorial<std::uint8_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  3U, bksge::double_factorial<std::uint8_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  8U, bksge::double_factorial<std::uint8_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 15U, bksge::double_factorial<std::uint8_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 48U, bksge::double_factorial<std::uint8_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(105U, bksge::double_factorial<std::uint8_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  0U, bksge::double_factorial<std::uint8_t>( 8));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    1, bksge::double_factorial<std::int16_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    1, bksge::double_factorial<std::int16_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    2, bksge::double_factorial<std::int16_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    3, bksge::double_factorial<std::int16_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    8, bksge::double_factorial<std::int16_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   15, bksge::double_factorial<std::int16_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   48, bksge::double_factorial<std::int16_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  105, bksge::double_factorial<std::int16_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  384, bksge::double_factorial<std::int16_t>( 8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  945, bksge::double_factorial<std::int16_t>( 9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 3840, bksge::double_factorial<std::int16_t>(10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(10395, bksge::double_factorial<std::int16_t>(11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    0, bksge::double_factorial<std::int16_t>(12));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    1U, bksge::double_factorial<std::uint16_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    1U, bksge::double_factorial<std::uint16_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    2U, bksge::double_factorial<std::uint16_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    3U, bksge::double_factorial<std::uint16_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    8U, bksge::double_factorial<std::uint16_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   15U, bksge::double_factorial<std::uint16_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   48U, bksge::double_factorial<std::uint16_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  105U, bksge::double_factorial<std::uint16_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  384U, bksge::double_factorial<std::uint16_t>( 8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  945U, bksge::double_factorial<std::uint16_t>( 9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 3840U, bksge::double_factorial<std::uint16_t>(10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(10395U, bksge::double_factorial<std::uint16_t>(11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(46080U, bksge::double_factorial<std::uint16_t>(12));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    0U, bksge::double_factorial<std::uint16_t>(13));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        1, bksge::double_factorial<std::int32_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        1, bksge::double_factorial<std::int32_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        2, bksge::double_factorial<std::int32_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        3, bksge::double_factorial<std::int32_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        8, bksge::double_factorial<std::int32_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(       15, bksge::double_factorial<std::int32_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(       48, bksge::double_factorial<std::int32_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      105, bksge::double_factorial<std::int32_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      384, bksge::double_factorial<std::int32_t>( 8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      945, bksge::double_factorial<std::int32_t>( 9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(     3840, bksge::double_factorial<std::int32_t>(10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    10395, bksge::double_factorial<std::int32_t>(11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    46080, bksge::double_factorial<std::int32_t>(12));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   135135, bksge::double_factorial<std::int32_t>(13));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   645120, bksge::double_factorial<std::int32_t>(14));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  2027025, bksge::double_factorial<std::int32_t>(15));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 10321920, bksge::double_factorial<std::int32_t>(16));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 34459425, bksge::double_factorial<std::int32_t>(17));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(185794560, bksge::double_factorial<std::int32_t>(18));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(654729075, bksge::double_factorial<std::int32_t>(19));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        0, bksge::double_factorial<std::int32_t>(20));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         1U, bksge::double_factorial<std::uint32_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         1U, bksge::double_factorial<std::uint32_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         2U, bksge::double_factorial<std::uint32_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         3U, bksge::double_factorial<std::uint32_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         8U, bksge::double_factorial<std::uint32_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        15U, bksge::double_factorial<std::uint32_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        48U, bksge::double_factorial<std::uint32_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(       105U, bksge::double_factorial<std::uint32_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(       384U, bksge::double_factorial<std::uint32_t>( 8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(       945U, bksge::double_factorial<std::uint32_t>( 9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      3840U, bksge::double_factorial<std::uint32_t>(10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(     10395U, bksge::double_factorial<std::uint32_t>(11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(     46080U, bksge::double_factorial<std::uint32_t>(12));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    135135U, bksge::double_factorial<std::uint32_t>(13));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    645120U, bksge::double_factorial<std::uint32_t>(14));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   2027025U, bksge::double_factorial<std::uint32_t>(15));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  10321920U, bksge::double_factorial<std::uint32_t>(16));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  34459425U, bksge::double_factorial<std::uint32_t>(17));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 185794560U, bksge::double_factorial<std::uint32_t>(18));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 654729075U, bksge::double_factorial<std::uint32_t>(19));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3715891200U, bksge::double_factorial<std::uint32_t>(20));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         0U, bksge::double_factorial<std::uint32_t>(21));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  1LL, bksge::double_factorial<std::int64_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  1LL, bksge::double_factorial<std::int64_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  2LL, bksge::double_factorial<std::int64_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  3LL, bksge::double_factorial<std::int64_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  8LL, bksge::double_factorial<std::int64_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                 15LL, bksge::double_factorial<std::int64_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                 48LL, bksge::double_factorial<std::int64_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                105LL, bksge::double_factorial<std::int64_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                384LL, bksge::double_factorial<std::int64_t>( 8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                945LL, bksge::double_factorial<std::int64_t>( 9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(               3840LL, bksge::double_factorial<std::int64_t>(10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(              10395LL, bksge::double_factorial<std::int64_t>(11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(              46080LL, bksge::double_factorial<std::int64_t>(12));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(             135135LL, bksge::double_factorial<std::int64_t>(13));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(             645120LL, bksge::double_factorial<std::int64_t>(14));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(            2027025LL, bksge::double_factorial<std::int64_t>(15));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(           10321920LL, bksge::double_factorial<std::int64_t>(16));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(           34459425LL, bksge::double_factorial<std::int64_t>(17));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(          185794560LL, bksge::double_factorial<std::int64_t>(18));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(          654729075LL, bksge::double_factorial<std::int64_t>(19));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         3715891200LL, bksge::double_factorial<std::int64_t>(20));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        13749310575LL, bksge::double_factorial<std::int64_t>(21));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        81749606400LL, bksge::double_factorial<std::int64_t>(22));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(       316234143225LL, bksge::double_factorial<std::int64_t>(23));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      1961990553600LL, bksge::double_factorial<std::int64_t>(24));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      7905853580625LL, bksge::double_factorial<std::int64_t>(25));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(     51011754393600LL, bksge::double_factorial<std::int64_t>(26));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    213458046676875LL, bksge::double_factorial<std::int64_t>(27));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   1428329123020800LL, bksge::double_factorial<std::int64_t>(28));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   6190283353629375LL, bksge::double_factorial<std::int64_t>(29));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  42849873690624000LL, bksge::double_factorial<std::int64_t>(30));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 191898783962510625LL, bksge::double_factorial<std::int64_t>(31));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1371195958099968000LL, bksge::double_factorial<std::int64_t>(32));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6332659870762850625LL, bksge::double_factorial<std::int64_t>(33));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  0LL, bksge::double_factorial<std::int64_t>(34));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  1ULL, bksge::double_factorial<std::uint64_t>( 0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  1ULL, bksge::double_factorial<std::uint64_t>( 1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  2ULL, bksge::double_factorial<std::uint64_t>( 2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  3ULL, bksge::double_factorial<std::uint64_t>( 3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  8ULL, bksge::double_factorial<std::uint64_t>( 4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                 15ULL, bksge::double_factorial<std::uint64_t>( 5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                 48ULL, bksge::double_factorial<std::uint64_t>( 6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                105ULL, bksge::double_factorial<std::uint64_t>( 7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                384ULL, bksge::double_factorial<std::uint64_t>( 8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                945ULL, bksge::double_factorial<std::uint64_t>( 9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(               3840ULL, bksge::double_factorial<std::uint64_t>(10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(              10395ULL, bksge::double_factorial<std::uint64_t>(11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(              46080ULL, bksge::double_factorial<std::uint64_t>(12));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(             135135ULL, bksge::double_factorial<std::uint64_t>(13));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(             645120ULL, bksge::double_factorial<std::uint64_t>(14));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(            2027025ULL, bksge::double_factorial<std::uint64_t>(15));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(           10321920ULL, bksge::double_factorial<std::uint64_t>(16));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(           34459425ULL, bksge::double_factorial<std::uint64_t>(17));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(          185794560ULL, bksge::double_factorial<std::uint64_t>(18));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(          654729075ULL, bksge::double_factorial<std::uint64_t>(19));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(         3715891200ULL, bksge::double_factorial<std::uint64_t>(20));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        13749310575ULL, bksge::double_factorial<std::uint64_t>(21));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(        81749606400ULL, bksge::double_factorial<std::uint64_t>(22));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(       316234143225ULL, bksge::double_factorial<std::uint64_t>(23));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      1961990553600ULL, bksge::double_factorial<std::uint64_t>(24));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(      7905853580625ULL, bksge::double_factorial<std::uint64_t>(25));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(     51011754393600ULL, bksge::double_factorial<std::uint64_t>(26));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(    213458046676875ULL, bksge::double_factorial<std::uint64_t>(27));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   1428329123020800ULL, bksge::double_factorial<std::uint64_t>(28));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(   6190283353629375ULL, bksge::double_factorial<std::uint64_t>(29));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(  42849873690624000ULL, bksge::double_factorial<std::uint64_t>(30));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ( 191898783962510625ULL, bksge::double_factorial<std::uint64_t>(31));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1371195958099968000ULL, bksge::double_factorial<std::uint64_t>(32));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6332659870762850625ULL, bksge::double_factorial<std::uint64_t>(33));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(                  0ULL, bksge::double_factorial<std::uint64_t>(34));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.0f,                          bksge::double_factorial<float>(  0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.0f,                          bksge::double_factorial<float>(  1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.0f,                          bksge::double_factorial<float>(  2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.0f,                          bksge::double_factorial<float>(  3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.0f,                          bksge::double_factorial<float>(  4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(15.0f,                         bksge::double_factorial<float>(  5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(48.0f,                         bksge::double_factorial<float>(  6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(105.0f,                        bksge::double_factorial<float>(  7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(384.0f,                        bksge::double_factorial<float>(  8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(945.0f,                        bksge::double_factorial<float>(  9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3840.0f,                       bksge::double_factorial<float>( 10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(10395.0f,                      bksge::double_factorial<float>( 11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(46080.0f,                      bksge::double_factorial<float>( 12));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(135135.0f,                     bksge::double_factorial<float>( 13));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(645120.0f,                     bksge::double_factorial<float>( 14));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2027025.0f,                    bksge::double_factorial<float>( 15));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(10321920.0f,                   bksge::double_factorial<float>( 16));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(34459425.0f,                   bksge::double_factorial<float>( 17));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(185794560.0f,                  bksge::double_factorial<float>( 18));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(654729075.0f,                  bksge::double_factorial<float>( 19));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3715891200.0f,                 bksge::double_factorial<float>( 20));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(13749310575.0f,                bksge::double_factorial<float>( 21));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(81749606400.0f,                bksge::double_factorial<float>( 22));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(316234143225.0f,               bksge::double_factorial<float>( 23));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1961990553600.0f,              bksge::double_factorial<float>( 24));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7905853580625.0f,              bksge::double_factorial<float>( 25));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(51011754393600.0f,             bksge::double_factorial<float>( 26));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(213458046676875.0f,            bksge::double_factorial<float>( 27));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1428329123020800.0f,           bksge::double_factorial<float>( 28));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6190283353629375.0f,           bksge::double_factorial<float>( 29));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(42849873690624000.0f,          bksge::double_factorial<float>( 30));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(191898783962510625.0f,         bksge::double_factorial<float>( 31));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1371195958099968000.0f,        bksge::double_factorial<float>( 32));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6332659870762850625.0f,        bksge::double_factorial<float>( 33));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(46620662575398912000.0f,       bksge::double_factorial<float>( 34));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(221643095476699771875.0f,      bksge::double_factorial<float>( 35));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1678343852714360832000.0f,     bksge::double_factorial<float>( 36));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8200794532637891559375.0f,     bksge::double_factorial<float>( 37));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.3777066403145711616E+22f,    bksge::double_factorial<float>( 38));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.198309867728777708156E+23f,  bksge::double_factorial<float>( 39));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.55108265612582846464E+24f,   bksge::double_factorial<float>( 40));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.311307045768798860344E+25f,  bksge::double_factorial<float>( 41));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.071454715572847955149E+26f,  bksge::double_factorial<float>( 42));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.63862029680583509948E+26f,   bksge::double_factorial<float>( 43));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.714400748520531002655E+27f,  bksge::double_factorial<float>( 44));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.537379133562625794766E+28f,  bksge::double_factorial<float>( 45));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.168624344319444261221E+29f,  bksge::double_factorial<float>( 46));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.19256819277443412354E+30f,   bksge::double_factorial<float>( 47));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.040939685273333245386E+31f,  bksge::double_factorial<float>( 48));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.843584144594727205346E+31f,  bksge::double_factorial<float>( 49));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.204698426366666226931E+32f,  bksge::double_factorial<float>( 50));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.980227913743310874726E+33f,  bksge::double_factorial<float>( 51));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.706443181710666438004E+34f,  bksge::double_factorial<float>( 52));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.579520794283954763605E+35f,  bksge::double_factorial<float>( 53));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.461479318123759876522E+36f,  bksge::double_factorial<float>( 54));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.687364368561751199827E+36f,  bksge::double_factorial<float>( 55));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.184284181493055308524E+37f,  bksge::double_factorial<float>( 56));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(std::numeric_limits<float>::infinity(),  bksge::double_factorial<float>( 57));
	}
	{
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.0,                          bksge::double_factorial<double>(  0));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.0,                          bksge::double_factorial<double>(  1));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.0,                          bksge::double_factorial<double>(  2));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.0,                          bksge::double_factorial<double>(  3));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.0,                          bksge::double_factorial<double>(  4));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(15.0,                         bksge::double_factorial<double>(  5));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(48.0,                         bksge::double_factorial<double>(  6));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(105.0,                        bksge::double_factorial<double>(  7));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(384.0,                        bksge::double_factorial<double>(  8));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(945.0,                        bksge::double_factorial<double>(  9));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3840.0,                       bksge::double_factorial<double>( 10));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(10395.0,                      bksge::double_factorial<double>( 11));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(46080.0,                      bksge::double_factorial<double>( 12));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(135135.0,                     bksge::double_factorial<double>( 13));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(645120.0,                     bksge::double_factorial<double>( 14));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2027025.0,                    bksge::double_factorial<double>( 15));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(10321920.0,                   bksge::double_factorial<double>( 16));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(34459425.0,                   bksge::double_factorial<double>( 17));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(185794560.0,                  bksge::double_factorial<double>( 18));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(654729075.0,                  bksge::double_factorial<double>( 19));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3715891200.0,                 bksge::double_factorial<double>( 20));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(13749310575.0,                bksge::double_factorial<double>( 21));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(81749606400.0,                bksge::double_factorial<double>( 22));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(316234143225.0,               bksge::double_factorial<double>( 23));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1961990553600.0,              bksge::double_factorial<double>( 24));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7905853580625.0,              bksge::double_factorial<double>( 25));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(51011754393600.0,             bksge::double_factorial<double>( 26));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(213458046676875.0,            bksge::double_factorial<double>( 27));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1428329123020800.0,           bksge::double_factorial<double>( 28));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6190283353629375.0,           bksge::double_factorial<double>( 29));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(42849873690624000.0,          bksge::double_factorial<double>( 30));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(191898783962510625.0,         bksge::double_factorial<double>( 31));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1371195958099968000.0,        bksge::double_factorial<double>( 32));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6332659870762850625.0,        bksge::double_factorial<double>( 33));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(46620662575398912000.0,       bksge::double_factorial<double>( 34));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(221643095476699771875.0,      bksge::double_factorial<double>( 35));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1678343852714360832000.0,     bksge::double_factorial<double>( 36));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8200794532637891559375.0,     bksge::double_factorial<double>( 37));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(63777066403145711616000.0,    bksge::double_factorial<double>( 38));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(319830986772877770815625.0,   bksge::double_factorial<double>( 39));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2551082656125828464640000.0,  bksge::double_factorial<double>( 40));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(13113070457687988603440625.0, bksge::double_factorial<double>( 41));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(107145471557284795514880000.0, bksge::double_factorial<double>( 42));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(563862029680583509947946875.0, bksge::double_factorial<double>( 43));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4714400748520531002654720000.0, bksge::double_factorial<double>( 44));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(25373791335626257947657609375.0, bksge::double_factorial<double>( 45));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(216862434431944426122117120000.0, bksge::double_factorial<double>( 46));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1192568192774434123539907640625.0, bksge::double_factorial<double>( 47));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(10409396852733332453861621760000.0, bksge::double_factorial<double>( 48));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(58435841445947272053455474390625.0, bksge::double_factorial<double>( 49));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(520469842636666622693081088000000.0, bksge::double_factorial<double>( 50));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.980227913743310874726E+33,  bksge::double_factorial<double>( 51));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.706443181710666438004E+34,  bksge::double_factorial<double>( 52));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.579520794283954763605E+35,  bksge::double_factorial<double>( 53));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.461479318123759876522E+36,  bksge::double_factorial<double>( 54));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.687364368561751199827E+36,  bksge::double_factorial<double>( 55));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.184284181493055308524E+37,  bksge::double_factorial<double>( 56));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.951797690080198183901E+38,  bksge::double_factorial<double>( 57));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.746884825265972078944E+39,  bksge::double_factorial<double>( 58));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.921560637147316928502E+40,  bksge::double_factorial<double>( 59));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.848130895159583247366E+41,  bksge::double_factorial<double>( 60));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.782151988659863326386E+42,  bksge::double_factorial<double>( 61));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.765841154998941613367E+43,  bksge::double_factorial<double>( 62));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.122755752855713895623E+44,  bksge::double_factorial<double>( 63));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.130138339199322632555E+45,  bksge::double_factorial<double>( 64));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.297912393562140321551E+45,  bksge::double_factorial<double>( 65));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.458913038715529374863E+46,  bksge::double_factorial<double>( 66));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.889601303686634015439E+47,  bksge::double_factorial<double>( 67));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.072060866326559974907E+48,  bksge::double_factorial<double>( 68));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.373824899543777470653E+49,  bksge::double_factorial<double>( 69));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.550442606428591982435E+50,  bksge::double_factorial<double>( 70));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.395415678676082004164E+51,  bksge::double_factorial<double>( 71));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.556318676628586227353E+52,  bksge::double_factorial<double>( 72));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.74865344543353986304E+53,   bksge::double_factorial<double>( 73));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.891675820705153808241E+54,  bksge::double_factorial<double>( 74));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.31149008407515489728E+55,   bksge::double_factorial<double>( 75));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.437673623735916894263E+56,  bksge::double_factorial<double>( 76));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.009847364737869270905E+57,  bksge::double_factorial<double>( 77));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.121385426514015177525E+58,  bksge::double_factorial<double>( 78));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.977794181429167240152E+58,  bksge::double_factorial<double>( 79));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.971083412112121420203E+59,  bksge::double_factorial<double>( 80));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.462013286957625464523E+60,  bksge::double_factorial<double>( 81));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.356288397931939564567E+61,  bksge::double_factorial<double>( 82));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.363471028174829135554E+62,  bksge::double_factorial<double>( 83));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.179282254262829234236E+63,  bksge::double_factorial<double>( 84));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.558950373948604765221E+64,  bksge::double_factorial<double>( 85));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.314182738666033141443E+65,  bksge::double_factorial<double>( 86));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.966286825335286145742E+66,  bksge::double_factorial<double>( 87));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.67648081002610916447E+67,   bksge::double_factorial<double>( 88));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.529995274548404669711E+68,  bksge::double_factorial<double>( 89));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.208832729023498248023E+69,  bksge::double_factorial<double>( 90));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.212295699839048249437E+70,  bksge::double_factorial<double>( 91));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.872126110701618388181E+71,  bksge::double_factorial<double>( 92));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.987435000850314871976E+72,  bksge::double_factorial<double>( 93));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.63979854405952128489E+73,   bksge::double_factorial<double>( 94));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.838063250807799128377E+74,  bksge::double_factorial<double>( 95));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.494206602297140433495E+75,  bksge::double_factorial<double>( 96));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.752921353283565154526E+76,  bksge::double_factorial<double>( 97));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.424322470251197624825E+77,  bksge::double_factorial<double>( 98));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.725392139750729502981E+78,  bksge::double_factorial<double>( 99));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.424322470251197624825E+79,  bksge::double_factorial<double>(100));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.752646061148236798011E+80,  bksge::double_factorial<double>(101));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.492808919656221577321E+81,  bksge::double_factorial<double>(102));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.835225442982683901951E+82,  bksge::double_factorial<double>(103));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.632521276442470440414E+83,  bksge::double_factorial<double>(104));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.976986715131818097048E+84,  bksge::double_factorial<double>(105));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.850472553029018666839E+85,  bksge::double_factorial<double>(106));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.185375785191045363842E+86,  bksge::double_factorial<double>(107));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.158510357271340160186E+87,  bksge::double_factorial<double>(108));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.472059605858239446588E+88,  bksge::double_factorial<double>(109));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.574361392998474176205E+89,  bksge::double_factorial<double>(110));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.853986162502645785712E+90,  bksge::double_factorial<double>(111));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.123284760158291077349E+91,  bksge::double_factorial<double>(112));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.355004363627989737855E+92,  bksge::double_factorial<double>(113));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.840544626580451828178E+93,  bksge::double_factorial<double>(114));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.008255018172188198533E+94,  bksge::double_factorial<double>(115));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.775031766833324120686E+95,  bksge::double_factorial<double>(116));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.859658371261460192284E+96,  bksge::double_factorial<double>(117));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.99453748486332246241E+97,   bksge::double_factorial<double>(118));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.972993461801137628817E+98,  bksge::double_factorial<double>(119));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(9.593444981835986954892E+99,  bksge::double_factorial<double>(120));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.437322088779376530869E+100, bksge::double_factorial<double>(121));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.170400287783990408497E+102, bksge::double_factorial<double>(122));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.037790616919863313297E+103, bksge::double_factorial<double>(123));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.451296356852148106536E+104, bksge::double_factorial<double>(124));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.297238271149829141621E+105, bksge::double_factorial<double>(125));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.828633409633706614235E+106, bksge::double_factorial<double>(126));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.647492604360283009859E+107, bksge::double_factorial<double>(127));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.340650764331144466221E+108, bksge::double_factorial<double>(128));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.125265459624765082718E+109, bksge::double_factorial<double>(129));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.042845993630487806088E+110, bksge::double_factorial<double>(130));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.78409775210844225836E+111,  bksge::double_factorial<double>(131));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.016556711592243904036E+112, bksge::double_factorial<double>(132));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.702850010304228203619E+113, bksge::double_factorial<double>(133));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.382185993533606831408E+114, bksge::double_factorial<double>(134));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.998847513910708074886E+115, bksge::double_factorial<double>(135));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.319772951205705290715E+116, bksge::double_factorial<double>(136));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.848421094057670062594E+117, bksge::double_factorial<double>(137));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.010128667266387330119E+119, bksge::double_factorial<double>(138));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(9.519305320740161387006E+119, bksge::double_factorial<double>(139));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.414180134172942262166E+121, bksge::double_factorial<double>(140));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.342222050224362755568E+122, bksge::double_factorial<double>(141));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.008135790525578012276E+123, bksge::double_factorial<double>(142));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.919377531820838740462E+124, bksge::double_factorial<double>(143));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.891715538356832337677E+125, bksge::double_factorial<double>(144));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.78309742114021617367E+126,  bksge::double_factorial<double>(145));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.221904686000975213009E+127, bksge::double_factorial<double>(146));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.091153209076117775295E+128, bksge::double_factorial<double>(147));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.248418935281443315253E+129, bksge::double_factorial<double>(148));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.095818281523415485189E+130, bksge::double_factorial<double>(149));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(9.37262840292216497288E+131,  bksge::double_factorial<double>(150));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(9.204685605100357382636E+132, bksge::double_factorial<double>(151));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.424639517244169075878E+134, bksge::double_factorial<double>(152));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.408316897580354679543E+135, bksge::double_factorial<double>(153));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.193944856556020376852E+136, bksge::double_factorial<double>(154));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.182891191249549753292E+137, bksge::double_factorial<double>(155));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.422553976227391787889E+138, bksge::double_factorial<double>(156));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.427139170261793112668E+139, bksge::double_factorial<double>(157));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.407635282439279024864E+140, bksge::double_factorial<double>(158));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.449151280716251049143E+141, bksge::double_factorial<double>(159));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.652216451902846439782E+142, bksge::double_factorial<double>(160));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.77313356195316418912E+143,  bksge::double_factorial<double>(161));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.401659065208261123245E+145, bksge::double_factorial<double>(162));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.430020770598365762827E+146, bksge::double_factorial<double>(163));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.298720866941548242121E+147, bksge::double_factorial<double>(164));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.359534271487303508664E+148, bksge::double_factorial<double>(165));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.815876639122970081922E+149, bksge::double_factorial<double>(166));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.940422233383796859469E+150, bksge::double_factorial<double>(167));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.410672753726589737628E+151, bksge::double_factorial<double>(168));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.659313574418616692502E+152, bksge::double_factorial<double>(169));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.089814368133520255397E+154, bksge::double_factorial<double>(170));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.138742621225583454418E+155, bksge::double_factorial<double>(171));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.874480713189654839283E+156, bksge::double_factorial<double>(172));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.970024734720259376143E+157, bksge::double_factorial<double>(173));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.261596440949999420352E+158, bksge::double_factorial<double>(174));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.44754328576045390825E+159,  bksge::double_factorial<double>(175));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.740409736071998979819E+160, bksge::double_factorial<double>(176));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.102151615796003417602E+161, bksge::double_factorial<double>(177));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.021792933020815818408E+163, bksge::double_factorial<double>(178));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.092285139227484611751E+164, bksge::double_factorial<double>(179));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.839227279437468473134E+165, bksge::double_factorial<double>(180));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.977036102001747147269E+166, bksge::double_factorial<double>(181));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.347393648576192621104E+167, bksge::double_factorial<double>(182));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.617976066663197279502E+168, bksge::double_factorial<double>(183));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.159204313380194422831E+169, bksge::double_factorial<double>(184));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.693255723326914967079E+170, bksge::double_factorial<double>(185));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.145612002288716162647E+172, bksge::double_factorial<double>(186));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.251638820262133098844E+173, bksge::double_factorial<double>(187));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.153750564302786385775E+174, bksge::double_factorial<double>(188));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.365597370295431556815E+175, bksge::double_factorial<double>(189));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.092126072175294132973E+176, bksge::double_factorial<double>(190));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.518290977264274273516E+177, bksge::double_factorial<double>(191));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.856882058576564735309E+178, bksge::double_factorial<double>(192));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.720301586120049347886E+179, bksge::double_factorial<double>(193));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.52423511936385355865E+181,  bksge::double_factorial<double>(194));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.700458809293409622838E+182, bksge::double_factorial<double>(195));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.987500833953152974954E+183, bksge::double_factorial<double>(196));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.349903854308016956991E+184, bksge::double_factorial<double>(197));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.915251651227242890409E+185, bksge::double_factorial<double>(198));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.666308670072953744411E+186, bksge::double_factorial<double>(199));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.183050330245448578082E+188, bksge::double_factorial<double>(200));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.339928042684663702627E+189, bksge::double_factorial<double>(201));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.389761667095806127725E+190, bksge::double_factorial<double>(202));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.720053926649867316332E+191, bksge::double_factorial<double>(203));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.875113800875444500559E+192, bksge::double_factorial<double>(204));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.576110549632227998481E+193, bksge::double_factorial<double>(205));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.004273442980341567115E+195, bksge::double_factorial<double>(206));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.154254883773871195686E+196, bksge::double_factorial<double>(207));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.0888887613991104596E+197,   bksge::double_factorial<double>(208));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.412392707087390798983E+198, bksge::double_factorial<double>(209));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.386666398938131965159E+199, bksge::double_factorial<double>(210));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.090148611954394585854E+200, bksge::double_factorial<double>(211));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(9.299732765748839766137E+201, bksge::double_factorial<double>(212));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.084201654346286046787E+203, bksge::double_factorial<double>(213));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.990142811870251709953E+204, bksge::double_factorial<double>(214));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.331033556844515000592E+205, bksge::double_factorial<double>(215));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.298708473639743693499E+206, bksge::double_factorial<double>(216));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.058342818352597551284E+207, bksge::double_factorial<double>(217));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(9.371184472534641251829E+208, bksge::double_factorial<double>(218));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.107777077219218863731E+210, bksge::double_factorial<double>(219));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.061660583957621075402E+211, bksge::double_factorial<double>(220));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.448187340654473688846E+212, bksge::double_factorial<double>(221));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.576886496385918787393E+213, bksge::double_factorial<double>(222));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.459457769659476326126E+214, bksge::double_factorial<double>(223));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.025222575190445808376E+216, bksge::double_factorial<double>(224));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.228377998173382173378E+217, bksge::double_factorial<double>(225));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.31700301993040752693E+218,  bksge::double_factorial<double>(226));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.788418055853577533569E+219, bksge::double_factorial<double>(227));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.2827668854413291614E+220,   bksge::double_factorial<double>(228));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.385477347904692551873E+221, bksge::double_factorial<double>(229));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.215036383651505707122E+223, bksge::double_factorial<double>(230));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.475045267365983979483E+224, bksge::double_factorial<double>(231));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.818884410071493240523E+225, bksge::double_factorial<double>(232));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.436855472962742672195E+226, bksge::double_factorial<double>(233));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.596189519567294182824E+227, bksge::double_factorial<double>(234));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.076610361462445279658E+228, bksge::double_factorial<double>(235));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.556700726617881427147E+230, bksge::double_factorial<double>(236));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.914156655666599531279E+231, bksge::double_factorial<double>(237));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.704947729350557796609E+232, bksge::double_factorial<double>(238));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.574834407043172879756E+233, bksge::double_factorial<double>(239));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.891874550441338711861E+234, bksge::double_factorial<double>(240));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.102535092097404664021E+236, bksge::double_factorial<double>(241));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.15183364120680396827E+237,  bksge::double_factorial<double>(242));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.679160273796693333572E+238, bksge::double_factorial<double>(243));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.250474084544601682579E+239, bksge::double_factorial<double>(244));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.563942670801898667251E+240, bksge::double_factorial<double>(245));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.291616624797972013915E+242, bksge::double_factorial<double>(246));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.621293839688068970811E+243, bksge::double_factorial<double>(247));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.203209229498970594508E+244, bksge::double_factorial<double>(248));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.037021660823291737319E+245, bksge::double_factorial<double>(249));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.00802307374742648627E+246,  bksge::double_factorial<double>(250));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.013292436866646226067E+248, bksge::double_factorial<double>(251));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.01802181458435147454E+249,  bksge::double_factorial<double>(252));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.56362986527261495195E+250,  bksge::double_factorial<double>(253));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.125775409044252745332E+251, bksge::double_factorial<double>(254));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.537256156445168127472E+252, bksge::double_factorial<double>(255));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.312198504715328702805E+254, bksge::double_factorial<double>(256));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.68007483220640820876E+255,  bksge::double_factorial<double>(257));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.385472142165548053237E+256, bksge::double_factorial<double>(258));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.351393815414597260689E+257, bksge::double_factorial<double>(259));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.802227569630424938416E+258, bksge::double_factorial<double>(260));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.13571378582320988504E+260,  bksge::double_factorial<double>(261));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.306183623243171333865E+261, bksge::double_factorial<double>(262));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.986927256715041997655E+262, bksge::double_factorial<double>(263));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.088324765361972321403E+263, bksge::double_factorial<double>(264));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.915357230294861293786E+264, bksge::double_factorial<double>(265));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.619494387586284637493E+266, bksge::double_factorial<double>(266));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.113400380488727965441E+267, bksge::double_factorial<double>(267));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.340244958731242828482E+268, bksge::double_factorial<double>(268));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.685047023514678227036E+269, bksge::double_factorial<double>(269));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.17186613885743556369E+271,  bksge::double_factorial<double>(270));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.540647743372477799527E+272, bksge::double_factorial<double>(271));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.187475897692224733237E+273, bksge::double_factorial<double>(272));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.205968339406864392708E+274, bksge::double_factorial<double>(273));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.73368395967669576907E+275,  bksge::double_factorial<double>(274));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.156641293336887707995E+277, bksge::double_factorial<double>(275));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.410496772870768032263E+278, bksge::double_factorial<double>(276));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.203896382543178951145E+279, bksge::double_factorial<double>(277));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(6.701181028580735129692E+280, bksge::double_factorial<double>(278));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.938870907295469273695E+281, bksge::double_factorial<double>(279));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.876330688002605836314E+283, bksge::double_factorial<double>(280));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.511822724950026865908E+284, bksge::double_factorial<double>(281));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.291252540167348458405E+285, bksge::double_factorial<double>(282));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(7.10845831160857603052E+286,  bksge::double_factorial<double>(283));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.502715721407526962187E+288, bksge::double_factorial<double>(284));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.025910618808444168698E+289, bksge::double_factorial<double>(285));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.297766963225527111855E+290, bksge::double_factorial<double>(286));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(5.814363475980234764164E+291, bksge::double_factorial<double>(287));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.237756885408951808214E+293, bksge::double_factorial<double>(288));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.680351044558287846843E+294, bksge::double_factorial<double>(289));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.589494967685960243821E+295, bksge::double_factorial<double>(290));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.889821539664617634314E+296, bksge::double_factorial<double>(291));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.048132530564300391196E+298, bksge::double_factorial<double>(292));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.432717711121732966854E+299, bksge::double_factorial<double>(293));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.081509639859043150116E+300, bksge::double_factorial<double>(294));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(4.22651724780911225222E+301,  bksge::double_factorial<double>(295));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(9.121268533982767724342E+302, bksge::double_factorial<double>(296));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(1.255275622599306338909E+304, bksge::double_factorial<double>(297));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(2.718138023126864781854E+305, bksge::double_factorial<double>(298));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(3.753274111571925953339E+306, bksge::double_factorial<double>(299));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(8.154414069380594345562E+307, bksge::double_factorial<double>(300));
		BKSGE_CXX14_CONSTEXPR_EXPECT_EQ(std::numeric_limits<float>::infinity(), bksge::double_factorial<double>(301));
	}
}

}	// namespace double_factorial_test

}	// namespace bksge_cmath_test
