| // Copyright ©2018 The Gonum Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package distuv |
| |
| import ( |
| "math" |
| "sort" |
| "testing" |
| |
| "gonum.org/v1/gonum/floats" |
| |
| "golang.org/x/exp/rand" |
| ) |
| |
| func TestGumbelRightProbCDF(t *testing.T) { |
| for _, test := range []struct { |
| x, mu, beta, wantProb, wantCDF float64 |
| }{ |
| // Values calculated with scipy.stats.gumbel_r . |
| {-2, 0, 1, 0.0045662814201279153, 0.00061797898933109343}, |
| {0.01, 0, 1, 0.36786110881643569, 0.37155817442380817}, |
| {6, 0, 1, 0.0024726155730149077, 0.99752431739275249}, |
| |
| // Values calculated with Wolfram Alpha's ExtremeValueDistribution. |
| {0.1, 2, 5, 0.06776411497087929, 0.231706315790068}, |
| {0.1, -2, 5, 0.06811997894673336, 0.5183799456323944}, |
| {-2.1, -2, 0.1, 1.793740787340169, 0.06598803584531238}, |
| } { |
| g := GumbelRight{Mu: test.mu, Beta: test.beta} |
| pdf := g.Prob(test.x) |
| if !floats.EqualWithinAbsOrRel(pdf, test.wantProb, 1e-12, 1e-12) { |
| t.Errorf("Prob mismatch, x = %v, mu = %v, beta = %v. Got %v, want %v", test.x, test.mu, test.beta, pdf, test.wantProb) |
| } |
| cdf := g.CDF(test.x) |
| if !floats.EqualWithinAbsOrRel(cdf, test.wantCDF, 1e-12, 1e-12) { |
| t.Errorf("CDF mismatch, x = %v, mu = %v, beta = %v. Got %v, want %v", test.x, test.mu, test.beta, cdf, test.wantCDF) |
| } |
| } |
| } |
| |
| func TestGumbelRight(t *testing.T) { |
| src := rand.New(rand.NewSource(1)) |
| for i, b := range []GumbelRight{ |
| {0, 1, src}, |
| {-5, 6, src}, |
| {3, 0.1, src}, |
| } { |
| testGumbelRight(t, b, i) |
| } |
| } |
| |
| func testGumbelRight(t *testing.T, g GumbelRight, i int) { |
| const ( |
| tol = 1e-2 |
| n = 5e5 |
| bins = 50 |
| ) |
| x := make([]float64, n) |
| generateSamples(x, g) |
| sort.Float64s(x) |
| |
| min := math.Inf(-1) |
| testRandLogProbContinuous(t, i, min, x, g, tol, bins) |
| checkProbContinuous(t, i, x, g, 1e-3) |
| checkMean(t, i, x, g, tol) |
| checkVarAndStd(t, i, x, g, tol) |
| checkExKurtosis(t, i, x, g, 1e-1) |
| checkSkewness(t, i, x, g, 5e-2) |
| checkQuantileCDFSurvival(t, i, x, g, 5e-3) |
| } |