diff --git a/ledger/predict.go b/ledger/predict.go index 38c1bc2..1ad785e 100644 --- a/ledger/predict.go +++ b/ledger/predict.go @@ -48,6 +48,9 @@ func registerWithContributionPredictionForNameForCurrency(reg Register, window t if err != nil { return err } + if time.Since(t) > time.Hour*24*180 { + continue + } if v, ok := reg[d][name][currency]; ok { contributions = append(contributions, contribution{t: t, v: v}) } @@ -55,7 +58,7 @@ func registerWithContributionPredictionForNameForCurrency(reg Register, window t sort.Slice(contributions, func(i, j int) bool { return contributions[i].t.Before(contributions[j].t) }) - if len(contributions) < 2 { + if len(contributions) < 3 { return nil } @@ -106,13 +109,11 @@ func registerWithContributionPredictionForNameForCurrency(reg Register, window t }() latest := func() float64 { - max := 0.0 - for d := range reg { - if other := reg[d][name][currency]; other > max { - max = other - } + last := 0.0 + for _, d := range reg.Dates() { + last = reg[d][name][currency] } - return max + return last }() for _, predictionTime := range predictionTimes(window) { k := predictionTime.Format("2006-01") diff --git a/ledger/predict_test.go b/ledger/predict_test.go index 5616cea..bdb5e3d 100644 --- a/ledger/predict_test.go +++ b/ledger/predict_test.go @@ -75,16 +75,21 @@ func TestBPIPrediction(t *testing.T) { } func newTestRegister() map[string]Balances { + s := func(t time.Time) string { + return t.Format("2006-01") + } + day := time.Hour * 24 + lastYear := time.Now().Add(-1 * day * time.Duration(time.Now().YearDay())) return map[string]Balances{ - "2001-01": Balances{"X": Balance{USD: 1}}, - "2001-02": Balances{"X": Balance{USD: 2}}, - "2001-03": Balances{"X": Balance{USD: 3}}, - "2001-04": Balances{"X": Balance{USD: 4}}, - "2001-05": Balances{"X": Balance{USD: 5}}, - "2001-06": Balances{"X": Balance{USD: 6}}, - "2001-07": Balances{"X": Balance{USD: 8}}, - "2001-08": Balances{"X": Balance{USD: 10}}, - "2001-09": Balances{"X": Balance{USD: 12}}, - "2001-10": Balances{"X": Balance{USD: 16}}, + s(lastYear.Add(day * 0)): Balances{"X": Balance{USD: 1}}, + s(lastYear.Add(day * 32)): Balances{"X": Balance{USD: 2}}, + s(lastYear.Add(day * 64)): Balances{"X": Balance{USD: 3}}, + s(lastYear.Add(day * 94)): Balances{"X": Balance{USD: 4}}, + s(lastYear.Add(day * 124)): Balances{"X": Balance{USD: 5}}, + s(lastYear.Add(day * 154)): Balances{"X": Balance{USD: 6}}, + s(lastYear.Add(day * 184)): Balances{"X": Balance{USD: 8}}, + s(lastYear.Add(day * 214)): Balances{"X": Balance{USD: 10}}, + s(lastYear.Add(day * 244)): Balances{"X": Balance{USD: 12}}, + s(lastYear.Add(day * 274)): Balances{"X": Balance{USD: 16}}, } }