impl ledger.Register.Between

main
bel 2023-10-26 19:16:40 -06:00
parent 0c50ee5a89
commit d93a3560da
3 changed files with 54 additions and 0 deletions

View File

@ -36,3 +36,13 @@ func NewInterestPredictor(namePattern string, currencyPattern string, apy float6
return result
}
}
func NewContributionPredictor(reg ledger.Register) Predictor {
monthlyRate := getMonthlyContributionRate(reg)
return func(given ledger.Balances, delta time.Duration) ledger.Balances {
panic(nil)
}
}
func getMonthlyContributionRate(reg ledger.Register) map[string]ledger.Balance {
}

View File

@ -2,6 +2,7 @@ package ledger
import (
"fmt"
"maps"
"slices"
"time"
)
@ -50,6 +51,18 @@ func (register Register) Dates() []string {
return result
}
func (register Register) Between(start, end time.Time) Register {
result := make(Register)
for k := range register {
t := mustDateToTime(k)
if t.Before(start) || t.After(end) {
continue
}
result[k] = maps.Clone(register[k])
}
return result
}
func (register Register) Times() []time.Time {
dates := register.Dates()
result := make([]time.Time, len(dates))

31
ledger/register_test.go Normal file
View File

@ -0,0 +1,31 @@
package ledger
import (
"testing"
"time"
)
func TestRegisterBetween(t *testing.T) {
reg := make(Register)
reg["2001-01"] = make(Balances)
reg["2002-01"] = make(Balances)
reg["2003-01"] = make(Balances)
reg["2004-01"] = make(Balances)
reg["2005-01"] = make(Balances)
start, _ := time.ParseInLocation("2006-01", "2002-01", time.Local)
end, _ := time.ParseInLocation("2006-01", "2004-01", time.Local)
got := reg.Between(start, end)
if len(got) != 3 {
t.Error(len(got))
}
if _, ok := got["2002-01"]; !ok {
t.Error("2002-01")
}
if _, ok := got["2003-01"]; !ok {
t.Error("2003-01")
}
if _, ok := got["2004-01"]; !ok {
t.Error("2004-01")
}
}