blob: fb47768dcf5e4ab42c87c25d3fdd32c420189c8e [file] [log] [blame]
 // Copyright ©2015 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" "golang.org/x/exp/rand" ) func TestLognormal(t *testing.T) { t.Parallel() src := rand.New(rand.NewSource(1)) for i, dist := range []LogNormal{ {Mu: 0.1, Sigma: 0.3, Src: src}, {Mu: 0.01, Sigma: 0.01, Src: src}, {Mu: 2, Sigma: 0.01, Src: src}, } { const ( tol = 1e-2 n = 1e5 ) x := make([]float64, n) generateSamples(x, dist) sort.Float64s(x) checkMean(t, i, x, dist, tol) checkVarAndStd(t, i, x, dist, tol) checkEntropy(t, i, x, dist, tol) checkExKurtosis(t, i, x, dist, 2e-1) checkSkewness(t, i, x, dist, 5e-2) checkMedian(t, i, x, dist, tol) checkQuantileCDFSurvival(t, i, x, dist, tol) checkProbContinuous(t, i, x, 0, math.Inf(1), dist, 1e-10) checkProbQuantContinuous(t, i, x, dist, tol) checkMode(t, i, x, dist, 1e-2, 1e-2) logProb := dist.LogProb(-0.0001) if !math.IsInf(logProb, -1) { t.Errorf("Expected LogProb == -Inf for x < 0, got %v", logProb) } if dist.NumParameters() != 2 { t.Errorf("Mismatch in NumParameters: got %v, want 2", dist.NumParameters()) } } } // See https://github.com/gonum/gonum/issues/577 for details. func TestLognormalIssue577(t *testing.T) { t.Parallel() x := 1.0e-16 max := 1.0e-295 cdf := LogNormal{Mu: 0, Sigma: 1}.CDF(x) if cdf <= 0 { t.Errorf("LogNormal{0,1}.CDF(%e) should be positive. got: %e", x, cdf) } if cdf > max { t.Errorf("LogNormal{0,1}.CDF(%e) is greater than %e. got: %e", x, max, cdf) } }