predictor for interest is k
parent
23614057a3
commit
0c50ee5a89
|
|
@ -20,6 +20,8 @@ func NewInterestPredictor(namePattern string, currencyPattern string, apy float6
|
|||
result[k] = maps.Clone(v)
|
||||
}
|
||||
|
||||
monthsPassed := float64(delta) / float64(time.Hour*24.0*365.0/12.0)
|
||||
scalar := math.Pow(1.0+apy/12.0, monthsPassed)
|
||||
for name := range result {
|
||||
if !nameMatcher.MatchString(name) {
|
||||
continue
|
||||
|
|
@ -28,8 +30,7 @@ func NewInterestPredictor(namePattern string, currencyPattern string, apy float6
|
|||
if !currencyMatcher.MatchString(string(currency)) {
|
||||
continue
|
||||
}
|
||||
percentOfYearPassed := float64(delta) / float64(time.Hour*365)
|
||||
result[name][currency] *= math.Pow(1.0+apy/12.0, percentOfYearPassed)
|
||||
result[name][currency] *= scalar
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import (
|
|||
)
|
||||
|
||||
func TestNewInterestPredictor(t *testing.T) {
|
||||
name := "x"
|
||||
acc := "x"
|
||||
curr := ledger.USD
|
||||
cases := map[string]struct {
|
||||
apy float64
|
||||
|
|
@ -18,22 +18,22 @@ func TestNewInterestPredictor(t *testing.T) {
|
|||
}{
|
||||
"zero": {
|
||||
apy: 0,
|
||||
given: ledger.Balances{name: ledger.Balance{curr: 100}},
|
||||
given: ledger.Balances{acc: ledger.Balance{curr: 100}},
|
||||
delta: time.Hour * 24 * 365,
|
||||
want: ledger.Balances{name: ledger.Balance{curr: 100}},
|
||||
want: ledger.Balances{acc: ledger.Balance{curr: 100}},
|
||||
},
|
||||
"100%": {
|
||||
apy: 1,
|
||||
given: ledger.Balances{name: ledger.Balance{curr: 100}},
|
||||
"50%": {
|
||||
apy: .5,
|
||||
given: ledger.Balances{acc: ledger.Balance{curr: 100}},
|
||||
delta: time.Hour * 24 * 365,
|
||||
want: ledger.Balances{name: ledger.Balance{curr: 200}},
|
||||
want: ledger.Balances{acc: ledger.Balance{curr: 163.21}},
|
||||
},
|
||||
}
|
||||
|
||||
for name, d := range cases {
|
||||
c := d
|
||||
t.Run(name, func(t *testing.T) {
|
||||
predictor := NewInterestPredictor(name, string(curr), c.apy)
|
||||
predictor := NewInterestPredictor(acc, string(curr), c.apy)
|
||||
got := predictor(c.given, c.delta)
|
||||
if got.Debug() != c.want.Debug() {
|
||||
t.Errorf("want\n\t%+v, got\n\t%+v", c.want, got)
|
||||
|
|
|
|||
Loading…
Reference in New Issue