Skip to content

Commit

Permalink
time: add Duration.Abs
Browse files Browse the repository at this point in the history
Fixes #51414

Change-Id: Ia3b1674f2a902c8396fe029397536643a3bc1784
GitHub-Last-Rev: 67159648af09e7a8ac2825a1fe71b2de3fb9d748
GitHub-Pull-Request: golang/go#51739
Reviewed-on: https://go-review.googlesource.com/c/go/+/393515
Run-TryBot: Ian Lance Taylor <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Ian Lance Taylor <[email protected]>
Reviewed-by: Emmanuel Odeke <[email protected]>
  • Loading branch information
earthboundkid authored and odeke-em committed Mar 27, 2022
1 parent 737837c commit 0bbd05b
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 0 deletions.
1 change: 1 addition & 0 deletions api/next/51414.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pkg time, method (Duration) Abs() Duration #51414
13 changes: 13 additions & 0 deletions src/time/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -815,6 +815,19 @@ func (d Duration) Round(m Duration) Duration {
return maxDuration // overflow
}

// Abs returns the absolute value of d.
// As a special case, math.MinInt64 is converted to math.MaxInt64.
func (d Duration) Abs() Duration {
switch {
case d >= 0:
return d
case d == minDuration:
return maxDuration
default:
return -d
}
}

// Add returns the time t+d.
func (t Time) Add(d Duration) Time {
dsec := int64(d / 1e9)
Expand Down
24 changes: 24 additions & 0 deletions src/time/time_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1240,6 +1240,30 @@ func TestDurationRound(t *testing.T) {
}
}

var durationAbsTests = []struct {
d Duration
want Duration
}{
{0, 0},
{1, 1},
{-1, 1},
{1 * Minute, 1 * Minute},
{-1 * Minute, 1 * Minute},
{minDuration, maxDuration},
{minDuration + 1, maxDuration},
{minDuration + 2, maxDuration - 1},
{maxDuration, maxDuration},
{maxDuration - 1, maxDuration - 1},
}

func TestDurationAbs(t *testing.T) {
for _, tt := range durationAbsTests {
if got := tt.d.Abs(); got != tt.want {
t.Errorf("Duration(%s).Abs() = %s; want: %s", tt.d, got, tt.want)
}
}
}

var defaultLocTests = []struct {
name string
f func(t1, t2 Time) bool
Expand Down

0 comments on commit 0bbd05b

Please sign in to comment.