bitbucket.org/ai69/amoy@v0.2.3/time_test.go (about)

     1  package amoy
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  	"time"
     7  )
     8  
     9  func TestAfterNow(t *testing.T) {
    10  	tests := []struct {
    11  		name string
    12  		t    time.Time
    13  		want bool
    14  	}{
    15  		{"Before Now", time.Date(2021, time.April, 15, 23, 59, 59, 0, time.UTC), false},
    16  		{"After Now", time.Date(2999, time.April, 15, 23, 59, 59, 0, time.UTC), true},
    17  	}
    18  	for _, tt := range tests {
    19  		t.Run(tt.name, func(t *testing.T) {
    20  			if got := AfterNow(tt.t); got != tt.want {
    21  				t.Errorf("AfterNow() = %v, want %v", got, tt.want)
    22  			}
    23  		})
    24  	}
    25  }
    26  
    27  func TestBeforeNow(t *testing.T) {
    28  	tests := []struct {
    29  		name string
    30  		t    time.Time
    31  		want bool
    32  	}{
    33  		{"Before Now", time.Date(2021, time.April, 15, 23, 59, 59, 0, time.UTC), true},
    34  		{"After Now", time.Date(2999, time.April, 15, 23, 59, 59, 0, time.UTC), false},
    35  	}
    36  	for _, tt := range tests {
    37  		t.Run(tt.name, func(t *testing.T) {
    38  			if got := BeforeNow(tt.t); got != tt.want {
    39  				t.Errorf("BeforeNow() = %v, want %v", got, tt.want)
    40  			}
    41  		})
    42  	}
    43  }
    44  
    45  func TestGetUnixTime(t *testing.T) {
    46  	tests := []struct {
    47  		name string
    48  		want int64
    49  	}{
    50  		{"one test", 1618722646},
    51  	}
    52  	for _, tt := range tests {
    53  		t.Run(tt.name, func(t *testing.T) {
    54  			if got := GetUnixTime(); got < tt.want {
    55  				t.Errorf("GetUnixTime() = %v, want > %v", got, tt.want)
    56  			}
    57  		})
    58  	}
    59  }
    60  
    61  func TestParseUnixTime(t *testing.T) {
    62  	tests := []struct {
    63  		name  string
    64  		stamp int64
    65  		want  time.Time
    66  	}{
    67  		{"zero test", 0, time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC).Local()},
    68  		{"one test", 1627528253, time.Date(2021, 7, 29, 3, 10, 53, 0, time.UTC).Local()},
    69  	}
    70  	for _, tt := range tests {
    71  		t.Run(tt.name, func(t *testing.T) {
    72  			if got := ParseUnixTime(tt.stamp); got != tt.want {
    73  				t.Errorf("ParseUnixTime(%d) = %v, want = %v", tt.stamp, got, tt.want)
    74  			}
    75  		})
    76  	}
    77  
    78  	now := time.Now()
    79  	gotS := GetUnixTime()
    80  	gotT := ParseUnixTime(gotS)
    81  	if now.Sub(gotT) > 1*Second {
    82  		t.Errorf("ParseUnixTime(%d) = %v, want = %v", gotS, gotT, now)
    83  	}
    84  }
    85  
    86  func TestNowStr(t *testing.T) {
    87  	t.Logf("NowStr -> %v", NowStr())
    88  	t.Logf("ShortNowStr -> %v", ShortNowStr())
    89  	t.Logf("DateNowStr -> %v", DateNowStr())
    90  	t.Logf("UTCNow -> %v", UTCNow())
    91  	t.Logf("UTCNowStr -> %v", UTCNowStr())
    92  	t.Logf("ShortUTCNowStr -> %v", ShortUTCNowStr())
    93  	t.Logf("DateUTCNowStr -> %v", DateUTCNowStr())
    94  }
    95  
    96  func TestSleepForSeconds(_ *testing.T) {
    97  	SleepForSeconds(1)
    98  }
    99  
   100  func TestMilliseconds(t *testing.T) {
   101  	tests := []struct {
   102  		name string
   103  		n    float64
   104  		want time.Duration
   105  	}{
   106  		{"zero", 0, 0},
   107  		{"one", 1, 1 * time.Millisecond},
   108  		{"one and half", 1.5, 1*time.Millisecond + 500*time.Microsecond},
   109  		{"one msec", 0.001, time.Microsecond},
   110  	}
   111  	for _, tt := range tests {
   112  		t.Run(tt.name, func(t *testing.T) {
   113  			if got := Milliseconds(tt.n); got != tt.want {
   114  				t.Errorf("Milliseconds(%f) = %v, want %v", tt.n, got, tt.want)
   115  			}
   116  		})
   117  	}
   118  }
   119  
   120  func TestSeconds(t *testing.T) {
   121  	tests := []struct {
   122  		name string
   123  		n    float64
   124  		want time.Duration
   125  	}{
   126  		{"zero", 0, 0},
   127  		{"one", 1, 1 * time.Second},
   128  		{"one and half", 1.5, 1*time.Second + 500*time.Millisecond},
   129  		{"one msec", 0.001, time.Millisecond},
   130  	}
   131  	for _, tt := range tests {
   132  		t.Run(tt.name, func(t *testing.T) {
   133  			if got := Seconds(tt.n); got != tt.want {
   134  				t.Errorf("Seconds(%f) = %v, want %v", tt.n, got, tt.want)
   135  			}
   136  		})
   137  	}
   138  }
   139  
   140  func TestMinutes(t *testing.T) {
   141  	tests := []struct {
   142  		name string
   143  		n    float64
   144  		want time.Duration
   145  	}{
   146  		{"zero", 0, 0},
   147  		{"one", 1, 1 * time.Minute},
   148  		{"one and half", 1.5, 1*time.Minute + 30*time.Second},
   149  		{"six sec", 0.1, 6 * time.Second},
   150  	}
   151  	for _, tt := range tests {
   152  		t.Run(tt.name, func(t *testing.T) {
   153  			if got := Minutes(tt.n); got != tt.want {
   154  				t.Errorf("Minutes(%f) = %v, want %v", tt.n, got, tt.want)
   155  			}
   156  		})
   157  	}
   158  }
   159  
   160  func TestHours(t *testing.T) {
   161  	tests := []struct {
   162  		name string
   163  		n    float64
   164  		want time.Duration
   165  	}{
   166  		{"zero", 0, 0},
   167  		{"one", 1, 1 * time.Hour},
   168  		{"one and half", 1.5, 1*time.Hour + 30*time.Minute},
   169  		{"twelve min", 0.2, 12 * time.Minute},
   170  	}
   171  	for _, tt := range tests {
   172  		t.Run(tt.name, func(t *testing.T) {
   173  			if got := Hours(tt.n); got != tt.want {
   174  				t.Errorf("Hours(%f) = %v, want %v", tt.n, got, tt.want)
   175  			}
   176  		})
   177  	}
   178  }
   179  
   180  func TestDays(t *testing.T) {
   181  	tests := []struct {
   182  		name string
   183  		n    float64
   184  		want time.Duration
   185  	}{
   186  		{"zero", 0, 0},
   187  		{"one", 1, 24 * time.Hour},
   188  		{"one and half", 1.5, 36 * time.Hour},
   189  		{"ten", 10.0, 240 * time.Hour},
   190  	}
   191  	for _, tt := range tests {
   192  		t.Run(tt.name, func(t *testing.T) {
   193  			if got := Days(tt.n); got != tt.want {
   194  				t.Errorf("Days(%f) = %v, want %v", tt.n, got, tt.want)
   195  			}
   196  		})
   197  	}
   198  }
   199  
   200  func TestWeeks(t *testing.T) {
   201  	tests := []struct {
   202  		name string
   203  		n    float64
   204  		want time.Duration
   205  	}{
   206  		{"zero", 0, 0},
   207  		{"one", 1, 7 * 24 * time.Hour},
   208  		{"one and half", 1.5, 10.5 * 24 * time.Hour},
   209  	}
   210  	for _, tt := range tests {
   211  		t.Run(tt.name, func(t *testing.T) {
   212  			if got := Weeks(tt.n); got != tt.want {
   213  				t.Errorf("Weeks(%f) = %v, want %v", tt.n, got, tt.want)
   214  			}
   215  		})
   216  	}
   217  }
   218  
   219  func TestYears(t *testing.T) {
   220  	tests := []struct {
   221  		name string
   222  		n    float64
   223  		want time.Duration
   224  	}{
   225  		{"zero", 0, 0},
   226  		{"one", 1, 365 * 24 * time.Hour},
   227  		{"one and one fifth", 1.2, 438 * 24 * time.Hour},
   228  	}
   229  	for _, tt := range tests {
   230  		t.Run(tt.name, func(t *testing.T) {
   231  			if got := Years(tt.n); got != tt.want {
   232  				t.Errorf("Years(%f) = %v, want %v", tt.n, got, tt.want)
   233  			}
   234  		})
   235  	}
   236  }
   237  
   238  func TestDayBeginEnd(t *testing.T) {
   239  	local := time.FixedZone("Shanghai", 8*60*60)
   240  	tests := []struct {
   241  		name      string
   242  		now       time.Time
   243  		zone      *time.Location
   244  		wantBegin time.Time
   245  		wantEnd   time.Time
   246  	}{
   247  		{
   248  			"Same UTC Day (Local->Local)",
   249  			time.Date(2021, 9, 1, 12, 0, 0, 0, local),
   250  			local,
   251  			time.Date(2021, 9, 1, 0, 0, 0, 0, local),
   252  			time.Date(2021, 9, 1, 23, 59, 59, 999999999, local),
   253  		},
   254  		{
   255  			"Diff UTC Day (Local->Local)",
   256  			time.Date(2021, 9, 1, 6, 0, 0, 0, local),
   257  			local,
   258  			time.Date(2021, 9, 1, 0, 0, 0, 0, local),
   259  			time.Date(2021, 9, 1, 23, 59, 59, 999999999, local),
   260  		},
   261  		{
   262  			"Same UTC Day (Local->UTC)",
   263  			time.Date(2021, 9, 1, 12, 0, 0, 0, local),
   264  			time.UTC,
   265  			time.Date(2021, 9, 1, 0, 0, 0, 0, time.UTC),
   266  			time.Date(2021, 9, 1, 23, 59, 59, 999999999, time.UTC),
   267  		},
   268  		{
   269  			"Diff UTC Day (Local->UTC)",
   270  			time.Date(2021, 9, 1, 6, 0, 0, 0, local),
   271  			time.UTC,
   272  			time.Date(2021, 9, 1, 0, 0, 0, 0, time.UTC),
   273  			time.Date(2021, 9, 1, 23, 59, 59, 999999999, time.UTC),
   274  		},
   275  		{
   276  			"Same UTC Day (UTC->Local)",
   277  			time.Date(2021, 9, 1, 12, 0, 0, 0, local).UTC(),
   278  			local,
   279  			time.Date(2021, 9, 1, 0, 0, 0, 0, local),
   280  			time.Date(2021, 9, 1, 23, 59, 59, 999999999, local),
   281  		},
   282  		{
   283  			"Diff UTC Day (UTC->Local)",
   284  			time.Date(2021, 9, 1, 6, 0, 0, 0, local).UTC(),
   285  			local,
   286  			time.Date(2021, 8, 31, 0, 0, 0, 0, local),
   287  			time.Date(2021, 8, 31, 23, 59, 59, 999999999, local),
   288  		},
   289  		{
   290  			"Same UTC Day (UTC->UTC)",
   291  			time.Date(2021, 9, 1, 12, 0, 0, 0, local).UTC(),
   292  			time.UTC,
   293  			time.Date(2021, 9, 1, 0, 0, 0, 0, time.UTC),
   294  			time.Date(2021, 9, 1, 23, 59, 59, 999999999, time.UTC),
   295  		},
   296  		{
   297  			"Diff UTC Day (UTC->UTC)",
   298  			time.Date(2021, 9, 1, 6, 0, 0, 0, local).UTC(),
   299  			time.UTC,
   300  			time.Date(2021, 8, 31, 0, 0, 0, 0, time.UTC),
   301  			time.Date(2021, 8, 31, 23, 59, 59, 999999999, time.UTC),
   302  		},
   303  	}
   304  	for _, tt := range tests {
   305  		t.Run(tt.name, func(t *testing.T) {
   306  			if got := DayBegin(tt.now, tt.zone); got != tt.wantBegin {
   307  				t.Errorf("DayBegin(%v) = %v, want %v", tt.now, got, tt.wantBegin)
   308  			}
   309  			if got := DayEnd(tt.now, tt.zone); got != tt.wantEnd {
   310  				t.Errorf("DayEnd(%v) = %v, want %v", tt.now, got, tt.wantEnd)
   311  			}
   312  		})
   313  	}
   314  }
   315  
   316  func BenchmarkDurationToString(b *testing.B) {
   317  	d := Days(365) + Hours(23) + Minutes(34) + Seconds(45.678932)
   318  	b.ResetTimer()
   319  	for i := 0; i < b.N; i++ {
   320  		_ = DurationToString(d)
   321  	}
   322  }
   323  
   324  func TestDurationToString(t *testing.T) {
   325  	tests := []struct {
   326  		name string
   327  		d    time.Duration
   328  		want string
   329  	}{
   330  		{"Zero", 0, "00:00:00.000"},
   331  		{"~1 Sec", Seconds(0.9999), "00:00:00.999"},
   332  		{"1 Sec", Seconds(1), "00:00:01.000"},
   333  		{"12.3456 Sec", Seconds(12.3456), "00:00:12.345"},
   334  		{"1D 2H 3M 4.5S", Days(1) + Hours(2) + Minutes(3) + Seconds(4.5), "01:02:03:04.500"},
   335  		{"12D 23H 34M 45.678S", Days(12) + Hours(23) + Minutes(34) + Seconds(45.678), "12:23:34:45.678"},
   336  		{"365D 23H 34M 45.678S", Days(365) + Hours(23) + Minutes(34) + Seconds(45.678), "365:23:34:45.678"},
   337  	}
   338  	for _, tt := range tests {
   339  		t.Run(tt.name, func(t *testing.T) {
   340  			if got := DurationToString(tt.d); got != tt.want {
   341  				t.Errorf("DurationToString(%v) = %v, want %v", tt.d, got, tt.want)
   342  			}
   343  		})
   344  	}
   345  }
   346  
   347  func TestMustParseDateString(t *testing.T) {
   348  	tests := []struct {
   349  		name string
   350  		s    string
   351  		want time.Time
   352  	}{
   353  		{"First Day of 2022", "2022-01-01", NewUTCDay(2022, 01, 01)},
   354  		{"Second Day of 2022", "2022-01-02", NewUTCDay(2022, 01, 02)},
   355  	}
   356  	for _, tt := range tests {
   357  		t.Run(tt.name, func(t *testing.T) {
   358  			if got := MustParseDateString(tt.s); !reflect.DeepEqual(got, tt.want) {
   359  				t.Errorf("MustParseDateString(%s) = %v, want %v", tt.s, got, tt.want)
   360  			}
   361  		})
   362  	}
   363  }