diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:47:26 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:47:26 +0000 |
commit | 51072bd6bf79ef2bc6a922079bff57c31c1effbc (patch) | |
tree | 91a2effbc9e6f80bdbbf9eb70e06c51ad0867ea0 /test/std/numerics | |
parent | bb5e33f003797b67974a8893f7f2930fc51b8210 (diff) |
Notes
Diffstat (limited to 'test/std/numerics')
82 files changed, 3355 insertions, 3205 deletions
diff --git a/test/std/numerics/c.math/cmath.pass.cpp b/test/std/numerics/c.math/cmath.pass.cpp index 0b0d86288737..7161bd37e3e2 100644 --- a/test/std/numerics/c.math/cmath.pass.cpp +++ b/test/std/numerics/c.math/cmath.pass.cpp @@ -9,13 +9,11 @@ // <cmath> -// NOTE: isinf and isnan are tested separately because they are expected to fail -// on linux. We don't want their expected failure to hide other failures in this file. - #include <cmath> #include <type_traits> #include <cassert> +#include "test_macros.h" #include "hexfloat.h" // convertible to int/float/double/etc @@ -79,6 +77,7 @@ Ambiguous fma(Ambiguous, Ambiguous, Ambiguous){ return Ambiguous(); } Ambiguous fmax(Ambiguous, Ambiguous){ return Ambiguous(); } Ambiguous fmin(Ambiguous, Ambiguous){ return Ambiguous(); } Ambiguous hypot(Ambiguous, Ambiguous){ return Ambiguous(); } +Ambiguous hypot(Ambiguous, Ambiguous, Ambiguous){ return Ambiguous(); } Ambiguous ilogb(Ambiguous){ return Ambiguous(); } Ambiguous lgamma(Ambiguous){ return Ambiguous(); } Ambiguous llrint(Ambiguous){ return Ambiguous(); } @@ -631,6 +630,29 @@ void test_isgreaterequal() assert(std::isgreaterequal(-1.0, 0.F) == false); } +void test_isinf() +{ +#ifdef isinf +#error isinf defined +#endif + static_assert((std::is_same<decltype(std::isinf((float)0)), bool>::value), ""); + + typedef decltype(std::isinf((double)0)) DoubleRetType; +#ifndef __linux__ + static_assert((std::is_same<DoubleRetType, bool>::value), ""); +#else + // GLIBC < 2.26 defines 'isinf(double)' with a return type of 'int' in + // all C++ dialects. The test should tolerate this. + // See: https://sourceware.org/bugzilla/show_bug.cgi?id=19439 + static_assert((std::is_same<DoubleRetType, bool>::value + || std::is_same<DoubleRetType, int>::value), ""); +#endif + + static_assert((std::is_same<decltype(std::isinf(0)), bool>::value), ""); + static_assert((std::is_same<decltype(std::isinf((long double)0)), bool>::value), ""); + assert(std::isinf(-1.0) == false); +} + void test_isless() { #ifdef isless @@ -688,6 +710,29 @@ void test_islessgreater() assert(std::islessgreater(-1.0, 0.F) == true); } +void test_isnan() +{ +#ifdef isnan +#error isnan defined +#endif + static_assert((std::is_same<decltype(std::isnan((float)0)), bool>::value), ""); + + typedef decltype(std::isnan((double)0)) DoubleRetType; +#ifndef __linux__ + static_assert((std::is_same<DoubleRetType, bool>::value), ""); +#else + // GLIBC < 2.26 defines 'isnan(double)' with a return type of 'int' in + // all C++ dialects. The test should tolerate this. + // See: https://sourceware.org/bugzilla/show_bug.cgi?id=19439 + static_assert((std::is_same<DoubleRetType, bool>::value + || std::is_same<DoubleRetType, int>::value), ""); +#endif + + static_assert((std::is_same<decltype(std::isnan(0)), bool>::value), ""); + static_assert((std::is_same<decltype(std::isnan((long double)0)), bool>::value), ""); + assert(std::isnan(-1.0) == false); +} + void test_isunordered() { #ifdef isunordered @@ -1010,6 +1055,28 @@ void test_hypot() static_assert((std::is_same<decltype(std::hypot((int)0, (int)0)), double>::value), ""); static_assert((std::is_same<decltype(hypot(Ambiguous(), Ambiguous())), Ambiguous>::value), ""); assert(std::hypot(3,4) == 5); + +#if TEST_STD_VER > 14 + static_assert((std::is_same<decltype(std::hypot((float)0, (float)0, (float)0)), float>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (bool)0, (float)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (unsigned short)0, (double)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (int)0, (long double)0)), long double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (unsigned int)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (double)0, (long)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (long double)0, (unsigned long)0)), long double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (int)0, (long long)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (int)0, (unsigned long long)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (double)0, (double)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (long double)0, (long double)0)), long double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (float)0, (double)0)), double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (float)0, (long double)0)), long double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((float)0, (double)0, (long double)0)), long double>::value), ""); + static_assert((std::is_same<decltype(std::hypot((int)0, (int)0, (int)0)), double>::value), ""); + static_assert((std::is_same<decltype(hypot(Ambiguous(), Ambiguous(), Ambiguous())), Ambiguous>::value), ""); + + assert(std::hypot(2,3,6) == 7); + assert(std::hypot(1,4,8) == 9); +#endif } void test_ilogb() @@ -1443,9 +1510,11 @@ int main() test_isnormal(); test_isgreater(); test_isgreaterequal(); + test_isinf(); test_isless(); test_islessequal(); test_islessgreater(); + test_isnan(); test_isunordered(); test_acosh(); test_asinh(); diff --git a/test/std/numerics/c.math/cmath_isinf.pass.cpp b/test/std/numerics/c.math/cmath_isinf.pass.cpp deleted file mode 100644 index 6cde04d9bc86..000000000000 --- a/test/std/numerics/c.math/cmath_isinf.pass.cpp +++ /dev/null @@ -1,30 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <cmath> - -// isinf - -// XFAIL: linux - -#include <cmath> -#include <type_traits> -#include <cassert> - -int main() -{ -#ifdef isinf -#error isinf defined -#endif - static_assert((std::is_same<decltype(std::isinf((float)0)), bool>::value), ""); - static_assert((std::is_same<decltype(std::isinf((double)0)), bool>::value), ""); - static_assert((std::is_same<decltype(std::isinf(0)), bool>::value), ""); - static_assert((std::is_same<decltype(std::isinf((long double)0)), bool>::value), ""); - assert(std::isinf(-1.0) == false); -}
\ No newline at end of file diff --git a/test/std/numerics/c.math/cmath_isnan.pass.cpp b/test/std/numerics/c.math/cmath_isnan.pass.cpp deleted file mode 100644 index 7b33b9647052..000000000000 --- a/test/std/numerics/c.math/cmath_isnan.pass.cpp +++ /dev/null @@ -1,30 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <cmath> - -// isnan - -// XFAIL: linux - -#include <cmath> -#include <type_traits> -#include <cassert> - -int main() -{ -#ifdef isnan -#error isnan defined -#endif - static_assert((std::is_same<decltype(std::isnan((float)0)), bool>::value), ""); - static_assert((std::is_same<decltype(std::isnan((double)0)), bool>::value), ""); - static_assert((std::is_same<decltype(std::isnan(0)), bool>::value), ""); - static_assert((std::is_same<decltype(std::isnan((long double)0)), bool>::value), ""); - assert(std::isnan(-1.0) == false); -} diff --git a/test/std/numerics/cfenv/cfenv.syn/cfenv.pass.cpp b/test/std/numerics/cfenv/cfenv.syn/cfenv.pass.cpp index fcf075a36e1a..f2bf6433ceb4 100644 --- a/test/std/numerics/cfenv/cfenv.syn/cfenv.pass.cpp +++ b/test/std/numerics/cfenv/cfenv.syn/cfenv.pass.cpp @@ -62,6 +62,8 @@ int main() { std::fenv_t fenv; std::fexcept_t fex; + ((void)fenv); // Prevent unused warning + ((void)fex); // Prevent unused warning static_assert((std::is_same<decltype(std::feclearexcept(0)), int>::value), ""); static_assert((std::is_same<decltype(std::fegetexceptflag(&fex, 0)), int>::value), ""); static_assert((std::is_same<decltype(std::feraiseexcept(0)), int>::value), ""); diff --git a/test/std/numerics/cfenv/version.pass.cpp b/test/std/numerics/cfenv/version.pass.cpp deleted file mode 100644 index 727d5bdf3994..000000000000 --- a/test/std/numerics/cfenv/version.pass.cpp +++ /dev/null @@ -1,22 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// UNSUPPORTED: newlib - -// <cfenv> - -#include <cfenv> - -#ifndef _LIBCPP_VERSION -#error _LIBCPP_VERSION not defined -#endif - -int main() -{ -} diff --git a/test/std/numerics/complex.number/cases.h b/test/std/numerics/complex.number/cases.h index cd6bd165a9d1..a2f85d11ca4d 100644 --- a/test/std/numerics/complex.number/cases.h +++ b/test/std/numerics/complex.number/cases.h @@ -17,7 +17,7 @@ #include <complex> #include <cassert> -std::complex<double> x[] = +const std::complex<double> testcases[] = { std::complex<double>( 1.e-6, 1.e-6), std::complex<double>(-1.e-6, 1.e-6), diff --git a/test/std/numerics/complex.number/cmplx.over/imag.pass.cpp b/test/std/numerics/complex.number/cmplx.over/imag.pass.cpp index 30c95c3c88d9..7decea877fbd 100644 --- a/test/std/numerics/complex.number/cmplx.over/imag.pass.cpp +++ b/test/std/numerics/complex.number/cmplx.over/imag.pass.cpp @@ -30,7 +30,7 @@ test(typename std::enable_if<std::is_integral<T>::value>::type* = 0) static_assert(std::imag(val) == 0, ""); constexpr std::complex<T> t{val, val}; static_assert(t.imag() == x, "" ); -#endif +#endif } template <class T, int x> @@ -44,7 +44,7 @@ test(typename std::enable_if<!std::is_integral<T>::value>::type* = 0) static_assert(std::imag(val) == 0, ""); constexpr std::complex<T> t{val, val}; static_assert(t.imag() == x, "" ); -#endif +#endif } template <class T> diff --git a/test/std/numerics/complex.number/cmplx.over/real.pass.cpp b/test/std/numerics/complex.number/cmplx.over/real.pass.cpp index a5a4a35b13ca..491b35890c0c 100644 --- a/test/std/numerics/complex.number/cmplx.over/real.pass.cpp +++ b/test/std/numerics/complex.number/cmplx.over/real.pass.cpp @@ -30,7 +30,7 @@ test(typename std::enable_if<std::is_integral<T>::value>::type* = 0) static_assert(std::real(val) == val, ""); constexpr std::complex<T> t{val, val}; static_assert(t.real() == x, "" ); -#endif +#endif } template <class T, int x> @@ -44,7 +44,7 @@ test(typename std::enable_if<!std::is_integral<T>::value>::type* = 0) static_assert(std::real(val) == val, ""); constexpr std::complex<T> t{val, val}; static_assert(t.real() == x, "" ); -#endif +#endif } template <class T> diff --git a/test/std/numerics/complex.number/complex.literals/literals.pass.cpp b/test/std/numerics/complex.number/complex.literals/literals.pass.cpp index 45b59914e7f8..a2e53629f97d 100644 --- a/test/std/numerics/complex.number/complex.literals/literals.pass.cpp +++ b/test/std/numerics/complex.number/complex.literals/literals.pass.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11 // <chrono> #include <complex> @@ -15,7 +16,6 @@ int main() { -#if _LIBCPP_STD_VER > 11 using namespace std::literals::complex_literals; // Make sure the types are right @@ -25,14 +25,14 @@ int main() static_assert ( std::is_same<decltype( 3i ), std::complex<double>>::value, "" ); static_assert ( std::is_same<decltype( 3.0if ), std::complex<float>>::value, "" ); static_assert ( std::is_same<decltype( 3if ), std::complex<float>>::value, "" ); - + { std::complex<long double> c1 = 3.0il; assert ( c1 == std::complex<long double>(0, 3.0)); auto c2 = 3il; assert ( c1 == c2 ); } - + { std::complex<double> c1 = 3.0i; assert ( c1 == std::complex<double>(0, 3.0)); @@ -46,6 +46,4 @@ int main() auto c2 = 3if; assert ( c1 == c2 ); } - -#endif } diff --git a/test/std/numerics/complex.number/complex.literals/literals1.fail.cpp b/test/std/numerics/complex.number/complex.literals/literals1.fail.cpp index 0f31d595566c..67e0fa131fd0 100644 --- a/test/std/numerics/complex.number/complex.literals/literals1.fail.cpp +++ b/test/std/numerics/complex.number/complex.literals/literals1.fail.cpp @@ -7,14 +7,12 @@ // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 #include <complex> #include <cassert> int main() { -#if _LIBCPP_STD_VER > 11 std::complex<float> foo = 1.0if; // should fail w/conversion operator not found -#else -#error -#endif } diff --git a/test/std/numerics/complex.number/complex.literals/literals1.pass.cpp b/test/std/numerics/complex.number/complex.literals/literals1.pass.cpp index 46903bbd565d..09a6f270f759 100644 --- a/test/std/numerics/complex.number/complex.literals/literals1.pass.cpp +++ b/test/std/numerics/complex.number/complex.literals/literals1.pass.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11 // <chrono> #include <complex> @@ -15,7 +16,6 @@ int main() { -#if _LIBCPP_STD_VER > 11 using namespace std::literals; { @@ -24,7 +24,7 @@ int main() auto c2 = 3il; assert ( c1 == c2 ); } - + { std::complex<double> c1 = 3.0i; assert ( c1 == std::complex<double>(0, 3.0)); @@ -38,6 +38,4 @@ int main() auto c2 = 3if; assert ( c1 == c2 ); } - -#endif } diff --git a/test/std/numerics/complex.number/complex.literals/literals2.pass.cpp b/test/std/numerics/complex.number/complex.literals/literals2.pass.cpp index 8bd8acd981bc..d11530d7803a 100644 --- a/test/std/numerics/complex.number/complex.literals/literals2.pass.cpp +++ b/test/std/numerics/complex.number/complex.literals/literals2.pass.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11 // <chrono> #include <complex> @@ -15,7 +16,6 @@ int main() { -#if _LIBCPP_STD_VER > 11 using namespace std; { @@ -24,7 +24,7 @@ int main() auto c2 = 3il; assert ( c1 == c2 ); } - + { std::complex<double> c1 = 3.0i; assert ( c1 == std::complex<double>(0, 3.0)); @@ -38,6 +38,4 @@ int main() auto c2 = 3if; assert ( c1 == c2 ); } - -#endif } diff --git a/test/std/numerics/complex.number/complex.member.ops/divide_equal_complex.pass.cpp b/test/std/numerics/complex.number/complex.member.ops/divide_equal_complex.pass.cpp index cb285117b15d..b4200fc81d40 100644 --- a/test/std/numerics/complex.number/complex.member.ops/divide_equal_complex.pass.cpp +++ b/test/std/numerics/complex.number/complex.member.ops/divide_equal_complex.pass.cpp @@ -28,7 +28,7 @@ test() c /= c2; assert(c.real() == 1); assert(c.imag() == 0); - + std::complex<T> c3; c3 = c; @@ -36,13 +36,13 @@ test() c3 /= ic; assert(c3.real() == 0.5); assert(c3.imag() == -0.5); - + c3 = c; std::complex<float> fc (1,1); c3 /= fc; assert(c3.real() == 0.5); assert(c3.imag() == -0.5); - + } int main() diff --git a/test/std/numerics/complex.number/complex.member.ops/plus_equal_complex.pass.cpp b/test/std/numerics/complex.number/complex.member.ops/plus_equal_complex.pass.cpp index 8c16f4ced2cd..9b222b8a1d3c 100644 --- a/test/std/numerics/complex.number/complex.member.ops/plus_equal_complex.pass.cpp +++ b/test/std/numerics/complex.number/complex.member.ops/plus_equal_complex.pass.cpp @@ -36,7 +36,7 @@ test() c3 += ic; assert(c3.real() == 4); assert(c3.imag() == 6); - + c3 = c; std::complex<float> fc (1,1); c3 += fc; diff --git a/test/std/numerics/complex.number/complex.member.ops/times_equal_complex.pass.cpp b/test/std/numerics/complex.number/complex.member.ops/times_equal_complex.pass.cpp index 84d6e591306e..98b7197cb272 100644 --- a/test/std/numerics/complex.number/complex.member.ops/times_equal_complex.pass.cpp +++ b/test/std/numerics/complex.number/complex.member.ops/times_equal_complex.pass.cpp @@ -36,7 +36,7 @@ test() c3 *= ic; assert(c3.real() == -11.5); assert(c3.imag() == 3.5); - + c3 = c; std::complex<float> fc (1,1); c3 *= fc; diff --git a/test/std/numerics/complex.number/complex.ops/complex_divide_complex.pass.cpp b/test/std/numerics/complex.number/complex.ops/complex_divide_complex.pass.cpp index 86119678aa70..8d4712eece78 100644 --- a/test/std/numerics/complex.number/complex.ops/complex_divide_complex.pass.cpp +++ b/test/std/numerics/complex.number/complex.ops/complex_divide_complex.pass.cpp @@ -37,16 +37,16 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { for (unsigned j = 0; j < N; ++j) { - std::complex<double> r = x[i] / x[j]; - switch (classify(x[i])) + std::complex<double> r = testcases[i] / testcases[j]; + switch (classify(testcases[i])) { case zero: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == NaN); @@ -66,7 +66,7 @@ void test_edges() } break; case non_zero: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == inf); @@ -86,7 +86,7 @@ void test_edges() } break; case inf: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == inf); @@ -106,7 +106,7 @@ void test_edges() } break; case NaN: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == NaN); @@ -126,7 +126,7 @@ void test_edges() } break; case non_zero_nan: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == inf); diff --git a/test/std/numerics/complex.number/complex.ops/complex_times_complex.pass.cpp b/test/std/numerics/complex.number/complex.ops/complex_times_complex.pass.cpp index 565eaa5657cd..8ead5bfb627a 100644 --- a/test/std/numerics/complex.number/complex.ops/complex_times_complex.pass.cpp +++ b/test/std/numerics/complex.number/complex.ops/complex_times_complex.pass.cpp @@ -39,16 +39,16 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { for (unsigned j = 0; j < N; ++j) { - std::complex<double> r = x[i] * x[j]; - switch (classify(x[i])) + std::complex<double> r = testcases[i] * testcases[j]; + switch (classify(testcases[i])) { case zero: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == zero); @@ -68,7 +68,7 @@ void test_edges() } break; case non_zero: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == zero); @@ -88,7 +88,7 @@ void test_edges() } break; case inf: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == NaN); @@ -108,7 +108,7 @@ void test_edges() } break; case NaN: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == NaN); @@ -128,7 +128,7 @@ void test_edges() } break; case non_zero_nan: - switch (classify(x[j])) + switch (classify(testcases[j])) { case zero: assert(classify(r) == NaN); diff --git a/test/std/numerics/complex.number/complex.transcendentals/acos.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/acos.pass.cpp index f8ee306d7544..1b0cca0d5f69 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/acos.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/acos.pass.cpp @@ -36,94 +36,94 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = acos(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = acos(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { is_about(r.real(), pi/2); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) != std::signbit(r.imag())); } - else if (x[i].real() == 0 && std::isnan(x[i].imag())) + else if (testcases[i].real() == 0 && std::isnan(testcases[i].imag())) { is_about(r.real(), pi/2); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { is_about(r.real(), pi/2); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) != std::signbit(r.imag())); } - else if (std::isfinite(x[i].real()) && x[i].real() != 0 && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && testcases[i].real() != 0 && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isfinite(testcases[i].imag())) { is_about(r.real(), pi); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) != std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isfinite(testcases[i].imag())) { assert(r.real() == 0); assert(!std::signbit(r.real())); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) != std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isinf(testcases[i].imag())) { is_about(r.real(), 0.75 * pi); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) != std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isinf(testcases[i].imag())) { is_about(r.real(), 0.25 * pi); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) != std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isinf(r.imag())); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) != std::signbit(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (!std::signbit(x[i].real()) && !std::signbit(x[i].imag())) + else if (!std::signbit(testcases[i].real()) && !std::signbit(testcases[i].imag())) { assert(!std::signbit(r.real())); assert( std::signbit(r.imag())); } - else if (std::signbit(x[i].real()) && !std::signbit(x[i].imag())) + else if (std::signbit(testcases[i].real()) && !std::signbit(testcases[i].imag())) { assert(!std::signbit(r.real())); assert( std::signbit(r.imag())); } - else if (std::signbit(x[i].real()) && std::signbit(x[i].imag())) + else if (std::signbit(testcases[i].real()) && std::signbit(testcases[i].imag())) { assert(!std::signbit(r.real())); assert(!std::signbit(r.imag())); } - else if (!std::signbit(x[i].real()) && std::signbit(x[i].imag())) + else if (!std::signbit(testcases[i].real()) && std::signbit(testcases[i].imag())) { assert(!std::signbit(r.real())); assert(!std::signbit(r.imag())); diff --git a/test/std/numerics/complex.number/complex.transcendentals/acosh.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/acosh.pass.cpp index 88a5c798424d..f1aece20e6cf 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/acosh.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/acosh.pass.cpp @@ -36,91 +36,91 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = acosh(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = acosh(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { assert(!std::signbit(r.real())); - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi/2); else is_about(r.imag(), pi/2); } - else if (x[i].real() == 1 && x[i].imag() == 0) + else if (testcases[i].real() == 1 && testcases[i].imag() == 0) { assert(r.real() == 0); assert(!std::signbit(r.real())); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi/2); else is_about(r.imag(), pi/2); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi); else is_about(r.imag(), pi); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -0.75 * pi); else is_about(r.imag(), 0.75 * pi); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -0.25 * pi); else is_about(r.imag(), 0.25 * pi); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); @@ -128,7 +128,7 @@ void test_edges() else { assert(!std::signbit(r.real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } } } diff --git a/test/std/numerics/complex.number/complex.transcendentals/asin.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/asin.pass.cpp index c743be6488c6..cf6f7869bd1a 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/asin.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/asin.pass.cpp @@ -36,77 +36,77 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = asin(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = asin(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { - assert(std::signbit(r.real()) == std::signbit(x[i].real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if ( x[i].real() == 0 && std::isnan(x[i].imag())) + else if ( testcases[i].real() == 0 && std::isnan(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isfinite(testcases[i].imag())) { - if (x[i].real() > 0) + if (testcases[i].real() > 0) is_about(r.real(), pi/2); else is_about(r.real(), - pi/2); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag())) { - if (std::signbit(x[i].real())) + if (std::signbit(testcases[i].real())) is_about(r.real(), -pi/4); else is_about(r.real(), pi/4); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].real()) != std::signbit(r.imag())); + assert(std::signbit(testcases[i].real()) != std::signbit(r.imag())); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isnan(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isinf(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } else { - assert(std::signbit(r.real()) == std::signbit(x[i].real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } } } diff --git a/test/std/numerics/complex.number/complex.transcendentals/asinh.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/asinh.pass.cpp index 027bc6a98a99..011f9d6b4f2e 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/asinh.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/asinh.pass.cpp @@ -36,76 +36,76 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = asinh(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = asinh(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { - assert(std::signbit(r.real()) == std::signbit(x[i].real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); - if (std::signbit(x[i].imag())) + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi/2); else is_about(r.imag(), pi/2); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real())); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); - if (std::signbit(x[i].imag())) + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi/4); else is_about(r.imag(), pi/4); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isinf(r.real())); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && x[i].imag() == 0) + else if (std::isnan(testcases[i].real()) && testcases[i].imag() == 0) { assert(std::isnan(r.real())); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } else { - assert(std::signbit(r.real()) == std::signbit(x[i].real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } } } diff --git a/test/std/numerics/complex.number/complex.transcendentals/atan.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/atan.pass.cpp index 69bc95240141..8cc71f7bff27 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/atan.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/atan.pass.cpp @@ -35,11 +35,11 @@ test() void test_edges() { typedef std::complex<double> C; - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = atan(x[i]); - std::complex<double> t1(-imag(x[i]), real(x[i])); + std::complex<double> r = atan(testcases[i]); + std::complex<double> t1(-imag(testcases[i]), real(testcases[i])); std::complex<double> t2 = atanh(t1); std::complex<double> z(imag(t2), -real(t2)); if (std::isnan(real(r))) diff --git a/test/std/numerics/complex.number/complex.transcendentals/atanh.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/atanh.pass.cpp index b821109b751b..6dc6034ca3c6 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/atanh.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/atanh.pass.cpp @@ -36,89 +36,89 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = atanh(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = atanh(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { - assert(std::signbit(r.real()) == std::signbit(x[i].real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if ( x[i].real() == 0 && std::isnan(x[i].imag())) + else if ( testcases[i].real() == 0 && std::isnan(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); assert(std::isnan(r.imag())); } - else if (std::abs(x[i].real()) == 1 && x[i].imag() == 0) + else if (std::abs(testcases[i].real()) == 1 && testcases[i].imag() == 0) { assert(std::isinf(r.real())); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); - if (x[i].imag() > 0) + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); + if (testcases[i].imag() > 0) is_about(r.imag(), pi/2); else is_about(r.imag(), -pi/2); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); - if (std::signbit(x[i].imag())) + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi/2); else is_about(r.imag(), pi/2); } - else if (std::isinf(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); - if (std::signbit(x[i].imag())) + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi/2); else is_about(r.imag(), pi/2); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(r.real() == 0); - assert(std::signbit(x[i].real()) == std::signbit(r.real())); - if (std::signbit(x[i].imag())) + assert(std::signbit(testcases[i].real()) == std::signbit(r.real())); + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi/2); else is_about(r.imag(), pi/2); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } else { - assert(std::signbit(r.real()) == std::signbit(x[i].real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } } } diff --git a/test/std/numerics/complex.number/complex.transcendentals/cos.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/cos.pass.cpp index f25c967cb1a7..e09163a7057d 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/cos.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/cos.pass.cpp @@ -36,11 +36,11 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = cos(x[i]); - std::complex<double> t1(-imag(x[i]), real(x[i])); + std::complex<double> r = cos(testcases[i]); + std::complex<double> t1(-imag(testcases[i]), real(testcases[i])); std::complex<double> z = cosh(t1); if (std::isnan(real(r))) assert(std::isnan(real(z))); diff --git a/test/std/numerics/complex.number/complex.transcendentals/cosh.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/cosh.pass.cpp index acf4746389c8..0fd9cf79bcbf 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/cosh.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/cosh.pass.cpp @@ -36,72 +36,72 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = cosh(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = cosh(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { assert(r.real() == 1); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (x[i].real() == 0 && std::isinf(x[i].imag())) + else if (testcases[i].real() == 0 && std::isinf(testcases[i].imag())) { assert(std::isnan(r.real())); assert(r.imag() == 0); } - else if (x[i].real() == 0 && std::isnan(x[i].imag())) + else if (testcases[i].real() == 0 && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(r.imag() == 0); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].imag() == 0) + else if (std::isinf(testcases[i].real()) && testcases[i].imag() == 0) { assert(std::isinf(r.real())); assert(!std::signbit(r.real())); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isinf(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real())); - assert(std::signbit(r.real()) == std::signbit(cos(x[i].imag()))); + assert(std::signbit(r.real()) == std::signbit(cos(testcases[i].imag()))); assert(std::isinf(r.imag())); - assert(std::signbit(r.imag()) == std::signbit(x[i].real() * sin(x[i].imag()))); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].real() * sin(testcases[i].imag()))); } - else if (std::isinf(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && x[i].imag() == 0) + else if (std::isnan(testcases[i].real()) && testcases[i].imag() == 0) { assert(std::isnan(r.real())); assert(r.imag() == 0); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); diff --git a/test/std/numerics/complex.number/complex.transcendentals/exp.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/exp.pass.cpp index e8b507572f1b..31317816fae0 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/exp.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/exp.pass.cpp @@ -34,73 +34,73 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = exp(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = exp(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { assert(r.real() == 1.0); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && x[i].imag() == 0) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && testcases[i].imag() == 0) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isinf(testcases[i].imag())) { assert(r.real() == 0); assert(r.imag() == 0); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isnan(testcases[i].imag())) { assert(r.real() == 0); assert(r.imag() == 0); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isnan(testcases[i].imag())) { assert(std::isinf(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && x[i].imag() == 0) + else if (std::isnan(testcases[i].real()) && testcases[i].imag() == 0) { assert(std::isnan(r.real())); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isnan(x[i].real()) && x[i].imag() != 0) + else if (std::isnan(testcases[i].real()) && testcases[i].imag() != 0) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].imag()) && std::abs(x[i].imag()) <= 1) + else if (std::isfinite(testcases[i].imag()) && std::abs(testcases[i].imag()) <= 1) { assert(!std::signbit(r.real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } } } diff --git a/test/std/numerics/complex.number/complex.transcendentals/log.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/log.pass.cpp index 800b92474bf0..589b5969950d 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/log.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/log.pass.cpp @@ -35,17 +35,17 @@ test() void test_edges() { const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = log(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = log(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { - if (std::signbit(x[i].real())) + if (std::signbit(testcases[i].real())) { assert(std::isinf(r.real())); assert(r.real() < 0); - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi); else is_about(r.imag(), pi); @@ -55,24 +55,24 @@ void test_edges() assert(std::isinf(r.real())); assert(r.real() < 0); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); - if (x[i].imag() > 0) + if (testcases[i].imag() > 0) is_about(r.imag(), pi/2); else is_about(r.imag(), -pi/2); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real()) && r.real() > 0); if (r.imag() > 0) @@ -80,44 +80,44 @@ void test_edges() else is_about(r.imag(), -pi); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real()) && r.real() > 0); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (x[i].real() == 1 && x[i].imag() == 0) + else if (testcases[i].real() == 1 && testcases[i].imag() == 0) { assert(r.real() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (x[i].real() == 0 && x[i].imag() == 1) + else if (testcases[i].real() == 0 && testcases[i].imag() == 1) { assert(r.real() == 0); is_about(r.imag(), pi/2); } - else if (x[i].real() == -1 && x[i].imag() == 0) + else if (testcases[i].real() == -1 && testcases[i].imag() == 0) { assert(r.real() == 0); - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r.imag(), -pi); else is_about(r.imag(), pi); } - else if (x[i].real() == 0 && x[i].imag() == -1) + else if (testcases[i].real() == 0 && testcases[i].imag() == -1) { assert(r.real() == 0); is_about(r.imag(), -pi/2); } - else if (std::isfinite(x[i].real()) && std::isfinite(x[i].imag()) && abs(x[i]) < 1) + else if (std::isfinite(testcases[i].real()) && std::isfinite(testcases[i].imag()) && abs(testcases[i]) < 1) { assert( std::signbit(r.real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isfinite(x[i].real()) && std::isfinite(x[i].imag()) && abs(x[i]) > 1) + else if (std::isfinite(testcases[i].real()) && std::isfinite(testcases[i].imag()) && abs(testcases[i]) > 1) { assert(!std::signbit(r.real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } } } diff --git a/test/std/numerics/complex.number/complex.transcendentals/log10.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/log10.pass.cpp index ba03ebf8ad28..58286904ae25 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/log10.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/log10.pass.cpp @@ -35,11 +35,11 @@ test() void test_edges() { const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = log10(x[i]); - std::complex<double> z = log(x[i])/std::log(10); + std::complex<double> r = log10(testcases[i]); + std::complex<double> z = log(testcases[i])/std::log(10); if (std::isnan(real(r))) assert(std::isnan(real(z))); else diff --git a/test/std/numerics/complex.number/complex.transcendentals/pow_complex_complex.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/pow_complex_complex.pass.cpp index 258193d257a8..157246947cfe 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/pow_complex_complex.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/pow_complex_complex.pass.cpp @@ -37,13 +37,13 @@ test() void test_edges() { const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { for (unsigned j = 0; j < N; ++j) { - std::complex<double> r = pow(x[i], x[j]); - std::complex<double> z = exp(x[j] * log(x[i])); + std::complex<double> r = pow(testcases[i], testcases[j]); + std::complex<double> z = exp(testcases[j] * log(testcases[i])); if (std::isnan(real(r))) assert(std::isnan(real(z))); else diff --git a/test/std/numerics/complex.number/complex.transcendentals/pow_complex_scalar.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/pow_complex_scalar.pass.cpp index 03bd10d465d1..0752ea59f554 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/pow_complex_scalar.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/pow_complex_scalar.pass.cpp @@ -37,13 +37,13 @@ test() void test_edges() { const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { for (unsigned j = 0; j < N; ++j) { - std::complex<double> r = pow(x[i], real(x[j])); - std::complex<double> z = exp(std::complex<double>(real(x[j])) * log(x[i])); + std::complex<double> r = pow(testcases[i], real(testcases[j])); + std::complex<double> z = exp(std::complex<double>(real(testcases[j])) * log(testcases[i])); if (std::isnan(real(r))) assert(std::isnan(real(z))); else diff --git a/test/std/numerics/complex.number/complex.transcendentals/pow_scalar_complex.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/pow_scalar_complex.pass.cpp index a48498cea92c..aedeec8caacc 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/pow_scalar_complex.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/pow_scalar_complex.pass.cpp @@ -37,13 +37,13 @@ test() void test_edges() { const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { for (unsigned j = 0; j < N; ++j) { - std::complex<double> r = pow(real(x[i]), x[j]); - std::complex<double> z = exp(x[j] * log(std::complex<double>(real(x[i])))); + std::complex<double> r = pow(real(testcases[i]), testcases[j]); + std::complex<double> z = exp(testcases[j] * log(std::complex<double>(real(testcases[i])))); if (std::isnan(real(r))) assert(std::isnan(real(z))); else diff --git a/test/std/numerics/complex.number/complex.transcendentals/sin.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/sin.pass.cpp index 068222a27373..e1b98ecd0677 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/sin.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/sin.pass.cpp @@ -36,11 +36,11 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = sin(x[i]); - std::complex<double> t1(-imag(x[i]), real(x[i])); + std::complex<double> r = sin(testcases[i]); + std::complex<double> t1(-imag(testcases[i]), real(testcases[i])); std::complex<double> t2 = sinh(t1); std::complex<double> z(imag(t2), -real(t2)); if (std::isnan(real(r))) diff --git a/test/std/numerics/complex.number/complex.transcendentals/sinh.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/sinh.pass.cpp index dcd30e48dff5..20f2e71b140a 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/sinh.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/sinh.pass.cpp @@ -36,73 +36,73 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = sinh(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = sinh(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { assert(r.real() == 0); - assert(std::signbit(r.real()) == std::signbit(x[i].real())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (x[i].real() == 0 && std::isinf(x[i].imag())) + else if (testcases[i].real() == 0 && std::isinf(testcases[i].imag())) { assert(r.real() == 0); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (x[i].real() == 0 && std::isnan(x[i].imag())) + else if (testcases[i].real() == 0 && std::isnan(testcases[i].imag())) { assert(r.real() == 0); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].imag() == 0) + else if (std::isinf(testcases[i].real()) && testcases[i].imag() == 0) { assert(std::isinf(r.real())); - assert(std::signbit(r.real()) == std::signbit(x[i].real())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isinf(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real())); - assert(std::signbit(r.real()) == std::signbit(x[i].real() * cos(x[i].imag()))); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real() * cos(testcases[i].imag()))); assert(std::isinf(r.imag())); - assert(std::signbit(r.imag()) == std::signbit(sin(x[i].imag()))); + assert(std::signbit(r.imag()) == std::signbit(sin(testcases[i].imag()))); } - else if (std::isinf(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isinf(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && x[i].imag() == 0) + else if (std::isnan(testcases[i].real()) && testcases[i].imag() == 0) { assert(std::isnan(r.real())); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); diff --git a/test/std/numerics/complex.number/complex.transcendentals/sqrt.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/sqrt.pass.cpp index 69309d2b9ab1..d3273179a6da 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/sqrt.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/sqrt.pass.cpp @@ -36,58 +36,58 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = sqrt(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = sqrt(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { assert(!std::signbit(r.real())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(std::isinf(r.imag())); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isfinite(testcases[i].imag())) { assert(r.real() == 0); assert(!std::signbit(r.real())); assert(std::isinf(r.imag())); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isfinite(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(r.imag() == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r.imag())); + assert(std::signbit(testcases[i].imag()) == std::signbit(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() < 0 && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() < 0 && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isinf(r.imag())); } - else if (std::isinf(x[i].real()) && x[i].real() > 0 && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && testcases[i].real() > 0 && std::isnan(testcases[i].imag())) { assert(std::isinf(r.real())); assert(r.real() > 0); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && (std::isfinite(x[i].imag()) || std::isnan(x[i].imag()))) + else if (std::isnan(testcases[i].real()) && (std::isfinite(testcases[i].imag()) || std::isnan(testcases[i].imag()))) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::signbit(x[i].imag())) + else if (std::signbit(testcases[i].imag())) { assert(!std::signbit(r.real())); assert(std::signbit(r.imag())); diff --git a/test/std/numerics/complex.number/complex.transcendentals/tan.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/tan.pass.cpp index 881427600686..041a7814d033 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/tan.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/tan.pass.cpp @@ -37,11 +37,11 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = tan(x[i]); - std::complex<double> t1(-imag(x[i]), real(x[i])); + std::complex<double> r = tan(testcases[i]); + std::complex<double> t1(-imag(testcases[i]), real(testcases[i])); std::complex<double> t2 = tanh(t1); std::complex<double> z(imag(t2), -real(t2)); if (std::isnan(real(r))) diff --git a/test/std/numerics/complex.number/complex.transcendentals/tanh.pass.cpp b/test/std/numerics/complex.number/complex.transcendentals/tanh.pass.cpp index 907c0e64dba9..9a2276a8b753 100644 --- a/test/std/numerics/complex.number/complex.transcendentals/tanh.pass.cpp +++ b/test/std/numerics/complex.number/complex.transcendentals/tanh.pass.cpp @@ -36,55 +36,55 @@ void test_edges() { typedef std::complex<double> C; const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = tanh(x[i]); - if (x[i].real() == 0 && x[i].imag() == 0) + std::complex<double> r = tanh(testcases[i]); + if (testcases[i].real() == 0 && testcases[i].imag() == 0) { assert(r.real() == 0); - assert(std::signbit(r.real()) == std::signbit(x[i].real())); + assert(std::signbit(r.real()) == std::signbit(testcases[i].real())); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isfinite(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isfinite(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isfinite(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isinf(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(r.real() == 1); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(sin(2*x[i].imag()))); + assert(std::signbit(r.imag()) == std::signbit(sin(2*testcases[i].imag()))); } - else if (std::isinf(x[i].real()) && std::isinf(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag())) { assert(r.real() == 1); assert(r.imag() == 0); } - else if (std::isinf(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isinf(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(r.real() == 1); assert(r.imag() == 0); } - else if (std::isnan(x[i].real()) && x[i].imag() == 0) + else if (std::isnan(testcases[i].real()) && testcases[i].imag() == 0) { assert(std::isnan(r.real())); assert(r.imag() == 0); - assert(std::signbit(r.imag()) == std::signbit(x[i].imag())); + assert(std::signbit(r.imag()) == std::signbit(testcases[i].imag())); } - else if (std::isnan(x[i].real()) && std::isfinite(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isfinite(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); } - else if (std::isnan(x[i].real()) && std::isnan(x[i].imag())) + else if (std::isnan(testcases[i].real()) && std::isnan(testcases[i].imag())) { assert(std::isnan(r.real())); assert(std::isnan(r.imag())); diff --git a/test/std/numerics/complex.number/complex.value.ops/abs.pass.cpp b/test/std/numerics/complex.number/complex.value.ops/abs.pass.cpp index 5d841d6ee9f1..7a0e3bd70072 100644 --- a/test/std/numerics/complex.number/complex.value.ops/abs.pass.cpp +++ b/test/std/numerics/complex.number/complex.value.ops/abs.pass.cpp @@ -28,11 +28,11 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - double r = abs(x[i]); - switch (classify(x[i])) + double r = abs(testcases[i]); + switch (classify(testcases[i])) { case zero: assert(r == 0); diff --git a/test/std/numerics/complex.number/complex.value.ops/arg.pass.cpp b/test/std/numerics/complex.number/complex.value.ops/arg.pass.cpp index a7da456b979c..78f2781b76e2 100644 --- a/test/std/numerics/complex.number/complex.value.ops/arg.pass.cpp +++ b/test/std/numerics/complex.number/complex.value.ops/arg.pass.cpp @@ -29,42 +29,42 @@ test() void test_edges() { const double pi = std::atan2(+0., -0.); - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - double r = arg(x[i]); - if (std::isnan(x[i].real()) || std::isnan(x[i].imag())) + double r = arg(testcases[i]); + if (std::isnan(testcases[i].real()) || std::isnan(testcases[i].imag())) assert(std::isnan(r)); else { - switch (classify(x[i])) + switch (classify(testcases[i])) { case zero: - if (std::signbit(x[i].real())) + if (std::signbit(testcases[i].real())) { - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r, -pi); else is_about(r, pi); } else { - assert(std::signbit(x[i].imag()) == std::signbit(r)); + assert(std::signbit(testcases[i].imag()) == std::signbit(r)); } break; case non_zero: - if (x[i].real() == 0) + if (testcases[i].real() == 0) { - if (x[i].imag() < 0) + if (testcases[i].imag() < 0) is_about(r, -pi/2); else is_about(r, pi/2); } - else if (x[i].imag() == 0) + else if (testcases[i].imag() == 0) { - if (x[i].real() < 0) + if (testcases[i].real() < 0) { - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r, -pi); else is_about(r, pi); @@ -72,37 +72,37 @@ void test_edges() else { assert(r == 0); - assert(std::signbit(x[i].imag()) == std::signbit(r)); + assert(std::signbit(testcases[i].imag()) == std::signbit(r)); } } - else if (x[i].imag() > 0) + else if (testcases[i].imag() > 0) assert(r > 0); else assert(r < 0); break; case inf: - if (std::isinf(x[i].real()) && std::isinf(x[i].imag())) + if (std::isinf(testcases[i].real()) && std::isinf(testcases[i].imag())) { - if (x[i].real() < 0) + if (testcases[i].real() < 0) { - if (x[i].imag() > 0) + if (testcases[i].imag() > 0) is_about(r, 0.75 * pi); else is_about(r, -0.75 * pi); } else { - if (x[i].imag() > 0) + if (testcases[i].imag() > 0) is_about(r, 0.25 * pi); else is_about(r, -0.25 * pi); } } - else if (std::isinf(x[i].real())) + else if (std::isinf(testcases[i].real())) { - if (x[i].real() < 0) + if (testcases[i].real() < 0) { - if (std::signbit(x[i].imag())) + if (std::signbit(testcases[i].imag())) is_about(r, -pi); else is_about(r, pi); @@ -110,12 +110,12 @@ void test_edges() else { assert(r == 0); - assert(std::signbit(r) == std::signbit(x[i].imag())); + assert(std::signbit(r) == std::signbit(testcases[i].imag())); } } else { - if (x[i].imag() < 0) + if (testcases[i].imag() < 0) is_about(r, -pi/2); else is_about(r, pi/2); diff --git a/test/std/numerics/complex.number/complex.value.ops/norm.pass.cpp b/test/std/numerics/complex.number/complex.value.ops/norm.pass.cpp index 48f774e8e1c9..da7ad14bedce 100644 --- a/test/std/numerics/complex.number/complex.value.ops/norm.pass.cpp +++ b/test/std/numerics/complex.number/complex.value.ops/norm.pass.cpp @@ -28,11 +28,11 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - double r = norm(x[i]); - switch (classify(x[i])) + double r = norm(testcases[i]); + switch (classify(testcases[i])) { case zero: assert(r == 0); diff --git a/test/std/numerics/complex.number/complex.value.ops/polar.pass.cpp b/test/std/numerics/complex.number/complex.value.ops/polar.pass.cpp index a8747bd7c83b..5e6cb0d523c2 100644 --- a/test/std/numerics/complex.number/complex.value.ops/polar.pass.cpp +++ b/test/std/numerics/complex.number/complex.value.ops/polar.pass.cpp @@ -46,11 +46,11 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - double r = real(x[i]); - double theta = imag(x[i]); + double r = real(testcases[i]); + double theta = imag(testcases[i]); std::complex<double> z = std::polar(r, theta); switch (classify(r)) { diff --git a/test/std/numerics/complex.number/complex.value.ops/proj.pass.cpp b/test/std/numerics/complex.number/complex.value.ops/proj.pass.cpp index 10bf7f8576f6..1a7e0c53f3d3 100644 --- a/test/std/numerics/complex.number/complex.value.ops/proj.pass.cpp +++ b/test/std/numerics/complex.number/complex.value.ops/proj.pass.cpp @@ -37,26 +37,26 @@ test() void test_edges() { - const unsigned N = sizeof(x) / sizeof(x[0]); + const unsigned N = sizeof(testcases) / sizeof(testcases[0]); for (unsigned i = 0; i < N; ++i) { - std::complex<double> r = proj(x[i]); - switch (classify(x[i])) + std::complex<double> r = proj(testcases[i]); + switch (classify(testcases[i])) { case zero: case non_zero: - assert(r == x[i]); - assert(std::signbit(real(r)) == std::signbit(real(x[i]))); - assert(std::signbit(imag(r)) == std::signbit(imag(x[i]))); + assert(r == testcases[i]); + assert(std::signbit(real(r)) == std::signbit(real(testcases[i]))); + assert(std::signbit(imag(r)) == std::signbit(imag(testcases[i]))); break; case inf: assert(std::isinf(real(r)) && real(r) > 0); assert(imag(r) == 0); - assert(std::signbit(imag(r)) == std::signbit(imag(x[i]))); + assert(std::signbit(imag(r)) == std::signbit(imag(testcases[i]))); break; case NaN: case non_zero_nan: - assert(classify(r) == classify(x[i])); + assert(classify(r) == classify(testcases[i])); break; } } diff --git a/test/std/numerics/complex.number/version.pass.cpp b/test/std/numerics/complex.number/version.pass.cpp deleted file mode 100644 index 316cfec739a9..000000000000 --- a/test/std/numerics/complex.number/version.pass.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <complex> - -#include <complex> - -#ifndef _LIBCPP_VERSION -#error _LIBCPP_VERSION not defined -#endif - -int main() -{ -} diff --git a/test/std/numerics/numarray/template.valarray/valarray.unary/not.pass.cpp b/test/std/numerics/numarray/template.valarray/valarray.unary/not.pass.cpp index 0b792c68fb94..306ea0c18470 100644 --- a/test/std/numerics/numarray/template.valarray/valarray.unary/not.pass.cpp +++ b/test/std/numerics/numarray/template.valarray/valarray.unary/not.pass.cpp @@ -36,6 +36,6 @@ int main() std::valarray<bool> v2 = !(v + v); assert(v2.size() == v.size()); for (int i = 0; i < v2.size(); ++i) - assert(v2[i] == !2*v[i]); + assert(v2[i] == !(2 * v[i])); } } diff --git a/test/std/numerics/numarray/version.pass.cpp b/test/std/numerics/numarray/version.pass.cpp deleted file mode 100644 index 85457d4329ec..000000000000 --- a/test/std/numerics/numarray/version.pass.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <valarray> - -#include <valarray> - -#ifndef _LIBCPP_VERSION -#error _LIBCPP_VERSION not defined -#endif - -int main() -{ -} diff --git a/test/std/numerics/numeric.ops/version.pass.cpp b/test/std/numerics/numeric.ops/version.pass.cpp deleted file mode 100644 index fb6e0a1063ce..000000000000 --- a/test/std/numerics/numeric.ops/version.pass.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <numeric> - -#include <numeric> - -#ifndef _LIBCPP_VERSION -#error _LIBCPP_VERSION not defined -#endif - -int main() -{ -} diff --git a/test/std/numerics/rand/rand.device/ctor.pass.cpp b/test/std/numerics/rand/rand.device/ctor.pass.cpp index dfeccc81e30e..8c45bb19a0a6 100644 --- a/test/std/numerics/rand/rand.device/ctor.pass.cpp +++ b/test/std/numerics/rand/rand.device/ctor.pass.cpp @@ -22,7 +22,13 @@ #include <random> #include <system_error> #include <cassert> + +#if !defined(_WIN32) #include <unistd.h> +#endif + +#include "test_macros.h" + bool is_valid_random_device(const std::string &token) { #if defined(_LIBCPP_USING_DEV_RANDOM) @@ -40,33 +46,20 @@ void check_random_device_valid(const std::string &token) { void check_random_device_invalid(const std::string &token) { try { std::random_device r(token); - assert(false); - } catch (const std::system_error &e) { + LIBCPP_ASSERT(false); + } catch (const std::system_error&) { } } -int main() { - { std::random_device r; } +int main() { { - int ec; - ec = close(STDIN_FILENO); - assert(!ec); - ec = close(STDOUT_FILENO); - assert(!ec); - ec = close(STDERR_FILENO); - assert(!ec); std::random_device r; } - { std::string token = "wrong file"; - if (is_valid_random_device(token)) - check_random_device_valid(token); - else - check_random_device_invalid(token); + check_random_device_invalid(token); } - { std::string token = "/dev/urandom"; if (is_valid_random_device(token)) @@ -74,7 +67,6 @@ int main() { else check_random_device_invalid(token); } - { std::string token = "/dev/random"; if (is_valid_random_device(token)) @@ -82,4 +74,19 @@ int main() { else check_random_device_invalid(token); } +#if !defined(_WIN32) +// Test that random_device(const string&) properly handles getting +// a file descriptor with the value '0'. Do this by closing the standard +// streams so that the descriptor '0' is available. + { + int ec; + ec = close(STDIN_FILENO); + assert(!ec); + ec = close(STDOUT_FILENO); + assert(!ec); + ec = close(STDERR_FILENO); + assert(!ec); + std::random_device r; + } +#endif // !defined(_WIN32) } diff --git a/test/std/numerics/rand/rand.device/eval.pass.cpp b/test/std/numerics/rand/rand.device/eval.pass.cpp index ed5361fbde75..eabcc201e068 100644 --- a/test/std/numerics/rand/rand.device/eval.pass.cpp +++ b/test/std/numerics/rand/rand.device/eval.pass.cpp @@ -17,6 +17,8 @@ #include <random> #include <cassert> +#include "test_macros.h" + int main() { { @@ -28,9 +30,9 @@ int main() { std::random_device r("/dev/null"); r(); - assert(false); + LIBCPP_ASSERT(false); } - catch (const std::system_error& e) + catch (const std::system_error&) { } } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp index f071e8507478..b267c2477e91 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval.pass.cpp @@ -44,10 +44,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -80,10 +80,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp index e03fb57f380c..f96df82304f0 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bernoulli/eval_param.pass.cpp @@ -46,10 +46,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -84,10 +84,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp index 43c6b546bdb2..88004ba4a741 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp @@ -29,447 +29,491 @@ sqr(T x) return x * x; } -int main() +void +test1() { + typedef std::binomial_distribution<> D; + typedef std::mt19937_64 G; + G g; + D d(5, .75); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937_64 G; - G g; - D d(5, .75); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); - double x_skew = (1-2*d.p()) / std::sqrt(x_var); - double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.04); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(30, .03125); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); - double x_skew = (1-2*d.p()) / std::sqrt(x_var); - double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); + double x_skew = (1-2*d.p()) / std::sqrt(x_var); + double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.04); +} + +void +test2() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(30, .03125); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(40, .25); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); - double x_skew = (1-2*d.p()) / std::sqrt(x_var); - double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.03); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.3); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(40, 0); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - // In this case: - // skew computes to 0./0. == nan - // kurtosis computes to 0./0. == nan - // x_skew == inf - // x_kurtosis == inf - // These tests are commented out because UBSan warns about division by 0 -// skew /= u.size() * dev * var; -// kurtosis /= u.size() * var * var; -// kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); -// double x_skew = (1-2*d.p()) / std::sqrt(x_var); -// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(mean == x_mean); - assert(var == x_var); -// assert(skew == x_skew); -// assert(kurtosis == x_kurtosis); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); + double x_skew = (1-2*d.p()) / std::sqrt(x_var); + double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test3() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(40, .25); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(40, 1); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - // In this case: - // skew computes to 0./0. == nan - // kurtosis computes to 0./0. == nan - // x_skew == -inf - // x_kurtosis == inf - // These tests are commented out because UBSan warns about division by 0 -// skew /= u.size() * dev * var; -// kurtosis /= u.size() * var * var; -// kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); -// double x_skew = (1-2*d.p()) / std::sqrt(x_var); -// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(mean == x_mean); - assert(var == x_var); -// assert(skew == x_skew); -// assert(kurtosis == x_kurtosis); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(400, 0.5); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); - double x_skew = (1-2*d.p()) / std::sqrt(x_var); - double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs(kurtosis - x_kurtosis) < 0.01); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); + double x_skew = (1-2*d.p()) / std::sqrt(x_var); + double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.03); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.3); +} + +void +test4() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(40, 0); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(1, 0.5); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); - double x_skew = (1-2*d.p()) / std::sqrt(x_var); - double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - const int N = 100000; - std::mt19937 gen1; - std::mt19937 gen2; + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + // In this case: + // skew computes to 0./0. == nan + // kurtosis computes to 0./0. == nan + // x_skew == inf + // x_kurtosis == inf + // These tests are commented out because UBSan warns about division by 0 +// skew /= u.size() * dev * var; +// kurtosis /= u.size() * var * var; +// kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); +// double x_skew = (1-2*d.p()) / std::sqrt(x_var); +// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(mean == x_mean); + assert(var == x_var); +// assert(skew == x_skew); +// assert(kurtosis == x_kurtosis); +} - std::binomial_distribution<> dist1(5, 0.1); - std::binomial_distribution<unsigned> dist2(5, 0.1); +void +test5() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(40, 1); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + // In this case: + // skew computes to 0./0. == nan + // kurtosis computes to 0./0. == nan + // x_skew == -inf + // x_kurtosis == inf + // These tests are commented out because UBSan warns about division by 0 +// skew /= u.size() * dev * var; +// kurtosis /= u.size() * var * var; +// kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); +// double x_skew = (1-2*d.p()) / std::sqrt(x_var); +// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(mean == x_mean); + assert(var == x_var); +// assert(skew == x_skew); +// assert(kurtosis == x_kurtosis); +} - for(int i = 0; i < N; ++i) - assert(dist1(gen1) == dist2(gen2)); +void +test6() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(400, 0.5); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(0, 0.005); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - // In this case: - // skew computes to 0./0. == nan - // kurtosis computes to 0./0. == nan - // x_skew == inf - // x_kurtosis == inf - // These tests are commented out because UBSan warns about division by 0 -// skew /= u.size() * dev * var; -// kurtosis /= u.size() * var * var; -// kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); -// double x_skew = (1-2*d.p()) / std::sqrt(x_var); -// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(mean == x_mean); - assert(var == x_var); -// assert(skew == x_skew); -// assert(kurtosis == x_kurtosis); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); + double x_skew = (1-2*d.p()) / std::sqrt(x_var); + double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs(kurtosis - x_kurtosis) < 0.01); +} + +void +test7() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(1, 0.5); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(0, 0); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - // In this case: - // skew computes to 0./0. == nan - // kurtosis computes to 0./0. == nan - // x_skew == inf - // x_kurtosis == inf - // These tests are commented out because UBSan warns about division by 0 -// skew /= u.size() * dev * var; -// kurtosis /= u.size() * var * var; -// kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); -// double x_skew = (1-2*d.p()) / std::sqrt(x_var); -// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(mean == x_mean); - assert(var == x_var); -// assert(skew == x_skew); -// assert(kurtosis == x_kurtosis); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(0, 1); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - // In this case: - // skew computes to 0./0. == nan - // kurtosis computes to 0./0. == nan - // x_skew == -inf - // x_kurtosis == inf - // These tests are commented out because UBSan warns about division by 0 -// skew /= u.size() * dev * var; -// kurtosis /= u.size() * var * var; -// kurtosis -= 3; - double x_mean = d.t() * d.p(); - double x_var = x_mean*(1-d.p()); -// double x_skew = (1-2*d.p()) / std::sqrt(x_var); -// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; - assert(mean == x_mean); - assert(var == x_var); -// assert(skew == x_skew); -// assert(kurtosis == x_kurtosis); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); + double x_skew = (1-2*d.p()) / std::sqrt(x_var); + double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test8() +{ + const int N = 100000; + std::mt19937 gen1; + std::mt19937 gen2; + + std::binomial_distribution<> dist1(5, 0.1); + std::binomial_distribution<unsigned> dist2(5, 0.1); + + for(int i = 0; i < N; ++i) + assert(dist1(gen1) == dist2(gen2)); +} + +void +test9() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(0, 0.005); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + // In this case: + // skew computes to 0./0. == nan + // kurtosis computes to 0./0. == nan + // x_skew == inf + // x_kurtosis == inf + // These tests are commented out because UBSan warns about division by 0 +// skew /= u.size() * dev * var; +// kurtosis /= u.size() * var * var; +// kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); +// double x_skew = (1-2*d.p()) / std::sqrt(x_var); +// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(mean == x_mean); + assert(var == x_var); +// assert(skew == x_skew); +// assert(kurtosis == x_kurtosis); +} + +void +test10() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(0, 0); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + // In this case: + // skew computes to 0./0. == nan + // kurtosis computes to 0./0. == nan + // x_skew == inf + // x_kurtosis == inf + // These tests are commented out because UBSan warns about division by 0 +// skew /= u.size() * dev * var; +// kurtosis /= u.size() * var * var; +// kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); +// double x_skew = (1-2*d.p()) / std::sqrt(x_var); +// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(mean == x_mean); + assert(var == x_var); +// assert(skew == x_skew); +// assert(kurtosis == x_kurtosis); +} + +void +test11() +{ + typedef std::binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(0, 1); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + // In this case: + // skew computes to 0./0. == nan + // kurtosis computes to 0./0. == nan + // x_skew == -inf + // x_kurtosis == inf + // These tests are commented out because UBSan warns about division by 0 +// skew /= u.size() * dev * var; +// kurtosis /= u.size() * var * var; +// kurtosis -= 3; + double x_mean = d.t() * d.p(); + double x_var = x_mean*(1-d.p()); +// double x_skew = (1-2*d.p()) / std::sqrt(x_var); +// double x_kurtosis = (1-6*d.p()*(1-d.p())) / x_var; + assert(mean == x_mean); + assert(var == x_var); +// assert(skew == x_skew); +// assert(kurtosis == x_kurtosis); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); + test7(); + test8(); + test9(); + test10(); + test11(); } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp index 1aa66ed57ad1..092a69778513 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.bin/eval_param.pass.cpp @@ -53,10 +53,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -95,10 +95,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -137,10 +137,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp index a8ef221e3b67..4e9f9d3c044d 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp @@ -29,246 +29,270 @@ sqr(T x) return x * x; } -int main() +void +test1() +{ + typedef std::geometric_distribution<> D; + typedef std::mt19937 G; + G g; + D d(.03125); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); + double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test2() +{ + typedef std::geometric_distribution<> D; + typedef std::mt19937 G; + G g; + D d(0.05); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); + double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); +} + +void +test3() +{ + typedef std::geometric_distribution<> D; + typedef std::minstd_rand G; + G g; + D d(.25); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); + double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); +} + +void +test4() { + typedef std::geometric_distribution<> D; + typedef std::mt19937 G; + G g; + D d(0.5); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::geometric_distribution<> D; - typedef std::mt19937 G; - G g; - D d(.03125); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); - double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::geometric_distribution<> D; - typedef std::mt19937 G; - G g; - D d(0.05); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); - double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); + double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); +} + +void +test5() +{ + typedef std::geometric_distribution<> D; + typedef std::mt19937 G; + G g; + D d(0.75); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::geometric_distribution<> D; - typedef std::minstd_rand G; - G g; - D d(.25); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); - double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::geometric_distribution<> D; - typedef std::mt19937 G; - G g; - D d(0.5); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); - double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); + double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); +} + +void +test6() +{ + typedef std::geometric_distribution<> D; + typedef std::mt19937 G; + G g; + D d(0.96875); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::geometric_distribution<> D; - typedef std::mt19937 G; - G g; - D d(0.75); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); - double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::geometric_distribution<> D; - typedef std::mt19937 G; - G g; - D d(0.96875); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); - double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt((1 - d.p())); + double x_kurtosis = 6 + sqr(d.p()) / (1 - d.p()); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp index 91dea8aa1337..c451f0130904 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.geo/eval_param.pass.cpp @@ -53,10 +53,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -95,10 +95,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -137,10 +137,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp index 853161e9f9b7..929e6e7e6c3b 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp @@ -29,244 +29,268 @@ sqr(T x) return x * x; } -int main() +void +test1() +{ + typedef std::negative_binomial_distribution<> D; + typedef std::minstd_rand G; + G g; + D d(5, .25); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.k() * (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); + double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); +} + +void +test2() +{ + typedef std::negative_binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(30, .03125); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.k() * (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); + double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test3() +{ + typedef std::negative_binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(40, .25); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.k() * (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); + double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); +} + +void +test4() { + typedef std::negative_binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(40, 1); + const int N = 1000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::negative_binomial_distribution<> D; - typedef std::minstd_rand G; - G g; - D d(5, .25); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.k() * (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); - double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.02); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::negative_binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(30, .03125); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.k() * (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); - double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.k() * (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); + double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); + assert(mean == x_mean); + assert(var == x_var); +} + +void +test5() +{ + typedef std::negative_binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(400, 0.5); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::negative_binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(40, .25); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.k() * (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); - double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::negative_binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(40, 1); - const int N = 1000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.k() * (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); - double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); - assert(mean == x_mean); - assert(var == x_var); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.k() * (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); + double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.04); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05); +} + +void +test6() +{ + typedef std::negative_binomial_distribution<> D; + typedef std::mt19937 G; + G g; + D d(1, 0.05); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::negative_binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(400, 0.5); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.k() * (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); - double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.04); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05); + D::result_type v = d(g); + assert(d.min() <= v && v <= d.max()); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), + double(0)) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::negative_binomial_distribution<> D; - typedef std::mt19937 G; - G g; - D d(1, 0.05); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v <= d.max()); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), - double(0)) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.k() * (1 - d.p()) / d.p(); - double x_var = x_mean / d.p(); - double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); - double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.k() * (1 - d.p()) / d.p(); + double x_var = x_mean / d.p(); + double x_skew = (2 - d.p()) / std::sqrt(d.k() * (1 - d.p())); + double x_kurtosis = 6. / d.k() + sqr(d.p()) / (d.k() * (1 - d.p())); + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp index f2f2a07879e2..2710061a1a05 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.bern/rand.dist.bern.negbin/eval_param.pass.cpp @@ -53,10 +53,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -95,10 +95,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -137,10 +137,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp index 6fbdd93f8ffd..f6bc3c73993c 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval.pass.cpp @@ -51,10 +51,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -91,10 +91,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -131,10 +131,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp index 548848d19f3e..fd52a0488979 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.chisq/eval_param.pass.cpp @@ -52,10 +52,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -93,10 +93,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -134,10 +134,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp index 9b111cced8a8..2ad6784cd878 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval.pass.cpp @@ -29,216 +29,236 @@ sqr(T x) return x * x; } -int main() +void +test1() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-1./8192, 0.015625); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(v > 0); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(d.m() + sqr(d.s())/2); + double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); + double x_skew = (std::exp(sqr(d.s())) + 2) * + std::sqrt((std::exp(sqr(d.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + + 3*std::exp(2*sqr(d.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.05); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25); +} + +void +test2() { + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-1./32, 0.25); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-1./8192, 0.015625); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(d.m() + sqr(d.s())/2); - double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); - double x_skew = (std::exp(sqr(d.s())) + 2) * - std::sqrt((std::exp(sqr(d.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + - 3*std::exp(2*sqr(d.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.05); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25); + D::result_type v = d(g); + assert(v > 0); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-1./32, 0.25); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(d.m() + sqr(d.s())/2); - double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); - double x_skew = (std::exp(sqr(d.s())) + 2) * - std::sqrt((std::exp(sqr(d.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + - 3*std::exp(2*sqr(d.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(d.m() + sqr(d.s())/2); + double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); + double x_skew = (std::exp(sqr(d.s())) + 2) * + std::sqrt((std::exp(sqr(d.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + + 3*std::exp(2*sqr(d.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); +} + +void +test3() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-1./8, 0.5); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-1./8, 0.5); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(d.m() + sqr(d.s())/2); - double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); - double x_skew = (std::exp(sqr(d.s())) + 2) * - std::sqrt((std::exp(sqr(d.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + - 3*std::exp(2*sqr(d.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.02); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05); + D::result_type v = d(g); + assert(v > 0); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d; - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(d.m() + sqr(d.s())/2); - double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); - double x_skew = (std::exp(sqr(d.s())) + 2) * - std::sqrt((std::exp(sqr(d.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + - 3*std::exp(2*sqr(d.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.02); - assert(std::abs((skew - x_skew) / x_skew) < 0.08); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(d.m() + sqr(d.s())/2); + double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); + double x_skew = (std::exp(sqr(d.s())) + 2) * + std::sqrt((std::exp(sqr(d.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + + 3*std::exp(2*sqr(d.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.02); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05); +} + +void +test4() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d; + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-0.78125, 1.25); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(d.m() + sqr(d.s())/2); - double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); - double x_skew = (std::exp(sqr(d.s())) + 2) * - std::sqrt((std::exp(sqr(d.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + - 3*std::exp(2*sqr(d.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.04); - assert(std::abs((skew - x_skew) / x_skew) < 0.2); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7); + D::result_type v = d(g); + assert(v > 0); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(d.m() + sqr(d.s())/2); + double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); + double x_skew = (std::exp(sqr(d.s())) + 2) * + std::sqrt((std::exp(sqr(d.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + + 3*std::exp(2*sqr(d.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.02); + assert(std::abs((skew - x_skew) / x_skew) < 0.08); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4); +} + +void +test5() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-0.78125, 1.25); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(v > 0); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(d.m() + sqr(d.s())/2); + double x_var = (std::exp(sqr(d.s())) - 1) * std::exp(2*d.m() + sqr(d.s())); + double x_skew = (std::exp(sqr(d.s())) + 2) * + std::sqrt((std::exp(sqr(d.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(d.s())) + 2*std::exp(3*sqr(d.s())) + + 3*std::exp(2*sqr(d.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.04); + assert(std::abs((skew - x_skew) / x_skew) < 0.2); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp index 283403ea1a0d..8f397fcab096 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.lognormal/eval_param.pass.cpp @@ -29,222 +29,241 @@ sqr(T x) return x * x; } -int main() +void +test1() { + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d; + P p(-1./8192, 0.015625); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g, p); + assert(v > 0); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(p.m() + sqr(p.s())/2); + double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); + double x_skew = (std::exp(sqr(p.s())) + 2) * + std::sqrt((std::exp(sqr(p.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + + 3*std::exp(2*sqr(p.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.05); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25); +} + +void +test2() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d; + P p(-1./32, 0.25); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g, p); + assert(v > 0); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(p.m() + sqr(p.s())/2); + double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); + double x_skew = (std::exp(sqr(p.s())) + 2) * + std::sqrt((std::exp(sqr(p.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + + 3*std::exp(2*sqr(p.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); +} +void +test3() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d; + P p(-1./8, 0.5); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d; - P p(-1./8192, 0.015625); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(p.m() + sqr(p.s())/2); - double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); - double x_skew = (std::exp(sqr(p.s())) + 2) * - std::sqrt((std::exp(sqr(p.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + - 3*std::exp(2*sqr(p.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.05); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.25); + D::result_type v = d(g, p); + assert(v > 0); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d; - P p(-1./32, 0.25); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(p.m() + sqr(p.s())/2); - double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); - double x_skew = (std::exp(sqr(p.s())) + 2) * - std::sqrt((std::exp(sqr(p.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + - 3*std::exp(2*sqr(p.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.03); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(p.m() + sqr(p.s())/2); + double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); + double x_skew = (std::exp(sqr(p.s())) + 2) * + std::sqrt((std::exp(sqr(p.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + + 3*std::exp(2*sqr(p.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.02); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05); +} + +void +test4() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(3, 4); + P p; + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d; - P p(-1./8, 0.5); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(p.m() + sqr(p.s())/2); - double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); - double x_skew = (std::exp(sqr(p.s())) + 2) * - std::sqrt((std::exp(sqr(p.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + - 3*std::exp(2*sqr(p.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.02); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.05); + D::result_type v = d(g, p); + assert(v > 0); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(3, 4); - P p; - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(p.m() + sqr(p.s())/2); - double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); - double x_skew = (std::exp(sqr(p.s())) + 2) * - std::sqrt((std::exp(sqr(p.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + - 3*std::exp(2*sqr(p.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.02); - assert(std::abs((skew - x_skew) / x_skew) < 0.08); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(p.m() + sqr(p.s())/2); + double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); + double x_skew = (std::exp(sqr(p.s())) + 2) * + std::sqrt((std::exp(sqr(p.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + + 3*std::exp(2*sqr(p.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.02); + assert(std::abs((skew - x_skew) / x_skew) < 0.08); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.4); +} + +void +test5() +{ + typedef std::lognormal_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d; + P p(-0.78125, 1.25); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::lognormal_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d; - P p(-0.78125, 1.25); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - assert(v > 0); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = std::exp(p.m() + sqr(p.s())/2); - double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); - double x_skew = (std::exp(sqr(p.s())) + 2) * - std::sqrt((std::exp(sqr(p.s())) - 1)); - double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + - 3*std::exp(2*sqr(p.s())) - 6; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.04); - assert(std::abs((skew - x_skew) / x_skew) < 0.2); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7); + D::result_type v = d(g, p); + assert(v > 0); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = std::exp(p.m() + sqr(p.s())/2); + double x_var = (std::exp(sqr(p.s())) - 1) * std::exp(2*p.m() + sqr(p.s())); + double x_skew = (std::exp(sqr(p.s())) + 2) * + std::sqrt((std::exp(sqr(p.s())) - 1)); + double x_kurtosis = std::exp(4*sqr(p.s())) + 2*std::exp(3*sqr(p.s())) + + 3*std::exp(2*sqr(p.s())) - 6; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.04); + assert(std::abs((skew - x_skew) / x_skew) < 0.2); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.7); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp index 95d0272dbc32..69f786397711 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval.pass.cpp @@ -47,10 +47,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp index 20c3a44f13e1..af9c547cb7f9 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.normal/eval_param.pass.cpp @@ -48,10 +48,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp index ef6b37e9f9cc..9210e8a8d350 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval.pass.cpp @@ -47,10 +47,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -83,10 +83,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -119,10 +119,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp index 70bc29e3ad13..93053f0a36b7 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.norm/rand.dist.norm.t/eval_param.pass.cpp @@ -48,10 +48,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -85,10 +85,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -122,10 +122,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp index b2fe52676e7e..42965b0e6ab2 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval.pass.cpp @@ -51,10 +51,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -91,10 +91,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -131,10 +131,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp index 9879e63a33e9..e7de18fdb434 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.exp/eval_param.pass.cpp @@ -52,10 +52,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp index 6390acef8941..3f1b331889e5 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval.pass.cpp @@ -29,162 +29,178 @@ sqr(T x) return x * x; } -int main() +void +test1() +{ + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(0.5, 2); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.a() + d.b() * 0.577215665; + double x_var = sqr(d.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test2() +{ + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(1, 2); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.a() + d.b() * 0.577215665; + double x_var = sqr(d.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test3() { + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(1.5, 3); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(0.5, 2); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.a() + d.b() * 0.577215665; - double x_var = sqr(d.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + D::result_type v = d(g); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(1, 2); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.a() + d.b() * 0.577215665; - double x_var = sqr(d.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.a() + d.b() * 0.577215665; + double x_var = sqr(d.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test4() +{ + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(3, 4); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(1.5, 3); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.a() + d.b() * 0.577215665; - double x_var = sqr(d.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + D::result_type v = d(g); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(3, 4); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = d.a() + d.b() * 0.577215665; - double x_var = sqr(d.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = d.a() + d.b() * 0.577215665; + double x_var = sqr(d.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp index 6152cce8f4f8..21bf774228f8 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.extreme/eval_param.pass.cpp @@ -29,166 +29,182 @@ sqr(T x) return x * x; } -int main() +void +test1() +{ + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-0.5, 1); + P p(0.5, 2); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g, p); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = p.a() + p.b() * 0.577215665; + double x_var = sqr(p.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test2() +{ + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-0.5, 1); + P p(1, 2); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g, p); + u.push_back(v); + } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) + { + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; + } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = p.a() + p.b() * 0.577215665; + double x_var = sqr(p.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test3() { + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-0.5, 1); + P p(1.5, 3); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-0.5, 1); - P p(0.5, 2); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = p.a() + p.b() * 0.577215665; - double x_var = sqr(p.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + D::result_type v = d(g, p); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-0.5, 1); - P p(1, 2); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = p.a() + p.b() * 0.577215665; - double x_var = sqr(p.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = p.a() + p.b() * 0.577215665; + double x_var = sqr(p.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +void +test4() +{ + typedef std::extreme_value_distribution<> D; + typedef D::param_type P; + typedef std::mt19937 G; + G g; + D d(-0.5, 1); + P p(3, 4); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-0.5, 1); - P p(1.5, 3); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = p.a() + p.b() * 0.577215665; - double x_var = sqr(p.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + D::result_type v = d(g, p); + u.push_back(v); } + double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); + double var = 0; + double skew = 0; + double kurtosis = 0; + for (int i = 0; i < u.size(); ++i) { - typedef std::extreme_value_distribution<> D; - typedef D::param_type P; - typedef std::mt19937 G; - G g; - D d(-0.5, 1); - P p(3, 4); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g, p); - u.push_back(v); - } - double mean = std::accumulate(u.begin(), u.end(), 0.0) / u.size(); - double var = 0; - double skew = 0; - double kurtosis = 0; - for (int i = 0; i < u.size(); ++i) - { - double d = (u[i] - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= u.size(); - double dev = std::sqrt(var); - skew /= u.size() * dev * var; - kurtosis /= u.size() * var * var; - kurtosis -= 3; - double x_mean = p.a() + p.b() * 0.577215665; - double x_var = sqr(p.b()) * 1.644934067; - double x_skew = 1.139547; - double x_kurtosis = 12./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs((skew - x_skew) / x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= u.size(); + double dev = std::sqrt(var); + skew /= u.size() * dev * var; + kurtosis /= u.size() * var * var; + kurtosis -= 3; + double x_mean = p.a() + p.b() * 0.577215665; + double x_var = sqr(p.b()) * 1.644934067; + double x_skew = 1.139547; + double x_kurtosis = 12./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs((skew - x_skew) / x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); } diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp index 7c26cc8a1c47..7c23630ed1e1 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval.pass.cpp @@ -51,10 +51,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -91,10 +91,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -131,10 +131,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp index 8ed39df819d7..54a89b6b3f40 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.gamma/eval_param.pass.cpp @@ -52,10 +52,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -93,10 +93,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -134,10 +134,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp index f5598978bf0a..a475624a58a8 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp @@ -50,10 +50,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -89,10 +89,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -128,10 +128,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp index c3bbdeb0ed6c..d24fbd9f9cf5 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.poisson/eval_param.pass.cpp @@ -52,10 +52,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -93,10 +93,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -134,10 +134,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp index e414932dc870..cfec8c0d81e1 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval.pass.cpp @@ -51,10 +51,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -95,10 +95,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -139,10 +139,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp index 6da705eb26c7..a19654dbd575 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.pois/rand.dist.pois.weibull/eval_param.pass.cpp @@ -52,10 +52,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -97,10 +97,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -142,10 +142,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp index 5d14b3612b2e..3111912ec29c 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval.pass.cpp @@ -20,6 +20,7 @@ #include <vector> #include <iterator> #include <numeric> +#include <algorithm> // for sort #include <cassert> template <class T> @@ -30,666 +31,710 @@ sqr(T x) return x*x; } -int main() +void +test1() { + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {25, 62.5, 12.5}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {25, 62.5, 12.5}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) + { + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test2() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {0, 62.5, 12.5}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {0, 62.5, 12.5}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) + { + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test3() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {25, 0, 12.5}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {25, 0, 12.5}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) - { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test4() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {25, 62.5, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {25, 62.5, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test5() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {25, 0, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {25, 0, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) + { + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test6() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {0, 25, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {0, 25, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test7() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {0, 0, 1}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {0, 0, 1}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) + { + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test8() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16}; + double p[] = {75, 25}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16}; - double p[] = {75, 25}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) - { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test9() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16}; + double p[] = {0, 25}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16}; - double p[] = {0, 25}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) + { + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test10() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16}; + double p[] = {1, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16}; - double p[] = {1, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) + { + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } +} + +void +test11() +{ + typedef std::piecewise_constant_distribution<> D; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14}; + double p[] = {1}; + const size_t Np = sizeof(p) / sizeof(p[0]); + D d(b, b+Np+1, p); + const int N = 100000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_constant_distribution<> D; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14}; - double p[] = {1}; - const size_t Np = sizeof(p) / sizeof(p[0]); - D d(b, b+Np+1, p); - const int N = 100000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::vector<double> prob(std::begin(p), std::end(p)); - double s = std::accumulate(prob.begin(), prob.end(), 0.0); - for (int i = 0; i < prob.size(); ++i) - prob[i] /= s; - std::sort(u.begin(), u.end()); - for (int i = 0; i < Np; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::vector<double> prob(std::begin(p), std::end(p)); + double s = std::accumulate(prob.begin(), prob.end(), 0.0); + for (int i = 0; i < prob.size(); ++i) + prob[i] /= s; + std::sort(u.begin(), u.end()); + for (int i = 0; i < Np; ++i) + { + typedef std::vector<D::result_type>::iterator I; + I lb = std::lower_bound(u.begin(), u.end(), b[i]); + I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); + const size_t Ni = ub - lb; + if (prob[i] == 0) + assert(Ni == 0); + else { - typedef std::vector<D::result_type>::iterator I; - I lb = std::lower_bound(u.begin(), u.end(), b[i]); - I ub = std::lower_bound(u.begin(), u.end(), b[i+1]); - const size_t Ni = ub - lb; - if (prob[i] == 0) - assert(Ni == 0); - else + assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); + double mean = std::accumulate(lb, ub, 0.0) / Ni; + double var = 0; + double skew = 0; + double kurtosis = 0; + for (I j = lb; j != ub; ++j) { - assert(std::abs((double)Ni/N - prob[i]) / prob[i] < .01); - double mean = std::accumulate(lb, ub, 0.0) / Ni; - double var = 0; - double skew = 0; - double kurtosis = 0; - for (I j = lb; j != ub; ++j) - { - double d = (*j - mean); - double d2 = sqr(d); - var += d2; - skew += d * d2; - kurtosis += d2 * d2; - } - var /= Ni; - double dev = std::sqrt(var); - skew /= Ni * dev * var; - kurtosis /= Ni * var * var; - kurtosis -= 3; - double x_mean = (b[i+1] + b[i]) / 2; - double x_var = sqr(b[i+1] - b[i]) / 12; - double x_skew = 0; - double x_kurtosis = -6./5; - assert(std::abs((mean - x_mean) / x_mean) < 0.01); - assert(std::abs((var - x_var) / x_var) < 0.01); - assert(std::abs(skew - x_skew) < 0.01); - assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); + double dbl = (*j - mean); + double d2 = sqr(dbl); + var += d2; + skew += dbl * d2; + kurtosis += d2 * d2; } + var /= Ni; + double dev = std::sqrt(var); + skew /= Ni * dev * var; + kurtosis /= Ni * var * var; + kurtosis -= 3; + double x_mean = (b[i+1] + b[i]) / 2; + double x_var = sqr(b[i+1] - b[i]) / 12; + double x_skew = 0; + double x_kurtosis = -6./5; + assert(std::abs((mean - x_mean) / x_mean) < 0.01); + assert(std::abs((var - x_var) / x_var) < 0.01); + assert(std::abs(skew - x_skew) < 0.01); + assert(std::abs((kurtosis - x_kurtosis) / x_kurtosis) < 0.01); } } } + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); + test7(); + test8(); + test9(); + test10(); + test11(); +} diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp index 6850115875bb..ffd53c05d37e 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.pconst/eval_param.pass.cpp @@ -17,6 +17,7 @@ // template<class _URNG> result_type operator()(_URNG& g, const param_type& parm); #include <random> +#include <algorithm> #include <vector> #include <iterator> #include <numeric> @@ -72,10 +73,10 @@ int main() double kurtosis = 0; for (I j = lb; j != ub; ++j) { - double d = (*j - mean); - double d2 = sqr(d); + double dbl = (*j - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= Ni; diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp index af75fce512e4..03da9b8960e4 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval.pass.cpp @@ -19,10 +19,12 @@ #include <iostream> #include <random> +#include <algorithm> #include <vector> #include <iterator> #include <numeric> #include <cassert> +#include <limits> template <class T> inline @@ -38,306 +40,333 @@ f(double x, double a, double m, double b, double c) return a + m*(sqr(x) - sqr(b))/2 + c*(x-b); } -int main() +void +test1() { + typedef std::piecewise_linear_distribution<> D; + typedef D::param_type P; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {0, 1, 1, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]) - 1; + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_linear_distribution<> D; - typedef D::param_type P; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {0, 1, 1, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]) - 1; - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::sort(u.begin(), u.end()); - int kp = -1; - double a; - double m; - double bk; - double c; - std::vector<double> areas(Np); - double S = 0; - for (int i = 0; i < areas.size(); ++i) - { - areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; - S += areas[i]; - } - for (int i = 0; i < areas.size(); ++i) - areas[i] /= S; - for (int i = 0; i < Np+1; ++i) - p[i] /= S; - for (int i = 0; i < N; ++i) - { - int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; - if (k != kp) - { - a = 0; - for (int j = 0; j < k; ++j) - a += areas[j]; - m = (p[k+1] - p[k]) / (b[k+1] - b[k]); - bk = b[k]; - c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); - kp = k; - } - assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); - } + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); } + std::sort(u.begin(), u.end()); + int kp = -1; + double a = std::numeric_limits<double>::quiet_NaN(); + double m = std::numeric_limits<double>::quiet_NaN(); + double bk = std::numeric_limits<double>::quiet_NaN(); + double c = std::numeric_limits<double>::quiet_NaN(); + std::vector<double> areas(Np); + double S = 0; + for (int i = 0; i < areas.size(); ++i) { - typedef std::piecewise_linear_distribution<> D; - typedef D::param_type P; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {0, 0, 1, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]) - 1; - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::sort(u.begin(), u.end()); - int kp = -1; - double a; - double m; - double bk; - double c; - std::vector<double> areas(Np); - double S = 0; - for (int i = 0; i < areas.size(); ++i) - { - areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; - S += areas[i]; - } - for (int i = 0; i < areas.size(); ++i) - areas[i] /= S; - for (int i = 0; i < Np+1; ++i) - p[i] /= S; - for (int i = 0; i < N; ++i) - { - int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; - if (k != kp) - { - a = 0; - for (int j = 0; j < k; ++j) - a += areas[j]; - m = (p[k+1] - p[k]) / (b[k+1] - b[k]); - bk = b[k]; - c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); - kp = k; - } - assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); - } + areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; + S += areas[i]; } + for (int i = 0; i < areas.size(); ++i) + areas[i] /= S; + for (int i = 0; i < Np+1; ++i) + p[i] /= S; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_linear_distribution<> D; - typedef D::param_type P; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {1, 0, 0, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]) - 1; - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::sort(u.begin(), u.end()); - int kp = -1; - double a; - double m; - double bk; - double c; - std::vector<double> areas(Np); - double S = 0; - for (int i = 0; i < areas.size(); ++i) - { - areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; - S += areas[i]; - } - for (int i = 0; i < areas.size(); ++i) - areas[i] /= S; - for (int i = 0; i < Np+1; ++i) - p[i] /= S; - for (int i = 0; i < N; ++i) + int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; + if (k != kp) { - int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; - if (k != kp) - { - a = 0; - for (int j = 0; j < k; ++j) - a += areas[j]; - m = (p[k+1] - p[k]) / (b[k+1] - b[k]); - bk = b[k]; - c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); - kp = k; - } - assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); + a = 0; + for (int j = 0; j < k; ++j) + a += areas[j]; + m = (p[k+1] - p[k]) / (b[k+1] - b[k]); + bk = b[k]; + c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); + kp = k; } + assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); } +} + +void +test2() +{ + typedef std::piecewise_linear_distribution<> D; + typedef D::param_type P; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {0, 0, 1, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]) - 1; + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_linear_distribution<> D; - typedef D::param_type P; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16}; - double p[] = {0, 1, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]) - 1; - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::sort(u.begin(), u.end()); - int kp = -1; - double a; - double m; - double bk; - double c; - std::vector<double> areas(Np); - double S = 0; - for (int i = 0; i < areas.size(); ++i) - { - areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; - S += areas[i]; - } - for (int i = 0; i < areas.size(); ++i) - areas[i] /= S; - for (int i = 0; i < Np+1; ++i) - p[i] /= S; - for (int i = 0; i < N; ++i) - { - int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; - if (k != kp) - { - a = 0; - for (int j = 0; j < k; ++j) - a += areas[j]; - m = (p[k+1] - p[k]) / (b[k+1] - b[k]); - bk = b[k]; - c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); - kp = k; - } - assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); - } + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); } + std::sort(u.begin(), u.end()); + int kp = -1; + double a = std::numeric_limits<double>::quiet_NaN(); + double m = std::numeric_limits<double>::quiet_NaN(); + double bk = std::numeric_limits<double>::quiet_NaN(); + double c = std::numeric_limits<double>::quiet_NaN(); + std::vector<double> areas(Np); + double S = 0; + for (int i = 0; i < areas.size(); ++i) { - typedef std::piecewise_linear_distribution<> D; - typedef D::param_type P; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14}; - double p[] = {1, 1}; - const size_t Np = sizeof(p) / sizeof(p[0]) - 1; - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) - { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); - } - std::sort(u.begin(), u.end()); - int kp = -1; - double a; - double m; - double bk; - double c; - std::vector<double> areas(Np); - double S = 0; - for (int i = 0; i < areas.size(); ++i) + areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; + S += areas[i]; + } + for (int i = 0; i < areas.size(); ++i) + areas[i] /= S; + for (int i = 0; i < Np+1; ++i) + p[i] /= S; + for (int i = 0; i < N; ++i) + { + int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; + if (k != kp) { - areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; - S += areas[i]; + a = 0; + for (int j = 0; j < k; ++j) + a += areas[j]; + m = (p[k+1] - p[k]) / (b[k+1] - b[k]); + bk = b[k]; + c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); + kp = k; } - for (int i = 0; i < areas.size(); ++i) - areas[i] /= S; - for (int i = 0; i < Np+1; ++i) - p[i] /= S; - for (int i = 0; i < N; ++i) + assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); + } +} + +void +test3() +{ + typedef std::piecewise_linear_distribution<> D; + typedef D::param_type P; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {1, 0, 0, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]) - 1; + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::sort(u.begin(), u.end()); + int kp = -1; + double a = std::numeric_limits<double>::quiet_NaN(); + double m = std::numeric_limits<double>::quiet_NaN(); + double bk = std::numeric_limits<double>::quiet_NaN(); + double c = std::numeric_limits<double>::quiet_NaN(); + std::vector<double> areas(Np); + double S = 0; + for (int i = 0; i < areas.size(); ++i) + { + areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; + S += areas[i]; + } + for (int i = 0; i < areas.size(); ++i) + areas[i] /= S; + for (int i = 0; i < Np+1; ++i) + p[i] /= S; + for (int i = 0; i < N; ++i) + { + int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; + if (k != kp) { - int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; - if (k != kp) - { - a = 0; - for (int j = 0; j < k; ++j) - a += areas[j]; - m = (p[k+1] - p[k]) / (b[k+1] - b[k]); - bk = b[k]; - c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); - kp = k; - } - assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); + a = 0; + for (int j = 0; j < k; ++j) + a += areas[j]; + m = (p[k+1] - p[k]) / (b[k+1] - b[k]); + bk = b[k]; + c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); + kp = k; } + assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); } +} + +void +test4() +{ + typedef std::piecewise_linear_distribution<> D; + typedef D::param_type P; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16}; + double p[] = {0, 1, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]) - 1; + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) { - typedef std::piecewise_linear_distribution<> D; - typedef D::param_type P; - typedef std::mt19937_64 G; - G g; - double b[] = {10, 14, 16, 17}; - double p[] = {25, 62.5, 12.5, 0}; - const size_t Np = sizeof(p) / sizeof(p[0]) - 1; - D d(b, b+Np+1, p); - const int N = 1000000; - std::vector<D::result_type> u; - for (int i = 0; i < N; ++i) + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::sort(u.begin(), u.end()); + int kp = -1; + double a = std::numeric_limits<double>::quiet_NaN(); + double m = std::numeric_limits<double>::quiet_NaN(); + double bk = std::numeric_limits<double>::quiet_NaN(); + double c = std::numeric_limits<double>::quiet_NaN(); + std::vector<double> areas(Np); + double S = 0; + for (int i = 0; i < areas.size(); ++i) + { + areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; + S += areas[i]; + } + for (int i = 0; i < areas.size(); ++i) + areas[i] /= S; + for (int i = 0; i < Np+1; ++i) + p[i] /= S; + for (int i = 0; i < N; ++i) + { + int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; + if (k != kp) { - D::result_type v = d(g); - assert(d.min() <= v && v < d.max()); - u.push_back(v); + a = 0; + for (int j = 0; j < k; ++j) + a += areas[j]; + assert(k < Np); + m = (p[k+1] - p[k]) / (b[k+1] - b[k]); + bk = b[k]; + c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); + kp = k; } - std::sort(u.begin(), u.end()); - int kp = -1; - double a; - double m; - double bk; - double c; - std::vector<double> areas(Np); - double S = 0; - for (int i = 0; i < areas.size(); ++i) + assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); + } +} + +void +test5() +{ + typedef std::piecewise_linear_distribution<> D; + typedef D::param_type P; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14}; + double p[] = {1, 1}; + const size_t Np = sizeof(p) / sizeof(p[0]) - 1; + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::sort(u.begin(), u.end()); + int kp = -1; + double a = std::numeric_limits<double>::quiet_NaN(); + double m = std::numeric_limits<double>::quiet_NaN(); + double bk = std::numeric_limits<double>::quiet_NaN(); + double c = std::numeric_limits<double>::quiet_NaN(); + std::vector<double> areas(Np); + double S = 0; + for (int i = 0; i < areas.size(); ++i) + { + assert(i < Np); + areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; + S += areas[i]; + } + for (int i = 0; i < areas.size(); ++i) + areas[i] /= S; + for (int i = 0; i < Np+1; ++i) + p[i] /= S; + for (int i = 0; i < N; ++i) + { + int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; + if (k != kp) { - areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; - S += areas[i]; + a = 0; + for (int j = 0; j < k; ++j) + a += areas[j]; + assert(k < Np); + m = (p[k+1] - p[k]) / (b[k+1] - b[k]); + bk = b[k]; + c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); + kp = k; } - for (int i = 0; i < areas.size(); ++i) - areas[i] /= S; - for (int i = 0; i < Np+1; ++i) - p[i] /= S; - for (int i = 0; i < N; ++i) + assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); + } +} + +void +test6() +{ + typedef std::piecewise_linear_distribution<> D; + typedef D::param_type P; + typedef std::mt19937_64 G; + G g; + double b[] = {10, 14, 16, 17}; + double p[] = {25, 62.5, 12.5, 0}; + const size_t Np = sizeof(p) / sizeof(p[0]) - 1; + D d(b, b+Np+1, p); + const int N = 1000000; + std::vector<D::result_type> u; + for (int i = 0; i < N; ++i) + { + D::result_type v = d(g); + assert(d.min() <= v && v < d.max()); + u.push_back(v); + } + std::sort(u.begin(), u.end()); + int kp = -1; + double a = std::numeric_limits<double>::quiet_NaN(); + double m = std::numeric_limits<double>::quiet_NaN(); + double bk = std::numeric_limits<double>::quiet_NaN(); + double c = std::numeric_limits<double>::quiet_NaN(); + std::vector<double> areas(Np); + double S = 0; + for (int i = 0; i < areas.size(); ++i) + { + areas[i] = (p[i]+p[i+1])*(b[i+1]-b[i])/2; + S += areas[i]; + } + for (int i = 0; i < areas.size(); ++i) + areas[i] /= S; + for (int i = 0; i < Np+1; ++i) + p[i] /= S; + for (int i = 0; i < N; ++i) + { + int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; + if (k != kp) { - int k = std::lower_bound(b, b+Np+1, u[i]) - b - 1; - if (k != kp) - { - a = 0; - for (int j = 0; j < k; ++j) - a += areas[j]; - m = (p[k+1] - p[k]) / (b[k+1] - b[k]); - bk = b[k]; - c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); - kp = k; - } - assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); + a = 0; + for (int j = 0; j < k; ++j) + a += areas[j]; + m = (p[k+1] - p[k]) / (b[k+1] - b[k]); + bk = b[k]; + c = (b[k+1]*p[k] - b[k]*p[k+1]) / (b[k+1] - b[k]); + kp = k; } + assert(std::abs(f(u[i], a, m, bk, c) - double(i)/N) < .001); } } + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); +} diff --git a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp index fe704228e788..8054a69fed87 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.samp/rand.dist.samp.plinear/eval_param.pass.cpp @@ -20,7 +20,9 @@ #include <vector> #include <iterator> #include <numeric> +#include <algorithm> // for sort #include <cassert> +#include <limits> template <class T> inline @@ -58,10 +60,10 @@ int main() } std::sort(u.begin(), u.end()); int kp = -1; - double a; - double m; - double bk; - double c; + double a = std::numeric_limits<double>::quiet_NaN(); + double m = std::numeric_limits<double>::quiet_NaN(); + double bk = std::numeric_limits<double>::quiet_NaN(); + double c = std::numeric_limits<double>::quiet_NaN(); std::vector<double> areas(Np); double S = 0; for (int i = 0; i < areas.size(); ++i) diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp index 66693a8da55b..2abc9d4c6dd5 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp @@ -51,10 +51,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -92,10 +92,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -133,10 +133,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -174,10 +174,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -215,10 +215,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -256,10 +256,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -297,10 +297,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -338,10 +338,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -379,10 +379,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -431,10 +431,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp index d83d48cac1e3..849f25107fa8 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.int/eval_param.pass.cpp @@ -51,10 +51,10 @@ int main() double kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - double d = (u[i] - mean); - double d2 = sqr(d); + double dbl = (u[i] - mean); + double d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp index 2663b2683bb4..e000363f3215 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval.pass.cpp @@ -51,10 +51,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -91,10 +91,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -131,10 +131,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -171,10 +171,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -211,10 +211,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -251,10 +251,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -291,10 +291,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -331,10 +331,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -371,10 +371,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -411,10 +411,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); @@ -451,10 +451,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp index b5803f401465..d351f0caed71 100644 --- a/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp +++ b/test/std/numerics/rand/rand.dis/rand.dist.uni/rand.dist.uni.real/eval_param.pass.cpp @@ -51,10 +51,10 @@ int main() D::result_type kurtosis = 0; for (int i = 0; i < u.size(); ++i) { - D::result_type d = (u[i] - mean); - D::result_type d2 = sqr(d); + D::result_type dbl = (u[i] - mean); + D::result_type d2 = sqr(dbl); var += d2; - skew += d * d2; + skew += dbl * d2; kurtosis += d2 * d2; } var /= u.size(); diff --git a/test/std/numerics/rand/rand.synopsis/version.pass.cpp b/test/std/numerics/rand/rand.synopsis/version.pass.cpp deleted file mode 100644 index eae6c493e919..000000000000 --- a/test/std/numerics/rand/rand.synopsis/version.pass.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <random> - -#include <random> - -#ifndef _LIBCPP_VERSION -#error _LIBCPP_VERSION not defined -#endif - -int main() -{ -} |