Sitelet https://github.com/Fantom-foundation/go-opera/commit/a46f1f799ea5e98459f3809845bd0de95df543b8
Skip to content

Commit a46f1f7

Browse files
committed
fix PrettyDuration for negative values
1 parent a06bdb7 commit a46f1f7

2 files changed

Lines changed: 26 additions & 12 deletions

File tree

‎utils/pretty_duration.go‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ func (t PrettyDuration) String() string {
3333
diff := time.Duration(t)
3434
// Accumulate a precision of 3 components before returning
3535
result, prec := "", 0
36+
if diff < 0 {
37+
diff = -diff
38+
result = "-"
39+
}
3640

3741
for _, unit := range ageUnits {
3842
if diff > unit.Size {

‎utils/pretty_duration_test.go‎

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,26 @@ import (
88
)
99

1010
func TestPrettyDuration_String(t *testing.T) {
11-
require.Equal(t, "0s", PrettyDuration(0).String())
12-
require.Equal(t, "1ns", PrettyDuration(time.Nanosecond).String())
13-
require.Equal(t, "1µs", PrettyDuration(time.Microsecond).String())
14-
require.Equal(t, "1ms", PrettyDuration(time.Millisecond).String())
15-
require.Equal(t, "1s", PrettyDuration(time.Second).String())
16-
require.Equal(t, "1.000s", PrettyDuration(time.Second + time.Microsecond + time.Nanosecond).String())
17-
require.Equal(t, "1.001s", PrettyDuration(time.Second + time.Millisecond + time.Microsecond + time.Nanosecond).String())
18-
require.Equal(t, "1m1.001s", PrettyDuration(time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond).String())
19-
require.Equal(t, "1h1m1.001s", PrettyDuration(time.Hour + time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond).String())
20-
require.Equal(t, "1d1h1m", PrettyDuration(24 * time.Hour + time.Hour + time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond).String())
21-
require.Equal(t, "1mo1d1h", PrettyDuration(30 * 24 * time.Hour + 24 * time.Hour + time.Hour + time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond).String())
22-
require.Equal(t, "1y4mo3w", PrettyDuration(503.123456789 * 24 * float64(time.Hour)).String())
11+
for _, testcase := range []struct {
12+
str string
13+
val time.Duration
14+
}{
15+
{"0s", 0},
16+
{"1ns", time.Nanosecond},
17+
{"1µs", time.Microsecond},
18+
{"1ms", time.Millisecond},
19+
{"1s", time.Second},
20+
{"1.000s", time.Second + time.Microsecond + time.Nanosecond},
21+
{"1.001s", time.Second + time.Millisecond + time.Microsecond + time.Nanosecond},
22+
{"1m1.001s", time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond},
23+
{"1h1m1.001s", time.Hour + time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond},
24+
{"1d1h1m", 24*time.Hour + time.Hour + time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond},
25+
{"1mo1d1h", 30*24*time.Hour + 24*time.Hour + time.Hour + time.Minute + time.Second + time.Millisecond + time.Microsecond + time.Nanosecond},
26+
{"26y4mo3w", time.Duration(9503.123456789 * 24 * float64(time.Hour))},
27+
} {
28+
require.Equal(t, testcase.str, PrettyDuration(testcase.val).String())
29+
if testcase.val > 0 {
30+
require.Equal(t, "-"+testcase.str, PrettyDuration(-testcase.val).String())
31+
}
32+
}
2333
}

0 commit comments

Comments
 (0)