blob: a145609dde1e324e6a603c5c9801a6d84762afeb [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package time
import (
"math"
"syscall/zx"
"testing"
)
func TestTimeAdd(t *testing.T) {
for _, tc := range []struct {
a Time
b Duration
want Time
}{
{Time{2}, Duration(2), Time{4}},
{Time{2}, Duration(-1), Time{1}},
{Time{1}, Duration(math.MaxInt64), Time{math.MaxInt64}},
{Time{-1}, Duration(math.MinInt64), Time{math.MinInt64}},
} {
if got, want := tc.a.Add(tc.b), tc.want; got != want {
t.Errorf("Time(%d).Add(%d) failed: got=%d, want=%d", tc.a, tc.b, got, want)
}
}
}
func TestTimeSub(t *testing.T) {
for _, tc := range []struct {
a Time
b Time
want Duration
}{
{Time{2}, Time{1}, Duration(1)},
{Time{2}, Time{-2}, Duration(4)},
{Time{1}, Time{math.MinInt64}, Duration(math.MaxInt64)},
{Time{-1}, Time{math.MaxInt64}, Duration(math.MinInt64)},
} {
if got, want := tc.a.Sub(tc.b), tc.want; got != want {
t.Errorf("Time(%d).Sub(%d) failed: got=%d, want=%d", tc.a, tc.b, got, want)
}
}
}
func TestAfter(t *testing.T) {
testDuration := 100 * Millisecond
if got, want := <-After(testDuration), (Time{value: zx.Time(testDuration)}); got.value < want.value {
t.Errorf("time.After(%d) failed: got=%d, want>=%d", testDuration, got.value, want.value)
}
}
func TestMonotonicString(t *testing.T) {
for _, tc := range []struct {
mono int64
want string
}{
{0, "m=+0.000000000"},
{123456789, "m=+0.123456789"},
{-123456789, "m=-0.123456789"},
{123456789000, "m=+123.456789000"},
{-123456789000, "m=-123.456789000"},
{9e18, "m=+9000000000.000000000"},
{-9e18, "m=-9000000000.000000000"},
{-1 << 63, "m=-9223372036.854775808"},
} {
if got, want := Monotonic(tc.mono).String(), tc.want; got != want {
t.Errorf("with mono=%d: got %q; want %q", tc.mono, got, want)
}
}
}