Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/time/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,12 @@ func fmtInt(buf []byte, v uint64) int {
// Nanoseconds returns the duration as an integer nanosecond count.
func (d Duration) Nanoseconds() int64 { return int64(d) }

// Microseconds returns the duration as an integer microsecond count.
func (d Duration) Microseconds() int64 { return int64(d) / 1e3 }

// Milliseconds returns the duration as an integer millisecond count.
func (d Duration) Milliseconds() int64 { return int64(d) / 1e6 }

// These methods return float64 because the dominant
// use case is for printing a floating point number like 1.5s, and
// a truncation to integer would make them not useful in those cases.
Expand Down
42 changes: 37 additions & 5 deletions src/time/time_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ var gobTests = []Time{
Date(0, 1, 2, 3, 4, 5, 6, UTC),
Date(7, 8, 9, 10, 11, 12, 13, FixedZone("", 0)),
Unix(81985467080890095, 0x76543210), // Time.sec: 0x0123456789ABCDEF
{}, // nil location
{}, // nil location
Date(1, 2, 3, 4, 5, 6, 7, FixedZone("", 32767*60)),
Date(1, 2, 3, 4, 5, 6, 7, FixedZone("", -32768*60)),
}
Expand Down Expand Up @@ -1021,7 +1021,39 @@ var nsDurationTests = []struct {
func TestDurationNanoseconds(t *testing.T) {
for _, tt := range nsDurationTests {
if got := tt.d.Nanoseconds(); got != tt.want {
t.Errorf("d.Nanoseconds() = %d; want: %d", got, tt.want)
t.Errorf("Duration(%s).Nanoseconds() = %d; want: %d", tt.d, got, tt.want)
}
}
}

var usDurationTests = []struct {
d Duration
want int64
}{
{Duration(-1000), -1},
{Duration(1000), 1},
}

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

var msDurationTests = []struct {
d Duration
want int64
}{
{Duration(-1000000), -1},
{Duration(1000000), 1},
}

func TestDurationMilliseconds(t *testing.T) {
for _, tt := range msDurationTests {
if got := tt.d.Milliseconds(); got != tt.want {
t.Errorf("Duration(%s).Milliseconds() = %d; want: %d", tt.d, got, tt.want)
}
}
}
Expand All @@ -1036,7 +1068,7 @@ var secDurationTests = []struct {
func TestDurationSeconds(t *testing.T) {
for _, tt := range secDurationTests {
if got := tt.d.Seconds(); got != tt.want {
t.Errorf("d.Seconds() = %g; want: %g", got, tt.want)
t.Errorf("Duration(%s).Seconds() = %g; want: %g", tt.d, got, tt.want)
}
}
}
Expand All @@ -1055,7 +1087,7 @@ var minDurationTests = []struct {
func TestDurationMinutes(t *testing.T) {
for _, tt := range minDurationTests {
if got := tt.d.Minutes(); got != tt.want {
t.Errorf("d.Minutes() = %g; want: %g", got, tt.want)
t.Errorf("Duration(%s).Minutes() = %g; want: %g", tt.d, got, tt.want)
}
}
}
Expand All @@ -1074,7 +1106,7 @@ var hourDurationTests = []struct {
func TestDurationHours(t *testing.T) {
for _, tt := range hourDurationTests {
if got := tt.d.Hours(); got != tt.want {
t.Errorf("d.Hours() = %g; want: %g", got, tt.want)
t.Errorf("Duration(%s).Hours() = %g; want: %g", tt.d, got, tt.want)
}
}
}
Expand Down