...
1 package limiter
2
3 import (
4 "testing"
5 "time"
6 )
7
8 type MrT testing.T
9
10 func pity(fool *testing.T) *MrT {
11 return (*MrT)(fool)
12 }
13
14 func (t *MrT) expect(expected, actual time.Duration) {
15 if expected != actual {
16 t.Errorf("expected %s, got %s", expected, actual)
17 }
18 }
19
20 func TestIntervalLimiter(fool *testing.T) {
21 t := pity(fool)
22 l := NewInterval(1 * time.Second)
23 start := time.Now()
24 t.expect(0, l.Limit(start))
25 t.expect(999*time.Millisecond, l.Limit(start.Add(1*time.Millisecond)))
26 t.expect(-1, l.Limit(start.Add(500*time.Millisecond)))
27 t.expect(-1, l.Limit(start.Add(999*time.Millisecond)))
28 t.expect(0, l.Limit(start.Add(1000*time.Millisecond)))
29 t.expect(999*time.Millisecond, l.Limit(start.Add(1001*time.Millisecond)))
30 t.expect(-1, l.Limit(start.Add(1500*time.Millisecond)))
31 t.expect(-1, l.Limit(start.Add(1999*time.Millisecond)))
32 t.expect(0, l.Limit(start.Add(2000*time.Millisecond)))
33 t.expect(500*time.Millisecond, l.Limit(start.Add(2500*time.Millisecond)))
34 t.expect(-1, l.Limit(start.Add(2999*time.Millisecond)))
35 t.expect(0, l.Limit(start.Add(3000*time.Millisecond)))
36 }
37
View as plain text