pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/timeutil/timeutil_test.go (about) 1 package timeutil 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "bytes" 12 "testing" 13 "time" 14 15 . "pkg.re/essentialkaos/check.v1" 16 ) 17 18 // ////////////////////////////////////////////////////////////////////////////////// // 19 20 func Test(t *testing.T) { TestingT(t) } 21 22 type TimeUtilSuite struct{} 23 24 // ////////////////////////////////////////////////////////////////////////////////// // 25 26 var _ = Suite(&TimeUtilSuite{}) 27 28 func (s *TimeUtilSuite) TestPretyDuration(c *C) { 29 c.Assert(PrettyDuration(time.Duration(59000000000)), Equals, "59 seconds") 30 c.Assert(PrettyDuration(120), Equals, "2 minutes") 31 c.Assert(PrettyDuration(int16(120)), Equals, "2 minutes") 32 c.Assert(PrettyDuration(int32(120)), Equals, "2 minutes") 33 c.Assert(PrettyDuration(int64(120)), Equals, "2 minutes") 34 c.Assert(PrettyDuration(uint16(120)), Equals, "2 minutes") 35 c.Assert(PrettyDuration(uint32(120)), Equals, "2 minutes") 36 c.Assert(PrettyDuration(uint64(120)), Equals, "2 minutes") 37 c.Assert(PrettyDuration(uint(120)), Equals, "2 minutes") 38 c.Assert(PrettyDuration(float32(120)), Equals, "2 minutes") 39 c.Assert(PrettyDuration(float64(120)), Equals, "2 minutes") 40 c.Assert(PrettyDuration(3720), Equals, "1 hour and 2 minutes") 41 c.Assert(PrettyDuration(3720), Equals, "1 hour and 2 minutes") 42 c.Assert(PrettyDuration(3720), Equals, "1 hour and 2 minutes") 43 c.Assert(PrettyDuration(3720), Equals, "1 hour and 2 minutes") 44 c.Assert(PrettyDuration(60), Equals, "1 minute") 45 c.Assert(PrettyDuration(1370137), Equals, "2 weeks 1 day 20 hours 35 minutes and 37 seconds") 46 c.Assert(PrettyDuration(0), Equals, "< 1 second") 47 c.Assert(PrettyDuration("string"), Equals, "") 48 c.Assert(PrettyDuration(time.Second/3), Equals, "333.3 ms") 49 c.Assert(PrettyDuration(time.Second/3669), Equals, "272.6 μs") 50 c.Assert(PrettyDuration(time.Second/366995), Equals, "2.72 μs") 51 c.Assert(PrettyDuration(time.Second/36698888), Equals, "27 ns") 52 } 53 54 func (s *TimeUtilSuite) TestPretyDurationInDays(c *C) { 55 c.Assert(PrettyDurationInDays("ABC"), Equals, "") 56 c.Assert(PrettyDurationInDays(120), Equals, "just now") 57 c.Assert(PrettyDurationInDays(7200), Equals, "today") 58 c.Assert(PrettyDurationInDays(90000), Equals, "1 day") 59 c.Assert(PrettyDurationInDays(1296000), Equals, "15 days") 60 } 61 62 func (s *TimeUtilSuite) TestShortDuration(c *C) { 63 c.Assert(ShortDuration(time.Duration(0)), Equals, "0:00") 64 c.Assert(ShortDuration(time.Duration(3546*time.Millisecond), false), Equals, "0:03") 65 c.Assert(ShortDuration(time.Duration(3546*time.Millisecond), true), Equals, "0:03.546") 66 c.Assert(ShortDuration(time.Duration(59000000000)), Equals, "0:59") 67 c.Assert(ShortDuration(60), Equals, "1:00") 68 c.Assert(ShortDuration(120), Equals, "2:00") 69 c.Assert(ShortDuration(2235), Equals, "37:15") 70 c.Assert(ShortDuration(1234567), Equals, "342:56:07") 71 c.Assert(ShortDuration(int16(1234)), Equals, "20:34") 72 c.Assert(ShortDuration(int32(1234)), Equals, "20:34") 73 c.Assert(ShortDuration(int64(1234)), Equals, "20:34") 74 c.Assert(ShortDuration(uint16(1234)), Equals, "20:34") 75 c.Assert(ShortDuration(uint32(1234)), Equals, "20:34") 76 c.Assert(ShortDuration(uint64(1234)), Equals, "20:34") 77 c.Assert(ShortDuration(uint(1234)), Equals, "20:34") 78 c.Assert(ShortDuration(float32(1234)), Equals, "20:34") 79 c.Assert(ShortDuration(float64(1234)), Equals, "20:34") 80 c.Assert(ShortDuration("ABCD"), Equals, "") 81 } 82 83 func (s *TimeUtilSuite) TestDurationToSeconds(c *C) { 84 c.Assert(SecondsToDuration(1), Equals, time.Second) 85 c.Assert(SecondsToDuration(1.5), Equals, 1500*time.Millisecond) 86 c.Assert(SecondsToDuration(3600), Equals, time.Hour) 87 } 88 89 func (s *TimeUtilSuite) TestSecondsToDuration(c *C) { 90 c.Assert(DurationToSeconds(time.Second/4), Equals, 0.25) 91 } 92 93 func (s *TimeUtilSuite) TestFormat(c *C) { 94 d := time.Unix(1388535309, 123456789).UTC() 95 d1 := time.Unix(1389744909, 123456789).UTC() 96 97 c.Assert(Format(d, "%%"), Equals, "%") 98 c.Assert(Format(d, "%a"), Equals, "Wed") 99 c.Assert(Format(d, "%A"), Equals, "Wednesday") 100 c.Assert(Format(d, "%b"), Equals, "Jan") 101 c.Assert(Format(d, "%B"), Equals, "January") 102 c.Assert(Format(d, "%c"), Equals, "Wed 01 Jan 2014 12:15:09 AM UTC") 103 c.Assert(Format(d, "%C"), Equals, "20") 104 c.Assert(Format(d, "%d"), Equals, "01") 105 c.Assert(Format(d, "%D"), Equals, "01/01/14") 106 c.Assert(Format(d, "%e"), Equals, " 1") 107 c.Assert(Format(d, "%F"), Equals, "2014-01-01") 108 c.Assert(Format(d, "%G"), Equals, "2014") 109 c.Assert(Format(d, "%H"), Equals, "00") 110 c.Assert(Format(d, "%I"), Equals, "12") 111 c.Assert(Format(d, "%j"), Equals, "001") 112 c.Assert(Format(d, "%k"), Equals, " 0") 113 c.Assert(Format(d, "%K"), Equals, "123") 114 c.Assert(Format(d, "%l"), Equals, "12") 115 c.Assert(Format(d, "%m"), Equals, "01") 116 c.Assert(Format(d, "%M"), Equals, "15") 117 c.Assert(Format(d, "%N"), Equals, "123456789") 118 c.Assert(Format(d, "%n"), Equals, "\n") 119 c.Assert(Format(d, "%p"), Equals, "am") 120 c.Assert(Format(d, "%P"), Equals, "AM") 121 c.Assert(Format(d, "%r"), Equals, "12:15:09 AM") 122 c.Assert(Format(d, "%R"), Equals, "00:15") 123 c.Assert(Format(d, "%s"), Equals, "1388535309") 124 c.Assert(Format(d, "%S"), Equals, "09") 125 c.Assert(Format(d, "%T"), Equals, "00:15:09") 126 c.Assert(Format(d, "%u"), Equals, "3") 127 c.Assert(Format(d, "%V"), Equals, "01") 128 c.Assert(Format(d, "%w"), Equals, "3") 129 c.Assert(Format(d, "%y"), Equals, "14") 130 c.Assert(Format(d, "%Y"), Equals, "2014") 131 c.Assert(Format(d, "%z"), Equals, "+0000") 132 c.Assert(Format(d, "%Z"), Equals, "UTC") 133 c.Assert(Format(d, "%:"), Equals, "+00:00") 134 c.Assert(Format(d, "%Q"), Equals, "%Q") 135 c.Assert(Format(d, "%1234"), Equals, "%1234") 136 c.Assert(Format(d, "%SSec"), Equals, "09Sec") 137 c.Assert(Format(d1, "%e"), Equals, "15") 138 139 replaceDateTag(time.Now(), bytes.NewBufferString(""), bytes.NewBufferString("")) 140 } 141 142 func (s *TimeUtilSuite) TestTinyDate(c *C) { 143 dt := time.Date(2015, 1, 1, 0, 0, 0, 0, time.Local) 144 td := TinyDate(dt.Unix()) 145 146 c.Assert(td.Unix(), Equals, dt.Unix()) 147 c.Assert(td.Time().Unix(), Equals, dt.Unix()) 148 } 149 150 func (s *TimeUtilSuite) TestDateNames(c *C) { 151 c.Assert(getShortWeekday(time.Sunday), Equals, "Sun") 152 c.Assert(getShortWeekday(time.Monday), Equals, "Mon") 153 c.Assert(getShortWeekday(time.Tuesday), Equals, "Tue") 154 c.Assert(getShortWeekday(time.Wednesday), Equals, "Wed") 155 c.Assert(getShortWeekday(time.Thursday), Equals, "Thu") 156 c.Assert(getShortWeekday(time.Friday), Equals, "Fri") 157 c.Assert(getShortWeekday(time.Saturday), Equals, "Sat") 158 c.Assert(getShortWeekday(time.Weekday(7)), Equals, "") 159 160 c.Assert(getLongWeekday(time.Sunday), Equals, "Sunday") 161 c.Assert(getLongWeekday(time.Monday), Equals, "Monday") 162 c.Assert(getLongWeekday(time.Tuesday), Equals, "Tuesday") 163 c.Assert(getLongWeekday(time.Wednesday), Equals, "Wednesday") 164 c.Assert(getLongWeekday(time.Thursday), Equals, "Thursday") 165 c.Assert(getLongWeekday(time.Friday), Equals, "Friday") 166 c.Assert(getLongWeekday(time.Saturday), Equals, "Saturday") 167 c.Assert(getLongWeekday(time.Weekday(7)), Equals, "") 168 169 c.Assert(getShortMonth(time.Month(0)), Equals, "") 170 c.Assert(getShortMonth(time.January), Equals, "Jan") 171 c.Assert(getShortMonth(time.February), Equals, "Feb") 172 c.Assert(getShortMonth(time.March), Equals, "Mar") 173 c.Assert(getShortMonth(time.April), Equals, "Apr") 174 c.Assert(getShortMonth(time.May), Equals, "May") 175 c.Assert(getShortMonth(time.June), Equals, "Jun") 176 c.Assert(getShortMonth(time.July), Equals, "Jul") 177 c.Assert(getShortMonth(time.August), Equals, "Aug") 178 c.Assert(getShortMonth(time.September), Equals, "Sep") 179 c.Assert(getShortMonth(time.October), Equals, "Oct") 180 c.Assert(getShortMonth(time.November), Equals, "Nov") 181 c.Assert(getShortMonth(time.December), Equals, "Dec") 182 183 c.Assert(getLongMonth(time.Month(0)), Equals, "") 184 c.Assert(getLongMonth(time.January), Equals, "January") 185 c.Assert(getLongMonth(time.February), Equals, "February") 186 c.Assert(getLongMonth(time.March), Equals, "March") 187 c.Assert(getLongMonth(time.April), Equals, "April") 188 c.Assert(getLongMonth(time.May), Equals, "May") 189 c.Assert(getLongMonth(time.June), Equals, "June") 190 c.Assert(getLongMonth(time.July), Equals, "July") 191 c.Assert(getLongMonth(time.August), Equals, "August") 192 c.Assert(getLongMonth(time.September), Equals, "September") 193 c.Assert(getLongMonth(time.October), Equals, "October") 194 c.Assert(getLongMonth(time.November), Equals, "November") 195 c.Assert(getLongMonth(time.December), Equals, "December") 196 197 c.Assert(getWeekdayNum(time.Unix(1448193600, 0)), Equals, 7) 198 } 199 200 func (s *TimeUtilSuite) TestAMPM(c *C) { 201 c.Assert(getAMPMHour(time.Unix(1447838100, 0).UTC()), Equals, 9) 202 c.Assert(getAMPM(time.Unix(1447838100, 0).UTC(), true), Equals, "AM") 203 c.Assert(getAMPM(time.Unix(1447838100, 0).UTC(), false), Equals, "am") 204 c.Assert(getAMPMHour(time.Unix(1447881300, 0).UTC()), Equals, 9) 205 c.Assert(getAMPM(time.Unix(1447881300, 0).UTC(), true), Equals, "PM") 206 c.Assert(getAMPM(time.Unix(1447881300, 0).UTC(), false), Equals, "pm") 207 } 208 209 func (s *TimeUtilSuite) TestTimezone(c *C) { 210 ny, _ := time.LoadLocation("America/New_York") 211 msk, _ := time.LoadLocation("Europe/Moscow") 212 213 t := time.Unix(1447848900, 0) 214 215 c.Assert(getTimezone(t.UTC().In(ny), false), Equals, "-0500") 216 c.Assert(getTimezone(t.UTC().In(ny), true), Equals, "-05:00") 217 c.Assert(getTimezone(t.UTC().In(msk), false), Equals, "+0300") 218 c.Assert(getTimezone(t.UTC().In(msk), true), Equals, "+03:00") 219 } 220 221 func (s *TimeUtilSuite) TestDurationParsing(c *C) { 222 d, _ := ParseDuration("") 223 c.Assert(d, Equals, int64(0)) 224 225 d, _ = ParseDuration("25s") 226 c.Assert(d, Equals, int64(25)) 227 228 d, _ = ParseDuration("1m30s") 229 c.Assert(d, Equals, int64(90)) 230 231 d, _ = ParseDuration("1h30m30s") 232 c.Assert(d, Equals, int64(5430)) 233 234 d, _ = ParseDuration("1d3h30m30s") 235 c.Assert(d, Equals, int64(99030)) 236 237 d, _ = ParseDuration("1w3d12h30m30s") 238 c.Assert(d, Equals, int64(909030)) 239 240 d, _ = ParseDuration("10w") 241 c.Assert(d, Equals, int64(6048000)) 242 243 d, _ = ParseDuration("180") 244 c.Assert(d, Equals, int64(180)) 245 246 _, err := ParseDuration("180k") 247 c.Assert(err, NotNil) 248 249 _, err = ParseDuration("wm") 250 c.Assert(err, NotNil) 251 252 _, err = ParseDuration("9999999999999999999999999999999999999s") 253 c.Assert(err, NotNil) 254 255 _, err = ParseDuration("1h35m56") 256 c.Assert(err, NotNil) 257 258 d, _ = ParseDuration("30", 's') 259 c.Assert(d, Equals, int64(30)) 260 261 d, _ = ParseDuration("25", 'm') 262 c.Assert(d, Equals, int64(1500)) 263 264 d, _ = ParseDuration("14", 'h') 265 c.Assert(d, Equals, int64(50400)) 266 267 d, _ = ParseDuration("5", 'd') 268 c.Assert(d, Equals, int64(432000)) 269 270 d, _ = ParseDuration("2", 'w') 271 c.Assert(d, Equals, int64(1209600)) 272 273 _, err = ParseDuration("9999999999999999999999999999999999999", 's') 274 c.Assert(err, NotNil) 275 } 276 277 func (s *TimeUtilSuite) TestHelpers(c *C) { 278 d := time.Date(2021, 1, 1, 12, 30, 15, 0, time.Local) 279 280 c.Assert(PrevDay(d), DeepEquals, time.Date(2020, 12, 31, 12, 30, 15, 0, time.Local)) 281 c.Assert(PrevMonth(d), DeepEquals, time.Date(2020, 12, 1, 12, 30, 15, 0, time.Local)) 282 c.Assert(PrevYear(d), DeepEquals, time.Date(2020, 1, 1, 12, 30, 15, 0, time.Local)) 283 c.Assert(NextDay(d), DeepEquals, time.Date(2021, 1, 2, 12, 30, 15, 0, time.Local)) 284 c.Assert(NextMonth(d), DeepEquals, time.Date(2021, 2, 1, 12, 30, 15, 0, time.Local)) 285 c.Assert(NextYear(d), DeepEquals, time.Date(2022, 1, 1, 12, 30, 15, 0, time.Local)) 286 287 d = time.Date(2021, 8, 1, 12, 30, 15, 0, time.Local) 288 c.Assert(PrevWorkday(d), DeepEquals, time.Date(2021, 7, 30, 12, 30, 15, 0, time.Local)) 289 c.Assert(PrevWeekend(d), DeepEquals, time.Date(2021, 7, 31, 12, 30, 15, 0, time.Local)) 290 c.Assert(NextWorkday(d), DeepEquals, time.Date(2021, 8, 2, 12, 30, 15, 0, time.Local)) 291 c.Assert(NextWeekend(d), DeepEquals, time.Date(2021, 8, 7, 12, 30, 15, 0, time.Local)) 292 } 293 294 // ////////////////////////////////////////////////////////////////////////////////// // 295 296 func (s *TimeUtilSuite) BenchmarkParseDuration(c *C) { 297 for i := 0; i < c.N; i++ { 298 ParseDuration("1w2d3h10m12s") 299 } 300 } 301 302 func (s *TimeUtilSuite) BenchmarkFormat(c *C) { 303 ts := time.Now() 304 305 for i := 0; i < c.N; i++ { 306 Format(ts, "%Y/%m/%d %H:%M:%S") 307 } 308 }