package ana import ( "testing" "time" "gogs.inhome.blapointe.com/ana-ledger/ledger" ) func TestRegisterPrediction(t *testing.T) { t.Run("contribution", func(t *testing.T) { input := newTestRegister() got, err := RegisterWithContributionPrediction(input, time.Hour*24*365) if err != nil { t.Fatal(err) } t.Logf("%+v", got) if len(got) != len(input)+13 { t.Error(len(got)) } for _, date := range got.Dates() { for _, name := range got.Names() { t.Logf("%s | %s = %+v", date, name, got[date][name]) if ti, _ := dateToTime(date); ti.After(time.Now().Add(time.Hour*24*60)) && got[date][name]["XYZ"] == 0 { t.Error("predicting future contributions lost unmodified currency", got[date][name]) } } } }) } func newTestRegister() map[string]ledger.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]ledger.Balances{ s(lastYear.Add(day * 0)): ledger.Balances{"X": ledger.Balance{ledger.USD: 1}}, s(lastYear.Add(day * 32)): ledger.Balances{"X": ledger.Balance{ledger.USD: 2}}, s(lastYear.Add(day * 64)): ledger.Balances{"X": ledger.Balance{ledger.USD: 3}}, s(lastYear.Add(day * 94)): ledger.Balances{"X": ledger.Balance{ledger.USD: 4}}, s(lastYear.Add(day * 124)): ledger.Balances{"X": ledger.Balance{ledger.USD: 5}}, s(lastYear.Add(day * 154)): ledger.Balances{"X": ledger.Balance{ledger.USD: 6}}, s(lastYear.Add(day * 184)): ledger.Balances{"X": ledger.Balance{ledger.USD: 8}}, s(lastYear.Add(day * 214)): ledger.Balances{"X": ledger.Balance{ledger.USD: 10}}, s(lastYear.Add(day * 244)): ledger.Balances{"X": ledger.Balance{ledger.USD: 12}}, s(lastYear.Add(day * 274)): ledger.Balances{"X": ledger.Balance{ledger.USD: 16, "XYZ": 1}}, } }