1
18
19 package adaptive
20
21 import (
22 "testing"
23 "time"
24 )
25
26 func TestLookback(t *testing.T) {
27 makeTicks := func(offsets []int64) []time.Time {
28 var ticks []time.Time
29 now := time.Now()
30 for _, offset := range offsets {
31 ticks = append(ticks, now.Add(time.Duration(offset)))
32 }
33 return ticks
34 }
35
36
37 testcases := []struct {
38 desc string
39 bins int64
40 ticks []time.Time
41 values []int64
42 want []int64
43 }{
44 {
45 "Accumulate",
46 3,
47 makeTicks([]int64{0, 1, 2}),
48 []int64{1, 2, 3},
49 []int64{1, 3, 6},
50 },
51 {
52 "LightTimeTravel",
53 3,
54 makeTicks([]int64{1, 0, 2}),
55 []int64{1, 2, 3},
56 []int64{1, 3, 6},
57 },
58 {
59 "HeavyTimeTravel",
60 3,
61 makeTicks([]int64{8, 0, 9}),
62 []int64{1, 2, 3},
63 []int64{1, 1, 4},
64 },
65 {
66 "Rollover",
67 1,
68 makeTicks([]int64{0, 1, 2}),
69 []int64{1, 2, 3},
70 []int64{1, 2, 3},
71 },
72 }
73
74 for _, test := range testcases {
75 t.Run(test.desc, func(t *testing.T) {
76 lb := newLookback(test.bins, time.Duration(test.bins))
77 for i, tick := range test.ticks {
78 lb.add(tick, test.values[i])
79 if got := lb.sum(tick); got != test.want[i] {
80 t.Errorf("sum for index %d got %d, want %d", i, got, test.want[i])
81 }
82 }
83 })
84 }
85 }
86
View as plain text