github.com/diadata-org/diadata@v1.4.593/internal/pkg/rateDerivatives/rfr_test.go (about)

     1  package ratederivatives
     2  
     3  import (
     4  	"math"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func TestRateFactor(t *testing.T) {
    10  	date1, _ := time.Parse("2006-01-02", "2020-04-01")
    11  	date2, _ := time.Parse("2006-01-02", "2020-04-02")
    12  	date3, _ := time.Parse("2006-01-02", "2020-04-03")
    13  	date4, _ := time.Parse("2006-01-02", "2020-04-06")
    14  	tables := []struct {
    15  		date       time.Time
    16  		holidays   []time.Time
    17  		ratefactor int
    18  		err        error
    19  	}{
    20  		{date1, []time.Time{}, 1, nil},
    21  		{date1, []time.Time{date2}, 2, nil},
    22  		{date1, []time.Time{date2, date3}, 5, nil},
    23  		{date1, []time.Time{date2, date4}, 2, nil},
    24  	}
    25  	for _, table := range tables {
    26  		value, err := RateFactor(table.date, table.holidays)
    27  		if value != table.ratefactor {
    28  			t.Errorf("Rate factor is %v but should be %v.", value, table.ratefactor)
    29  		}
    30  		if err != nil {
    31  			t.Errorf("Error should be %v but is %v", table.err, err)
    32  		}
    33  	}
    34  }
    35  
    36  func TestCompoundedRate(t *testing.T) {
    37  	tol := 10e-8
    38  	rates1 := []float64{0, 0, 0}
    39  	rates2 := []float64{1.1, 1.2, 1.5}
    40  	date1, _ := time.Parse("2006-01-02 15:04:05", "2020-04-01 14:22:55")
    41  	date2, _ := time.Parse("2006-01-02", "2020-04-02")
    42  	date3, _ := time.Parse("2006-01-02", "2020-04-03")
    43  	date4, _ := time.Parse("2006-01-02", "2020-04-06")
    44  	daysPerYear := 365
    45  
    46  	tables := []struct {
    47  		rates       []float64
    48  		dateInit    time.Time
    49  		dateFinal   time.Time
    50  		holidays    []time.Time
    51  		daysPerYear int
    52  		rounding    int
    53  		cumRate     float64
    54  		err         error
    55  	}{
    56  		{rates1[:2], date1, date3, []time.Time{}, daysPerYear, 0, 0, nil},
    57  		{rates2[:2], date1, date3, []time.Time{}, daysPerYear, 0, 1.151808219, nil},
    58  		{rates2, date1, date4, []time.Time{}, daysPerYear, 0, 1.366403438, nil},
    59  		{rates2[:2], date1, date4, []time.Time{date2}, daysPerYear, 0, 1.164339726, nil},
    60  		{rates2[0:1], date1, date2, []time.Time{}, daysPerYear, 0, rates2[0], nil},
    61  	}
    62  	for _, table := range tables {
    63  		value, err := CompoundedRate(table.rates, table.dateInit, table.dateFinal, table.holidays, table.daysPerYear, table.rounding)
    64  		if math.Abs(value-table.cumRate) > tol {
    65  			t.Errorf("Rate factor is %v but should be %v.", value, table.cumRate)
    66  		}
    67  		if err != nil {
    68  			t.Errorf("Error should be %v but is %v", table.err, err)
    69  		}
    70  	}
    71  }