@@ -45,3 +45,82 @@ func TestHumanDuration(t *testing.T) {
45
45
})
46
46
}
47
47
}
48
+
49
+ func TestHumanDurationBoundaries (t * testing.T ) {
50
+ tests := []struct {
51
+ d time.Duration
52
+ want string
53
+ }{
54
+ {d : - 2 * time .Second , want : "<invalid>" },
55
+ {d : - 2 * time .Second + 1 , want : "0s" },
56
+ {d : 0 , want : "0s" },
57
+ {d : time .Second - time .Millisecond , want : "0s" },
58
+ {d : 2 * time .Minute - time .Millisecond , want : "119s" },
59
+ {d : 2 * time .Minute , want : "2m" },
60
+ {d : 2 * time .Minute + time .Second , want : "2m1s" },
61
+ {d : 10 * time .Minute - time .Millisecond , want : "9m59s" },
62
+ {d : 10 * time .Minute , want : "10m" },
63
+ {d : 10 * time .Minute + time .Second , want : "10m" },
64
+ {d : 3 * time .Hour - time .Millisecond , want : "179m" },
65
+ {d : 3 * time .Hour , want : "3h" },
66
+ {d : 3 * time .Hour + time .Minute , want : "3h1m" },
67
+ {d : 8 * time .Hour - time .Millisecond , want : "7h59m" },
68
+ {d : 8 * time .Hour , want : "8h" },
69
+ {d : 8 * time .Hour + 59 * time .Minute , want : "8h" },
70
+ {d : 2 * 24 * time .Hour - time .Millisecond , want : "47h" },
71
+ {d : 2 * 24 * time .Hour , want : "2d" },
72
+ {d : 2 * 24 * time .Hour + time .Hour , want : "2d1h" },
73
+ {d : 8 * 24 * time .Hour - time .Millisecond , want : "7d23h" },
74
+ {d : 8 * 24 * time .Hour , want : "8d" },
75
+ {d : 8 * 24 * time .Hour + 23 * time .Hour , want : "8d" },
76
+ {d : 2 * 365 * 24 * time .Hour - time .Millisecond , want : "729d" },
77
+ {d : 2 * 365 * 24 * time .Hour , want : "2y0d" },
78
+ {d : 2 * 365 * 24 * time .Hour + 23 * time .Hour , want : "2y0d" },
79
+ {d : 3 * 365 * 24 * time .Hour , want : "3y0d" },
80
+ {d : 8 * 365 * 24 * time .Hour - time .Millisecond , want : "7y364d" },
81
+ {d : 8 * 365 * 24 * time .Hour , want : "8y" },
82
+ {d : 8 * 365 * 24 * time .Hour + 364 * 24 * time .Hour , want : "8y" },
83
+ {d : 9 * 365 * 24 * time .Hour , want : "9y" },
84
+ }
85
+ for _ , tt := range tests {
86
+ t .Run (tt .d .String (), func (t * testing.T ) {
87
+ if got := HumanDuration (tt .d ); got != tt .want {
88
+ t .Errorf ("HumanDuration() = %v, want %v" , got , tt .want )
89
+ }
90
+ })
91
+ }
92
+ }
93
+
94
+ func TestShortHumanDurationBoundaries (t * testing.T ) {
95
+ tests := []struct {
96
+ d time.Duration
97
+ want string
98
+ }{
99
+ {d : - 2 * time .Second , want : "<invalid>" },
100
+ {d : - 2 * time .Second + 1 , want : "0s" },
101
+ {d : 0 , want : "0s" },
102
+ {d : time .Second - time .Millisecond , want : "0s" },
103
+ {d : time .Second , want : "1s" },
104
+ {d : 2 * time .Second - time .Millisecond , want : "1s" },
105
+ {d : time .Minute - time .Millisecond , want : "59s" },
106
+ {d : time .Minute , want : "1m" },
107
+ {d : 2 * time .Minute - time .Millisecond , want : "1m" },
108
+ {d : time .Hour - time .Millisecond , want : "59m" },
109
+ {d : time .Hour , want : "1h" },
110
+ {d : 2 * time .Hour - time .Millisecond , want : "1h" },
111
+ {d : 24 * time .Hour - time .Millisecond , want : "23h" },
112
+ {d : 24 * time .Hour , want : "1d" },
113
+ {d : 2 * 24 * time .Hour - time .Millisecond , want : "1d" },
114
+ {d : 365 * 24 * time .Hour - time .Millisecond , want : "364d" },
115
+ {d : 365 * 24 * time .Hour , want : "1y" },
116
+ {d : 2 * 365 * 24 * time .Hour - time .Millisecond , want : "1y" },
117
+ {d : 2 * 365 * 24 * time .Hour , want : "2y" },
118
+ }
119
+ for _ , tt := range tests {
120
+ t .Run (tt .d .String (), func (t * testing.T ) {
121
+ if got := ShortHumanDuration (tt .d ); got != tt .want {
122
+ t .Errorf ("ShortHumanDuration() = %v, want %v" , got , tt .want )
123
+ }
124
+ })
125
+ }
126
+ }
0 commit comments