github.com/pavlo67/common@v0.5.3/common/mathlib/interpolation_test.go (about)

     1  package mathlib
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestInterpolateByTable(t *testing.T) {
    10  	table := [][2]float64{{1, 10}, {-1, 2}, {5, 20}}
    11  
    12  	x, err := InterpolateByTable(-1, table)
    13  	require.NoError(t, err)
    14  	require.Equal(t, 2., x)
    15  
    16  	x, err = InterpolateByTable(-2, table)
    17  	require.Error(t, err)
    18  	require.Equal(t, 0., x)
    19  
    20  	x, err = InterpolateByTable(0, table)
    21  	require.NoError(t, err)
    22  	require.Equal(t, 6., x)
    23  
    24  	x, err = InterpolateByTable(2, table)
    25  	require.NoError(t, err)
    26  	require.Equal(t, 12.5, x)
    27  
    28  	x, err = InterpolateByTable(10, table)
    29  	require.Error(t, err)
    30  	require.Equal(t, 0., x)
    31  
    32  }
    33  
    34  func TestInterpolateByTwoPoints(t *testing.T) {
    35  	tp1 := [2][2]float64{{1, 10}, {-1, 2}}
    36  
    37  	x, err := InterpolateByTwoPoints(-1, tp1)
    38  	require.NoError(t, err)
    39  	require.Equal(t, 2., x)
    40  
    41  	x, err = InterpolateByTwoPoints(1, tp1)
    42  	require.NoError(t, err)
    43  	require.Equal(t, 10., x)
    44  
    45  	x, err = InterpolateByTwoPoints(0, tp1)
    46  	require.NoError(t, err)
    47  	require.Equal(t, 6., x)
    48  
    49  	x, err = InterpolateByTwoPoints(2, tp1)
    50  	require.Error(t, err)
    51  
    52  	tp2 := [2][2]float64{{-1, 2}, {5, 20}}
    53  
    54  	x, err = InterpolateByTwoPoints(-1, tp2)
    55  	require.NoError(t, err)
    56  	require.Equal(t, 2., x)
    57  
    58  	x, err = InterpolateByTwoPoints(5, tp2)
    59  	require.NoError(t, err)
    60  	require.Equal(t, 20., x)
    61  
    62  	x, err = InterpolateByTwoPoints(0, tp2)
    63  	require.NoError(t, err)
    64  	require.Equal(t, 5., x)
    65  
    66  	x, err = InterpolateByTwoPoints(-2, tp2)
    67  	require.Error(t, err)
    68  
    69  	x, err = InterpolateByTwoPoints(20, tp2)
    70  	require.Error(t, err)
    71  
    72  	tp3 := [2][2]float64{{5, 20}, {5, 21}}
    73  
    74  	x, err = InterpolateByTwoPoints(-10, tp3)
    75  	require.Error(t, err)
    76  
    77  	x, err = InterpolateByTwoPoints(-5, tp3)
    78  	require.Error(t, err)
    79  
    80  	x, err = InterpolateByTwoPoints(6, tp3)
    81  	require.Error(t, err)
    82  
    83  }