209 lines
7.2 KiB
Julia
209 lines
7.2 KiB
Julia
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
|
|
|
# yearmonthday is the opposite of totaldays
|
|
# taking Rata Die Day # and returning proleptic Gregorian date
|
|
@test Dates.yearmonthday(-306) == (0, 2, 29)
|
|
@test Dates.yearmonth(-306) == (0, 2)
|
|
@test Dates.monthday(-306) == (2, 29)
|
|
@test Dates.yearmonthday(-305) == (0, 3, 1)
|
|
@test Dates.yearmonth(-305) == (0, 3)
|
|
@test Dates.monthday(-305) == (3, 1)
|
|
@test Dates.yearmonthday(-2) == (0, 12, 29)
|
|
@test Dates.yearmonth(-2) == (0, 12)
|
|
@test Dates.monthday(-2) == (12, 29)
|
|
@test Dates.yearmonthday(-1) == (0, 12, 30)
|
|
@test Dates.yearmonth(-1) == (0, 12)
|
|
@test Dates.monthday(-1) == (12, 30)
|
|
@test Dates.yearmonthday(0) == (0, 12, 31)
|
|
@test Dates.yearmonth(-0) == (0, 12)
|
|
@test Dates.monthday(-0) == (12, 31)
|
|
@test Dates.yearmonthday(1) == (1, 1, 1)
|
|
@test Dates.yearmonth(1) == (1, 1)
|
|
@test Dates.monthday(1) == (1, 1)
|
|
# year, month, and day return the indivial components
|
|
# of yearmonthday, avoiding additional calculations when possible
|
|
@test Dates.year(-1) == 0
|
|
@test Dates.month(-1) == 12
|
|
@test Dates.day(-1) == 30
|
|
@test Dates.year(0) == 0
|
|
@test Dates.month(0) == 12
|
|
@test Dates.day(0) == 31
|
|
@test Dates.year(1) == 1
|
|
@test Dates.month(1) == 1
|
|
@test Dates.day(1) == 1
|
|
@test Dates.yearmonthday(730120) == (2000, 1, 1)
|
|
@test Dates.year(730120) == 2000
|
|
@test Dates.month(730120) == 1
|
|
@test Dates.day(730120) == 1
|
|
|
|
# Test totaldays and yearmonthday from January 1st of "from" to December 31st of "to"
|
|
# test_dates(-10000, 10000) takes about 15 seconds
|
|
# test_dates(year(typemin(Date)), year(typemax(Date))) is full range
|
|
# and would take.......a really long time
|
|
let from=0, to=2100, y=0, m=0, d=0
|
|
test_day = Dates.totaldays(from, 1, 1)
|
|
for y in from:to
|
|
for m = 1:12
|
|
for d = 1:Dates.daysinmonth(y, m)
|
|
days = Dates.totaldays(y, m, d)
|
|
@test days == test_day
|
|
@test (y, m, d) == Dates.yearmonthday(days)
|
|
test_day += 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# Test year, month, day, hour, minute
|
|
let y=0, m=0, d=0, h=0, mi=0
|
|
for m = 1:12
|
|
for d = 1:Dates.daysinmonth(y, m)
|
|
for h = 0:23
|
|
for mi = 0:59
|
|
dt = Dates.DateTime(y, m, d, h, mi)
|
|
@test y == Dates.year(dt)
|
|
@test m == Dates.month(dt)
|
|
@test d == Dates.day(dt)
|
|
@test d == Dates.dayofmonth(dt)
|
|
@test h == Dates.hour(dt)
|
|
@test mi == Dates.minute(dt)
|
|
@test (m, d) == Dates.monthday(dt)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# Test second, millisecond
|
|
let y=0, m=0, d=0, h=0, mi=0, s=0, ms=0
|
|
for y in [-2013, -1, 0, 1, 2013]
|
|
for m in [1, 6, 12]
|
|
for d in [1, 15, Dates.daysinmonth(y, m)]
|
|
for h in [0, 12, 23]
|
|
for s = 0:59
|
|
for ms in [0, 1, 500, 999]
|
|
dt = Dates.DateTime(y, m, d, h, mi, s, ms)
|
|
@test y == Dates.year(dt)
|
|
@test m == Dates.month(dt)
|
|
@test d == Dates.day(dt)
|
|
@test h == Dates.hour(dt)
|
|
@test s == Dates.second(dt)
|
|
@test ms == Dates.millisecond(dt)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
let from=0, to=2100, y=0, m=0, d=0
|
|
for y in from:to
|
|
for m = 1:12
|
|
for d = 1:Dates.daysinmonth(y, m)
|
|
dt = Dates.Date(y, m, d)
|
|
@test y == Dates.year(dt)
|
|
@test m == Dates.month(dt)
|
|
@test d == Dates.day(dt)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# test hour, minute, second
|
|
let h=0, mi=0, s=0, ms=0, us=0, ns=0
|
|
for h = (0, 23), mi = (0, 59), s = (0, 59),
|
|
ms in (0, 1, 500, 999), us in (0, 1, 500, 999), ns in (0, 1, 500, 999)
|
|
t = Dates.Time(h, mi, s, ms, us, ns)
|
|
@test h == Dates.hour(t)
|
|
@test mi == Dates.minute(t)
|
|
@test s == Dates.second(t)
|
|
@test ms == Dates.millisecond(t)
|
|
@test us == Dates.microsecond(t)
|
|
@test ns == Dates.nanosecond(t)
|
|
end
|
|
end
|
|
|
|
# week function
|
|
# Tests from https://en.wikipedia.org/wiki/ISO_week_date
|
|
@test Dates.week(Dates.Date(2005, 1, 1)) == 53
|
|
@test Dates.week(Dates.Date(2005, 1, 2)) == 53
|
|
@test Dates.week(Dates.Date(2005, 12, 31)) == 52
|
|
@test Dates.week(Dates.Date(2007, 1, 1)) == 1
|
|
@test Dates.week(Dates.Date(2007, 12, 30)) == 52
|
|
@test Dates.week(Dates.Date(2007, 12, 31)) == 1
|
|
@test Dates.week(Dates.Date(2008, 1, 1)) == 1
|
|
@test Dates.week(Dates.Date(2008, 12, 28)) == 52
|
|
@test Dates.week(Dates.Date(2008, 12, 29)) == 1
|
|
@test Dates.week(Dates.Date(2008, 12, 30)) == 1
|
|
@test Dates.week(Dates.Date(2008, 12, 31)) == 1
|
|
@test Dates.week(Dates.Date(2009, 1, 1)) == 1
|
|
@test Dates.week(Dates.Date(2009, 12, 31)) == 53
|
|
@test Dates.week(Dates.Date(2010, 1, 1)) == 53
|
|
@test Dates.week(Dates.Date(2010, 1, 2)) == 53
|
|
@test Dates.week(Dates.Date(2010, 1, 2)) == 53
|
|
# Tests from http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php?year=1999
|
|
dt = Dates.DateTime(1999, 12, 27)
|
|
dt1 = Dates.Date(1999, 12, 27)
|
|
check = (52, 52, 52, 52, 52, 52, 52, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2)
|
|
for i = 1:21
|
|
@test Dates.week(dt) == check[i]
|
|
@test Dates.week(dt1) == check[i]
|
|
dt = dt + Dates.Day(1)
|
|
dt1 = dt1 + Dates.Day(1)
|
|
end
|
|
# Tests from http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php?year=2000
|
|
dt = Dates.DateTime(2000, 12, 25)
|
|
dt1 = Dates.Date(2000, 12, 25)
|
|
for i = 1:21
|
|
@test Dates.week(dt) == check[i]
|
|
@test Dates.week(dt1) == check[i]
|
|
dt = dt + Dates.Day(1)
|
|
dt1 = dt1 + Dates.Day(1)
|
|
end
|
|
# Test from http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php?year=2030
|
|
dt = Dates.DateTime(2030, 12, 23)
|
|
dt1 = Dates.Date(2030, 12, 23)
|
|
for i = 1:21
|
|
@test Dates.week(dt) == check[i]
|
|
@test Dates.week(dt1) == check[i]
|
|
dt = dt + Dates.Day(1)
|
|
dt1 = dt1 + Dates.Day(1)
|
|
end
|
|
# Tests from http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php?year=2004
|
|
dt = Dates.DateTime(2004, 12, 20)
|
|
dt1 = Dates.Date(2004, 12, 20)
|
|
check = (52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 1, 1, 1, 1, 1, 1, 1)
|
|
for i = 1:21
|
|
@test Dates.week(dt) == check[i]
|
|
@test Dates.week(dt1) == check[i]
|
|
dt = dt + Dates.Day(1)
|
|
dt1 = dt1 + Dates.Day(1)
|
|
end
|
|
|
|
# Vectorized accessors
|
|
a = Dates.Date(2014, 1, 1)
|
|
dr = [a, a, a, a, a, a, a, a, a, a]
|
|
@test Dates.year.(dr) == repmat([2014], 10)
|
|
@test Dates.month.(dr) == repmat([1], 10)
|
|
@test Dates.day.(dr) == repmat([1], 10)
|
|
|
|
a = Dates.DateTime(2014, 1, 1)
|
|
dr = [a, a, a, a, a, a, a, a, a, a]
|
|
@test Dates.year.(dr) == repmat([2014], 10)
|
|
@test Dates.month.(dr) == repmat([1], 10)
|
|
@test Dates.day.(dr) == repmat([1], 10)
|
|
@test Dates.hour.(dr) == repmat([0], 10)
|
|
@test Dates.minute.(dr) == repmat([0], 10)
|
|
@test Dates.second.(dr) == repmat([0], 10)
|
|
@test Dates.millisecond.(dr) == repmat([0], 10)
|
|
|
|
b = Dates.Time(1, 2, 3, 4, 5, 6)
|
|
tr = [b, b, b, b, b, b, b, b, b, b]
|
|
@test Dates.hour.(tr) == repmat([1], 10)
|
|
@test Dates.minute.(tr) == repmat([2], 10)
|
|
@test Dates.second.(tr) == repmat([3], 10)
|
|
@test Dates.millisecond.(tr) == repmat([4], 10)
|
|
@test Dates.microsecond.(tr) == repmat([5], 10)
|
|
@test Dates.nanosecond.(tr) == repmat([6], 10)
|