From 9df909a6e8fb05cc65f4dc06f3661f2c375cf227 Mon Sep 17 00:00:00 2001 From: Ben Fuller Date: Tue, 16 Apr 2019 11:03:35 -0600 Subject: [PATCH] Revert "MicroTime/Time: remove pointer receivers and redundant IsZero() method" This reverts commit e129d701789f3a97312892618a32f0b266d8d98f. Co-authored-by: David Timm --- .../pkg/apis/meta/v1/micro_time.go | 42 +++++-- .../pkg/apis/meta/v1/micro_time_test.go | 114 ++++++++++++------ .../apimachinery/pkg/apis/meta/v1/time.go | 25 +++- .../pkg/apis/meta/v1/time_test.go | 66 +++++++--- ...pis_meta_v1_unstructed_unstructure_test.go | 4 +- 5 files changed, 184 insertions(+), 67 deletions(-) diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go index b35bf88533d..cdd9a6a7a0c 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go @@ -57,24 +57,50 @@ func NowMicro() MicroTime { return MicroTime{time.Now()} } +// IsZero returns true if the value is nil or time is zero. +func (t *MicroTime) IsZero() bool { + if t == nil { + return true + } + return t.Time.IsZero() +} + // Before reports whether the time instant t is before u. -func (t MicroTime) Before(u MicroTime) bool { - return t.Time.Before(u.Time) +func (t *MicroTime) Before(u *MicroTime) bool { + if t != nil && u != nil { + return t.Time.Before(u.Time) + } + return false } // Equal reports whether the time instant t is equal to u. -func (t MicroTime) Equal(u MicroTime) bool { - return t.Time.Equal(u.Time) +func (t *MicroTime) Equal(u *MicroTime) bool { + if t == nil && u == nil { + return true + } + if t != nil && u != nil { + return t.Time.Equal(u.Time) + } + return false } // BeforeTime reports whether the time instant t is before second-lever precision u. -func (t MicroTime) BeforeTime(u Time) bool { - return t.Time.Before(u.Time) +func (t *MicroTime) BeforeTime(u *Time) bool { + if t != nil && u != nil { + return t.Time.Before(u.Time) + } + return false } // EqualTime reports whether the time instant t is equal to second-lever precision u. -func (t MicroTime) EqualTime(u Time) bool { - return t.Time.Equal(u.Time) +func (t *MicroTime) EqualTime(u *Time) bool { + if t == nil && u == nil { + return true + } + if t != nil && u != nil { + return t.Time.Equal(u.Time) + } + return false } // UnixMicro returns the local time corresponding to the given Unix time diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_test.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_test.go index 248f6c32e09..3b274578689 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_test.go @@ -140,73 +140,115 @@ func TestMicroTimeProto(t *testing.T) { func TestMicroTimeEqual(t *testing.T) { t1 := NewMicroTime(time.Now()) - t2 := NewMicroTime(time.Now().Add(time.Second)) - - if !t1.Equal(t1) { - t.Errorf("Failed equality test for '%v', '%v': t1 should equal t1", t1, t1) + cases := []struct { + name string + x *MicroTime + y *MicroTime + result bool + }{ + {"nil =? nil", nil, nil, true}, + {"!nil =? !nil", &t1, &t1, true}, + {"nil =? !nil", nil, &t1, false}, + {"!nil =? nil", &t1, nil, false}, } - if t1.Equal(t2) { - t.Errorf("Failed equality test for '%v', '%v': t1 should not equal t2", t1, t2) + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + result := c.x.Equal(c.y) + if result != c.result { + t.Errorf("Failed equality test for '%v', '%v': expected %+v, got %+v", c.x, c.y, c.result, result) + } + }) } } func TestMicroTimeEqualTime(t *testing.T) { t1 := NewMicroTime(time.Now()) t2 := NewTime(t1.Time) - t3 := NewTime(time.Now().Add(time.Second)) - - if !t1.EqualTime(t2) { - t.Errorf("Failed equality test for '%v', '%v': t1 should equal t2", t1, t1) + cases := []struct { + name string + x *MicroTime + y *Time + result bool + }{ + {"nil =? nil", nil, nil, true}, + {"!nil =? !nil", &t1, &t2, true}, + {"nil =? !nil", nil, &t2, false}, + {"!nil =? nil", &t1, nil, false}, } - if t1.EqualTime(t3) { - t.Errorf("Failed equality test for '%v', '%v': t1 should not equal t3", t1, t2) + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + result := c.x.EqualTime(c.y) + if result != c.result { + t.Errorf("Failed equality test for '%v', '%v': expected %+v, got %+v", c.x, c.y, c.result, result) + } + }) } } func TestMicroTimeBefore(t *testing.T) { - tBefore := NewMicroTime(time.Now()) - tAfter := NewMicroTime(tBefore.Time.Add(time.Second)) + t1 := NewMicroTime(time.Now()) cases := []struct { - name string - x MicroTime - y MicroTime - result bool + name string + x *MicroTime + y *MicroTime }{ - {"tBefore