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 }