gonum.org/v1/gonum@v0.14.0/mathext/digamma_test.go (about)

     1  // Copyright ©2016 The Gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package mathext
     6  
     7  import (
     8  	"math"
     9  	"testing"
    10  
    11  	"gonum.org/v1/gonum/floats/scalar"
    12  )
    13  
    14  var result float64
    15  
    16  func TestDigamma(t *testing.T) {
    17  	t.Parallel()
    18  	const tol = 1e-10
    19  
    20  	for i, test := range []struct {
    21  		x, want float64
    22  	}{
    23  		// Results computed using WolframAlpha.
    24  		{0.0, math.Inf(-1)},
    25  		{math.Copysign(0.0, -1.0), math.Inf(1)},
    26  		{math.Inf(1), math.Inf(1)},
    27  		{math.Inf(-1), math.NaN()},
    28  		{math.NaN(), math.NaN()},
    29  		{-1.0, math.NaN()},
    30  		{-100.5, 4.615124601338064117341315601525112558522917517910505881343},
    31  		{0.5, -1.96351002602142347944097633299875556719315960466043},
    32  		{10, 2.251752589066721107647456163885851537211808918028330369448},
    33  		{math.Pow10(20), 46.05170185988091368035482909368728415202202143924212618733},
    34  		{-1.111111111e9, math.NaN()},
    35  		{1.46, -0.001580561987083417676105544023567034348339520110000},
    36  	} {
    37  
    38  		got := Digamma(test.x)
    39  		if !(math.IsNaN(got) && math.IsNaN(test.want)) && !scalar.EqualWithinAbsOrRel(got, test.want, tol, tol) {
    40  			t.Errorf("test %d Digamma(%g) failed: got %g want %g", i, test.x, got, test.want)
    41  		}
    42  	}
    43  }
    44  
    45  func BenchmarkDigamma(b *testing.B) {
    46  	var r float64
    47  	for i := 0; i < b.N; i++ {
    48  		r = Digamma(-1.111111111e9)
    49  	}
    50  	result = r
    51  }