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 }