1
2
3
4
5
6
7 package quic
8
9 import (
10 "math"
11 "testing"
12 "time"
13 )
14
15 func TestAckDelayFromDuration(t *testing.T) {
16 for _, test := range []struct {
17 d time.Duration
18 ackDelayExponent uint8
19 want unscaledAckDelay
20 }{{
21 d: 8 * time.Microsecond,
22 ackDelayExponent: 3,
23 want: 1,
24 }, {
25 d: 1 * time.Nanosecond,
26 ackDelayExponent: 3,
27 want: 0,
28 }, {
29 d: 3 * (1 << 20) * time.Microsecond,
30 ackDelayExponent: 20,
31 want: 3,
32 }} {
33 got := unscaledAckDelayFromDuration(test.d, test.ackDelayExponent)
34 if got != test.want {
35 t.Errorf("unscaledAckDelayFromDuration(%v, %v) = %v, want %v",
36 test.d, test.ackDelayExponent, got, test.want)
37 }
38 }
39 }
40
41 func TestAckDelayToDuration(t *testing.T) {
42 for _, test := range []struct {
43 d unscaledAckDelay
44 ackDelayExponent uint8
45 want time.Duration
46 }{{
47 d: 1,
48 ackDelayExponent: 3,
49 want: 8 * time.Microsecond,
50 }, {
51 d: 0,
52 ackDelayExponent: 3,
53 want: 0,
54 }, {
55 d: 3,
56 ackDelayExponent: 20,
57 want: 3 * (1 << 20) * time.Microsecond,
58 }, {
59 d: math.MaxInt64 / 1000,
60 ackDelayExponent: 0,
61 want: (math.MaxInt64 / 1000) * time.Microsecond,
62 }, {
63 d: (math.MaxInt64 / 1000) + 1,
64 ackDelayExponent: 0,
65 want: 0,
66 }, {
67 d: math.MaxInt64 / 1000 / 8,
68 ackDelayExponent: 3,
69 want: (math.MaxInt64 / 1000 / 8) * 8 * time.Microsecond,
70 }, {
71 d: (math.MaxInt64 / 1000 / 8) + 1,
72 ackDelayExponent: 3,
73 want: 0,
74 }} {
75 got := test.d.Duration(test.ackDelayExponent)
76 if got != test.want {
77 t.Errorf("unscaledAckDelay(%v).Duration(%v) = %v, want %v",
78 test.d, test.ackDelayExponent, int64(got), int64(test.want))
79 }
80 }
81 }
82
View as plain text