mollusk 0e4acfb8f2 fix incorrect folder name for julia-0.6.x
Former-commit-id: ef2c7401e0876f22d2f7762d182cfbcd5a7d9c70
2018-06-11 03:28:36 -07:00

142 lines
7.5 KiB
Julia

# This file is a part of Julia. License is MIT: https://julialang.org/license
# Test conversion to and from the rounding epoch (ISO 8601 year 0000)
@test Dates.epochdays2date(-1) == Dates.Date(-1, 12, 31)
@test Dates.epochdays2date(0) == Dates.Date(0, 1, 1)
@test Dates.epochdays2date(1) == Dates.Date(0, 1, 2)
@test Dates.epochdays2date(736329) == Dates.Date(2016, 1, 1)
@test Dates.epochms2datetime(-86400000) == Dates.DateTime(-1, 12, 31)
@test Dates.epochms2datetime(0) == Dates.DateTime(0, 1, 1)
@test Dates.epochms2datetime(86400000) == Dates.DateTime(0, 1, 2)
@test Dates.epochms2datetime(Int64(736329) * 86400000) == Dates.DateTime(2016, 1, 1)
@test Dates.date2epochdays(Dates.Date(-1, 12, 31)) == -1
@test Dates.date2epochdays(Dates.Date(0, 1, 1)) == 0
@test Dates.date2epochdays(Dates.Date(2016, 1, 1)) == 736329
@test Dates.datetime2epochms(Dates.DateTime(-1, 12, 31)) == -86400000
@test Dates.datetime2epochms(Dates.DateTime(0, 1, 1)) == 0
@test Dates.datetime2epochms(Dates.DateTime(2016, 1, 1)) == Int64(736329) * 86400000
# Basic rounding tests
dt = Dates.Date(2016, 2, 28) # Sunday
@test floor(dt, Dates.Year) == Dates.Date(2016)
@test floor(dt, Dates.Year(5)) == Dates.Date(2015)
@test floor(dt, Dates.Year(10)) == Dates.Date(2010)
@test floor(dt, Dates.Month) == Dates.Date(2016, 2)
@test floor(dt, Dates.Month(6)) == Dates.Date(2016, 1)
@test floor(dt, Dates.Week) == Dates.toprev(dt, Dates.Monday)
@test ceil(dt, Dates.Year) == Dates.Date(2017)
@test ceil(dt, Dates.Year(5)) == Dates.Date(2020)
@test ceil(dt, Dates.Month) == Dates.Date(2016, 3)
@test ceil(dt, Dates.Month(6)) == Dates.Date(2016, 7)
@test ceil(dt, Dates.Week) == Dates.tonext(dt, Dates.Monday)
@test round(dt, Dates.Year) == Dates.Date(2016)
@test round(dt, Dates.Month) == Dates.Date(2016, 3)
@test round(dt, Dates.Week) == Dates.Date(2016, 2, 29)
dt = Dates.DateTime(2016, 2, 28, 15, 10, 50, 500)
@test floor(dt, Dates.Day) == Dates.DateTime(2016, 2, 28)
@test floor(dt, Dates.Hour) == Dates.DateTime(2016, 2, 28, 15)
@test floor(dt, Dates.Hour(2)) == Dates.DateTime(2016, 2, 28, 14)
@test floor(dt, Dates.Hour(12)) == Dates.DateTime(2016, 2, 28, 12)
@test floor(dt, Dates.Minute) == Dates.DateTime(2016, 2, 28, 15, 10)
@test floor(dt, Dates.Minute(15)) == Dates.DateTime(2016, 2, 28, 15, 0)
@test floor(dt, Dates.Second) == Dates.DateTime(2016, 2, 28, 15, 10, 50)
@test floor(dt, Dates.Second(30)) == Dates.DateTime(2016, 2, 28, 15, 10, 30)
@test ceil(dt, Dates.Day) == Dates.DateTime(2016, 2, 29)
@test ceil(dt, Dates.Hour) == Dates.DateTime(2016, 2, 28, 16)
@test ceil(dt, Dates.Hour(2)) == Dates.DateTime(2016, 2, 28, 16)
@test ceil(dt, Dates.Hour(12)) == Dates.DateTime(2016, 2, 29, 0)
@test ceil(dt, Dates.Minute) == Dates.DateTime(2016, 2, 28, 15, 11)
@test ceil(dt, Dates.Minute(15)) == Dates.DateTime(2016, 2, 28, 15, 15)
@test ceil(dt, Dates.Second) == Dates.DateTime(2016, 2, 28, 15, 10, 51)
@test ceil(dt, Dates.Second(30)) == Dates.DateTime(2016, 2, 28, 15, 11, 0)
@test round(dt, Dates.Day) == Dates.DateTime(2016, 2, 29)
@test round(dt, Dates.Hour) == Dates.DateTime(2016, 2, 28, 15)
@test round(dt, Dates.Hour(2)) == Dates.DateTime(2016, 2, 28, 16)
@test round(dt, Dates.Hour(12)) == Dates.DateTime(2016, 2, 28, 12)
@test round(dt, Dates.Minute) == Dates.DateTime(2016, 2, 28, 15, 11)
@test round(dt, Dates.Minute(15)) == Dates.DateTime(2016, 2, 28, 15, 15)
@test round(dt, Dates.Second) == Dates.DateTime(2016, 2, 28, 15, 10, 51)
@test round(dt, Dates.Second(30)) == Dates.DateTime(2016, 2, 28, 15, 11, 0)
# Rounding for dates at the rounding epoch (year 0000)
dt = Dates.DateTime(0)
@test floor(dt, Dates.Year) == dt
@test floor(dt, Dates.Month) == dt
@test floor(dt, Dates.Week) == Dates.Date(-1, 12, 27) # Monday prior to 0000-01-01
@test floor(Dates.Date(-1, 12, 27), Dates.Week) == Dates.Date(-1, 12, 27)
@test floor(dt, Dates.Day) == dt
@test floor(dt, Dates.Hour) == dt
@test floor(dt, Dates.Minute) == dt
@test floor(dt, Dates.Second) == dt
@test ceil(dt, Dates.Year) == dt
@test ceil(dt, Dates.Month) == dt
@test ceil(dt, Dates.Week) == Dates.Date(0, 1, 3) # Monday following 0000-01-01
@test ceil(Dates.Date(0, 1, 3), Dates.Week) == Dates.Date(0, 1, 3)
@test ceil(dt, Dates.Day) == dt
@test ceil(dt, Dates.Hour) == dt
@test ceil(dt, Dates.Minute) == dt
@test ceil(dt, Dates.Second) == dt
# Test rounding for multiples of a period (easiest to test close to rounding epoch)
dt = Dates.DateTime(0, 1, 19, 19, 19, 19, 19)
@test floor(dt, Dates.Year(2)) == DateTime(0)
@test floor(dt, Dates.Month(2)) == DateTime(0, 1) # Odd number; months are 1-indexed
@test floor(dt, Dates.Week(2)) == DateTime(0, 1, 17) # Third Monday of 0000
@test floor(dt, Dates.Day(2)) == DateTime(0, 1, 19) # Odd number; days are 1-indexed
@test floor(dt, Dates.Hour(2)) == DateTime(0, 1, 19, 18)
@test floor(dt, Dates.Minute(2)) == DateTime(0, 1, 19, 19, 18)
@test floor(dt, Dates.Second(2)) == DateTime(0, 1, 19, 19, 19, 18)
@test ceil(dt, Dates.Year(2)) == DateTime(2)
@test ceil(dt, Dates.Month(2)) == DateTime(0, 3) # Odd number; months are 1-indexed
@test ceil(dt, Dates.Week(2)) == DateTime(0, 1, 31) # Fifth Monday of 0000
@test ceil(dt, Dates.Day(2)) == DateTime(0, 1, 21) # Odd number; days are 1-indexed
@test ceil(dt, Dates.Hour(2)) == DateTime(0, 1, 19, 20)
@test ceil(dt, Dates.Minute(2)) == DateTime(0, 1, 19, 19, 20)
@test ceil(dt, Dates.Second(2)) == DateTime(0, 1, 19, 19, 19, 20)
# Test rounding for dates with negative years
dt = Dates.DateTime(-1, 12, 29, 19, 19, 19, 19)
@test floor(dt, Dates.Year(2)) == DateTime(-2)
@test floor(dt, Dates.Month(2)) == DateTime(-1, 11) # Odd number; months are 1-indexed
@test floor(dt, Dates.Week(2)) == DateTime(-1, 12, 20) # 2 weeks prior to 0000-01-03
@test floor(dt, Dates.Day(2)) == DateTime(-1, 12, 28) # Even; 4 days prior to 0000-01-01
@test floor(dt, Dates.Hour(2)) == DateTime(-1, 12, 29, 18)
@test floor(dt, Dates.Minute(2)) == DateTime(-1, 12, 29, 19, 18)
@test floor(dt, Dates.Second(2)) == DateTime(-1, 12, 29, 19, 19, 18)
@test ceil(dt, Dates.Year(2)) == DateTime(0)
@test ceil(dt, Dates.Month(2)) == DateTime(0, 1) # Odd number; months are 1-indexed
@test ceil(dt, Dates.Week(2)) == DateTime(0, 1, 3) # First Monday of 0000
@test ceil(dt, Dates.Day(2)) == DateTime(-1, 12, 30) # Even; 2 days prior to 0000-01-01
@test ceil(dt, Dates.Hour(2)) == DateTime(-1, 12, 29, 20)
@test ceil(dt, Dates.Minute(2)) == DateTime(-1, 12, 29, 19, 20)
@test ceil(dt, Dates.Second(2)) == DateTime(-1, 12, 29, 19, 19, 20)
# Test rounding for dates that should not need rounding
for dt in [Dates.DateTime(2016, 1, 1), Dates.DateTime(-2016, 1, 1)]
for p in [Dates.Year, Dates.Month, Dates.Day, Dates.Hour, Dates.Minute, Dates.Second]
@test floor(dt, p) == dt
@test ceil(dt, p) == dt
end
end
# Test available RoundingModes
dt = Dates.DateTime(2016, 2, 28, 12)
@test round(dt, Dates.Day, RoundNearestTiesUp) == Dates.DateTime(2016, 2, 29)
@test round(dt, Dates.Day, RoundUp) == Dates.DateTime(2016, 2, 29)
@test round(dt, Dates.Day, RoundDown) == Dates.DateTime(2016, 2, 28)
@test_throws DomainError round(dt, Dates.Day, RoundNearest)
@test_throws DomainError round(dt, Dates.Day, RoundNearestTiesAway)
@test_throws DomainError round(dt, Dates.Day, RoundToZero)
@test round(dt, Dates.Day) == round(dt, Dates.Day, RoundNearestTiesUp)
# Test rounding to invalid resolutions
dt = Dates.DateTime(2016, 2, 28, 12, 15)
for p in [Dates.Year, Dates.Month, Dates.Week, Dates.Day, Dates.Hour]
for v in [-1, 0]
@test_throws DomainError floor(dt, p(v))
@test_throws DomainError ceil(dt, p(v))
@test_throws DomainError round(dt, p(v))
end
end