1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // REQUIRES: long_tests
13 // template<class RealType = double>
14 // class extreme_value_distribution
16 // template<class _URNG> result_type operator()(_URNG& g);
24 #include "test_macros.h"
37 typedef std::extreme_value_distribution
<> D
;
38 typedef std::mt19937 G
;
41 const int N
= 1000000;
42 std::vector
<D::result_type
> u
;
43 for (int i
= 0; i
< N
; ++i
)
45 D::result_type v
= d(g
);
48 double mean
= std::accumulate(u
.begin(), u
.end(), 0.0) / u
.size();
52 for (unsigned i
= 0; i
< u
.size(); ++i
)
54 double dbl
= (u
[i
] - mean
);
61 double dev
= std::sqrt(var
);
62 skew
/= u
.size() * dev
* var
;
63 kurtosis
/= u
.size() * var
* var
;
65 double x_mean
= d
.a() + d
.b() * 0.577215665;
66 double x_var
= sqr(d
.b()) * 1.644934067;
67 double x_skew
= 1.139547;
68 double x_kurtosis
= 12./5;
69 assert(std::abs((mean
- x_mean
) / x_mean
) < 0.01);
70 assert(std::abs((var
- x_var
) / x_var
) < 0.01);
71 assert(std::abs((skew
- x_skew
) / x_skew
) < 0.01);
72 assert(std::abs((kurtosis
- x_kurtosis
) / x_kurtosis
) < 0.03);
78 typedef std::extreme_value_distribution
<> D
;
79 typedef std::mt19937 G
;
82 const int N
= 1000000;
83 std::vector
<D::result_type
> u
;
84 for (int i
= 0; i
< N
; ++i
)
86 D::result_type v
= d(g
);
89 double mean
= std::accumulate(u
.begin(), u
.end(), 0.0) / u
.size();
93 for (unsigned i
= 0; i
< u
.size(); ++i
)
95 double dbl
= (u
[i
] - mean
);
102 double dev
= std::sqrt(var
);
103 skew
/= u
.size() * dev
* var
;
104 kurtosis
/= u
.size() * var
* var
;
106 double x_mean
= d
.a() + d
.b() * 0.577215665;
107 double x_var
= sqr(d
.b()) * 1.644934067;
108 double x_skew
= 1.139547;
109 double x_kurtosis
= 12./5;
110 assert(std::abs((mean
- x_mean
) / x_mean
) < 0.01);
111 assert(std::abs((var
- x_var
) / x_var
) < 0.01);
112 assert(std::abs((skew
- x_skew
) / x_skew
) < 0.01);
113 assert(std::abs((kurtosis
- x_kurtosis
) / x_kurtosis
) < 0.03);
119 typedef std::extreme_value_distribution
<> D
;
120 typedef std::mt19937 G
;
123 const int N
= 1000000;
124 std::vector
<D::result_type
> u
;
125 for (int i
= 0; i
< N
; ++i
)
127 D::result_type v
= d(g
);
130 double mean
= std::accumulate(u
.begin(), u
.end(), 0.0) / u
.size();
134 for (unsigned i
= 0; i
< u
.size(); ++i
)
136 double dbl
= (u
[i
] - mean
);
137 double d2
= sqr(dbl
);
143 double dev
= std::sqrt(var
);
144 skew
/= u
.size() * dev
* var
;
145 kurtosis
/= u
.size() * var
* var
;
147 double x_mean
= d
.a() + d
.b() * 0.577215665;
148 double x_var
= sqr(d
.b()) * 1.644934067;
149 double x_skew
= 1.139547;
150 double x_kurtosis
= 12./5;
151 assert(std::abs((mean
- x_mean
) / x_mean
) < 0.01);
152 assert(std::abs((var
- x_var
) / x_var
) < 0.01);
153 assert(std::abs((skew
- x_skew
) / x_skew
) < 0.01);
154 assert(std::abs((kurtosis
- x_kurtosis
) / x_kurtosis
) < 0.03);
160 typedef std::extreme_value_distribution
<> D
;
161 typedef std::mt19937 G
;
164 const int N
= 1000000;
165 std::vector
<D::result_type
> u
;
166 for (int i
= 0; i
< N
; ++i
)
168 D::result_type v
= d(g
);
171 double mean
= std::accumulate(u
.begin(), u
.end(), 0.0) / u
.size();
175 for (unsigned i
= 0; i
< u
.size(); ++i
)
177 double dbl
= (u
[i
] - mean
);
178 double d2
= sqr(dbl
);
184 double dev
= std::sqrt(var
);
185 skew
/= u
.size() * dev
* var
;
186 kurtosis
/= u
.size() * var
* var
;
188 double x_mean
= d
.a() + d
.b() * 0.577215665;
189 double x_var
= sqr(d
.b()) * 1.644934067;
190 double x_skew
= 1.139547;
191 double x_kurtosis
= 12./5;
192 assert(std::abs((mean
- x_mean
) / x_mean
) < 0.01);
193 assert(std::abs((var
- x_var
) / x_var
) < 0.01);
194 assert(std::abs((skew
- x_skew
) / x_skew
) < 0.01);
195 assert(std::abs((kurtosis
- x_kurtosis
) / x_kurtosis
) < 0.03);
198 int main(int, char**)