From 94aa9019e18288fd4cda9820668066e16e0f36fe Mon Sep 17 00:00:00 2001 From: quinnj Date: Tue, 24 Jan 2017 18:24:30 -0700 Subject: [PATCH] Remove commutative subtraction methods. Fixes #20205 --- base/dates/arithmetic.jl | 78 ++--- base/dates/ranges.jl | 36 +- test/dates/arithmetic.jl | 713 +++++++++++++++++++-------------------- 3 files changed, 409 insertions(+), 418 deletions(-) diff --git a/base/dates/arithmetic.jl b/base/dates/arithmetic.jl index 845268f19e27a..09c8d162dcc24 100644 --- a/base/dates/arithmetic.jl +++ b/base/dates/arithmetic.jl @@ -2,11 +2,11 @@ # Instant arithmetic (+)(x::Instant) = x -(-){T<:Instant}(x::T,y::T) = x.periods - y.periods +(-){T<:Instant}(x::T, y::T) = x.periods - y.periods # TimeType arithmetic (+)(x::TimeType) = x -(-){T<:TimeType}(x::T,y::T) = x.instant - y.instant +(-){T<:TimeType}(x::T, y::T) = x.instant - y.instant # Date-Time arithmetic """ @@ -24,56 +24,56 @@ end (+)(t::Time, dt::Date) = dt + t # TimeType-Year arithmetic -function (+)(dt::DateTime,y::Year) - oy,m,d = yearmonthday(dt); ny = oy+value(y); ld = daysinmonth(ny,m) - return DateTime(ny,m,d <= ld ? d : ld,hour(dt),minute(dt),second(dt),millisecond(dt)) +function (+)(dt::DateTime, y::Year) + oy, m, d = yearmonthday(dt); ny = oy + value(y); ld = daysinmonth(ny, m) + return DateTime(ny, m, d <= ld ? d : ld, hour(dt), minute(dt), second(dt), millisecond(dt)) end function (+)(dt::Date,y::Year) - oy,m,d = yearmonthday(dt); ny = oy+value(y); ld = daysinmonth(ny,m) - return Date(ny,m,d <= ld ? d : ld) + oy, m, d = yearmonthday(dt); ny = oy + value(y); ld = daysinmonth(ny, m) + return Date(ny, m, d <= ld ? d : ld) end function (-)(dt::DateTime,y::Year) - oy,m,d = yearmonthday(dt); ny = oy-value(y); ld = daysinmonth(ny,m) - return DateTime(ny,m,d <= ld ? d : ld,hour(dt),minute(dt),second(dt),millisecond(dt)) + oy, m, d = yearmonthday(dt); ny = oy - value(y); ld = daysinmonth(ny, m) + return DateTime(ny, m, d <= ld ? d : ld, hour(dt), minute(dt), second(dt), millisecond(dt)) end function (-)(dt::Date,y::Year) - oy,m,d = yearmonthday(dt); ny = oy-value(y); ld = daysinmonth(ny,m) - return Date(ny,m,d <= ld ? d : ld) + oy, m, d = yearmonthday(dt); ny = oy - value(y); ld = daysinmonth(ny, m) + return Date(ny, m, d <= ld ? d : ld) end # TimeType-Month arithmetic # monthwrap adds two months with wraparound behavior (i.e. 12 + 1 == 1) -monthwrap(m1,m2) = (v = mod1(m1+m2,12); return v < 0 ? 12 + v : v) +monthwrap(m1, m2) = (v = mod1(m1 + m2, 12); return v < 0 ? 12 + v : v) # yearwrap takes a starting year/month and a month to add and returns # the resulting year with wraparound behavior (i.e. 2000-12 + 1 == 2001) -yearwrap(y,m1,m2) = y + fld(m1 + m2 - 1,12) +yearwrap(y, m1, m2) = y + fld(m1 + m2 - 1, 12) -function (+)(dt::DateTime,z::Month) +function (+)(dt::DateTime, z::Month) y,m,d = yearmonthday(dt) - ny = yearwrap(y,m,value(z)) - mm = monthwrap(m,value(z)); ld = daysinmonth(ny,mm) - return DateTime(ny,mm,d <= ld ? d : ld,hour(dt),minute(dt),second(dt),millisecond(dt)) + ny = yearwrap(y, m, value(z)) + mm = monthwrap(m, value(z)); ld = daysinmonth(ny, mm) + return DateTime(ny, mm, d <= ld ? d : ld, hour(dt), minute(dt), second(dt), millisecond(dt)) end -function (+)(dt::Date,z::Month) +function (+)(dt::Date, z::Month) y,m,d = yearmonthday(dt) - ny = yearwrap(y,m,value(z)) - mm = monthwrap(m,value(z)); ld = daysinmonth(ny,mm) - return Date(ny,mm,d <= ld ? d : ld) + ny = yearwrap(y, m, value(z)) + mm = monthwrap(m, value(z)); ld = daysinmonth(ny, mm) + return Date(ny, mm, d <= ld ? d : ld) end -function (-)(dt::DateTime,z::Month) +function (-)(dt::DateTime, z::Month) y,m,d = yearmonthday(dt) - ny = yearwrap(y,m,-value(z)) - mm = monthwrap(m,-value(z)); ld = daysinmonth(ny,mm) - return DateTime(ny,mm,d <= ld ? d : ld,hour(dt),minute(dt),second(dt),millisecond(dt)) + ny = yearwrap(y, m, -value(z)) + mm = monthwrap(m, -value(z)); ld = daysinmonth(ny, mm) + return DateTime(ny, mm, d <= ld ? d : ld, hour(dt), minute(dt), second(dt), millisecond(dt)) end -function (-)(dt::Date,z::Month) +function (-)(dt::Date, z::Month) y,m,d = yearmonthday(dt) - ny = yearwrap(y,m,-value(z)) - mm = monthwrap(m,-value(z)); ld = daysinmonth(ny,mm) - return Date(ny,mm,d <= ld ? d : ld) + ny = yearwrap(y, m, -value(z)) + mm = monthwrap(m, -value(z)); ld = daysinmonth(ny, mm) + return Date(ny, mm, d <= ld ? d : ld) end -(+)(x::Date, y::Week) = return Date(UTD(value(x) + 7*value(y))) -(-)(x::Date, y::Week) = return Date(UTD(value(x) - 7*value(y))) +(+)(x::Date, y::Week) = return Date(UTD(value(x) + 7 * value(y))) +(-)(x::Date, y::Week) = return Date(UTD(value(x) - 7 * value(y))) (+)(x::Date, y::Day) = return Date(UTD(value(x) + value(y))) (-)(x::Date, y::Day) = return Date(UTD(value(x) - value(y))) (+)(x::DateTime, y::Period) = return DateTime(UTM(value(x) + toms(y))) @@ -81,17 +81,17 @@ end (+)(x::Time, y::TimePeriod) = return Time(Nanosecond(value(x) + tons(y))) (-)(x::Time, y::TimePeriod) = return Time(Nanosecond(value(x) - tons(y))) (+)(y::Period, x::TimeType) = x + y -(-)(y::Period, x::TimeType) = x - y for op in (:+, :-) @eval begin - # GeneralPeriod, AbstractArray{TimeType} - ($op){T<:TimeType}(x::AbstractArray{T}, y::GeneralPeriod) = broadcast($op,x,y) - ($op){T<:TimeType}(y::GeneralPeriod, x::AbstractArray{T}) = broadcast($op,x,y) - - # TimeType, StridedArray{GeneralPeriod} - ($op){T<:TimeType,P<:GeneralPeriod}(x::StridedArray{P}, y::T) = broadcast($op,x,y) - ($op){P<:GeneralPeriod}(y::TimeType, x::StridedArray{P}) = broadcast($op,x,y) + ($op){T<:TimeType}(x::AbstractArray{T}, y::GeneralPeriod) = broadcast($op, x, y) + ($op){P<:GeneralPeriod}(y::TimeType, x::StridedArray{P}) = broadcast($op, x, y) + end + if op == :+ + @eval begin + ($op){T<:TimeType}(y::GeneralPeriod, x::AbstractArray{T}) = broadcast($op, x, y) + ($op){T<:TimeType,P<:GeneralPeriod}(x::StridedArray{P}, y::T) = broadcast($op, x, y) + end end end diff --git a/base/dates/ranges.jl b/base/dates/ranges.jl index 92fb4868aaad3..60625055e2e49 100644 --- a/base/dates/ranges.jl +++ b/base/dates/ranges.jl @@ -14,35 +14,35 @@ Base.range(start::Date, len::Integer) = range(start, Day(1), len) throw(ArgumentError("must specify step as a Period when constructing Dates ranges")) # Given a start and end date, how many steps/periods are in between -guess(a::DateTime,b::DateTime,c) = floor(Int64,(Int128(value(b)) - Int128(value(a)))/toms(c)) -guess(a::Date,b::Date,c) = Int64(div(value(b - a),days(c))) -len(a::Time,b::Time,c) = Int64(div(value(b - a), tons(c))) -function len(a,b,c) - lo, hi, st = min(a,b), max(a,b), abs(c) - i = guess(a,b,c)-1 - while lo+st*i <= hi +guess(a::DateTime, b::DateTime, c) = floor(Int64, (Int128(value(b)) - Int128(value(a))) / toms(c)) +guess(a::Date, b::Date, c) = Int64(div(value(b - a), days(c))) +len(a::Time, b::Time, c) = Int64(div(value(b - a), tons(c))) +function len(a, b, c) + lo, hi, st = min(a, b), max(a, b), abs(c) + i = guess(a, b, c) - 1 + while lo + st * i <= hi i += 1 end - return i-1 + return i - 1 end -Base.length{T<:TimeType}(r::StepRange{T}) = isempty(r) ? 0 : len(r.start,r.stop,r.step) + 1 +Base.length{T<:TimeType}(r::StepRange{T}) = isempty(r) ? 0 : len(r.start, r.stop, r.step) + 1 # Period ranges hook into Int64 overflow detection -Base.length{P<:Period}(r::StepRange{P}) = length(StepRange(value(r.start),value(r.step),value(r.stop))) +Base.length{P<:Period}(r::StepRange{P}) = length(StepRange(value(r.start), value(r.step), value(r.stop))) # Used to calculate the last valid date in the range given the start, stop, and step -# last = stop - steprem(start,stop,step) -Base.steprem{T<:TimeType}(a::T,b::T,c) = b - (a + c*len(a,b,c)) +# last = stop - steprem(start, stop, step) +Base.steprem{T<:TimeType}(a::T, b::T, c) = b - (a + c * len(a, b, c)) import Base.in function in{T<:TimeType}(x::T, r::StepRange{T}) - n = len(first(r),x,step(r)) + 1 + n = len(first(r), x, step(r)) + 1 n >= 1 && n <= length(r) && r[n] == x end Base.start{T<:TimeType}(r::StepRange{T}) = 0 -Base.next{T<:TimeType}(r::StepRange{T}, i::Int) = (r.start+r.step*i,i+1) -Base.done{T<:TimeType,S<:Period}(r::StepRange{T,S}, i::Integer) = length(r) <= i +Base.next{T<:TimeType}(r::StepRange{T}, i::Int) = (r.start + r.step*i, i + 1) +Base.done{T<:TimeType, S<:Period}(r::StepRange{T, S}, i::Integer) = length(r) <= i -+{T<:TimeType}(x::Period, r::Range{T}) = (x+first(r)):step(r):(x+last(r)) -+{T<:TimeType}(r::Range{T},x::Period) = x + r --{T<:TimeType}(r::Range{T},x::Period) = (first(r)-x):step(r):(last(r)-x) ++{T<:TimeType}(x::Period, r::Range{T}) = (x + first(r)):step(r):(x + last(r)) ++{T<:TimeType}(r::Range{T}, x::Period) = x + r +-{T<:TimeType}(r::Range{T}, x::Period) = (first(r)-x):step(r):(last(r)-x) \ No newline at end of file diff --git a/test/dates/arithmetic.jl b/test/dates/arithmetic.jl index 961b2f031406f..61b39509c7e5b 100644 --- a/test/dates/arithmetic.jl +++ b/test/dates/arithmetic.jl @@ -1,372 +1,372 @@ # This file is a part of Julia. License is MIT: http://julialang.org/license # Time arithmetic -a = Dates.Time(23,59,59) -b = Dates.Time(11,59,59) +a = Dates.Time(23, 59, 59) +b = Dates.Time(11, 59, 59) @test Dates.CompoundPeriod(a - b) == Dates.Hour(12) # Dates.DateTime arithmetic -a = Dates.DateTime(2013,1,1,0,0,0,1) -b = Dates.DateTime(2013,1,1,0,0,0,0) +a = Dates.DateTime(2013, 1, 1, 0, 0, 0, 1) +b = Dates.DateTime(2013, 1, 1, 0, 0, 0, 0) @test a - b == Dates.Millisecond(1) -@test Dates.DateTime(2013,1,2) - b == Dates.Millisecond(86400000) +@test Dates.DateTime(2013, 1, 2) - b == Dates.Millisecond(86400000) # Dates.DateTime-Year arithmetic -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Year(1) == Dates.DateTime(2000,12,27) -@test dt + Dates.Year(100) == Dates.DateTime(2099,12,27) -@test dt + Dates.Year(1000) == Dates.DateTime(2999,12,27) -@test dt - Dates.Year(1) == Dates.DateTime(1998,12,27) -@test dt - Dates.Year(100) == Dates.DateTime(1899,12,27) -@test dt - Dates.Year(1000) == Dates.DateTime(999,12,27) -dt = Dates.DateTime(2000,2,29) -@test dt + Dates.Year(1) == Dates.DateTime(2001,2,28) -@test dt - Dates.Year(1) == Dates.DateTime(1999,2,28) -@test dt + Dates.Year(4) == Dates.DateTime(2004,2,29) -@test dt - Dates.Year(4) == Dates.DateTime(1996,2,29) -dt = Dates.DateTime(1972,6,30,23,59,59) -@test dt + Dates.Year(1) == Dates.DateTime(1973,6,30,23,59,59) -@test dt - Dates.Year(1) == Dates.DateTime(1971,6,30,23,59,59) -@test dt + Dates.Year(-1) == Dates.DateTime(1971,6,30,23,59,59) -@test dt - Dates.Year(-1) == Dates.DateTime(1973,6,30,23,59,59) +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Year(1) == Dates.DateTime(2000, 12, 27) +@test dt + Dates.Year(100) == Dates.DateTime(2099, 12, 27) +@test dt + Dates.Year(1000) == Dates.DateTime(2999, 12, 27) +@test dt - Dates.Year(1) == Dates.DateTime(1998, 12, 27) +@test dt - Dates.Year(100) == Dates.DateTime(1899, 12, 27) +@test dt - Dates.Year(1000) == Dates.DateTime(999, 12, 27) +dt = Dates.DateTime(2000, 2, 29) +@test dt + Dates.Year(1) == Dates.DateTime(2001, 2, 28) +@test dt - Dates.Year(1) == Dates.DateTime(1999, 2, 28) +@test dt + Dates.Year(4) == Dates.DateTime(2004, 2, 29) +@test dt - Dates.Year(4) == Dates.DateTime(1996, 2, 29) +dt = Dates.DateTime(1972, 6, 30, 23, 59, 59) +@test dt + Dates.Year(1) == Dates.DateTime(1973, 6, 30, 23, 59, 59) +@test dt - Dates.Year(1) == Dates.DateTime(1971, 6, 30, 23, 59, 59) +@test dt + Dates.Year(-1) == Dates.DateTime(1971, 6, 30, 23, 59, 59) +@test dt - Dates.Year(-1) == Dates.DateTime(1973, 6, 30, 23, 59, 59) # Wrapping arithemtic for Months # This ends up being trickier than expected because # the user might do 2014-01-01 + Month(-14) # monthwrap figures out the resulting month # when adding/subtracting months from a date -@test Dates.monthwrap(1,-14) == 11 -@test Dates.monthwrap(1,-13) == 12 -@test Dates.monthwrap(1,-12) == 1 -@test Dates.monthwrap(1,-11) == 2 -@test Dates.monthwrap(1,-10) == 3 -@test Dates.monthwrap(1,-9) == 4 -@test Dates.monthwrap(1,-8) == 5 -@test Dates.monthwrap(1,-7) == 6 -@test Dates.monthwrap(1,-6) == 7 -@test Dates.monthwrap(1,-5) == 8 -@test Dates.monthwrap(1,-4) == 9 -@test Dates.monthwrap(1,-3) == 10 -@test Dates.monthwrap(1,-2) == 11 -@test Dates.monthwrap(1,-1) == 12 -@test Dates.monthwrap(1,0) == 1 -@test Dates.monthwrap(1,1) == 2 -@test Dates.monthwrap(1,2) == 3 -@test Dates.monthwrap(1,3) == 4 -@test Dates.monthwrap(1,4) == 5 -@test Dates.monthwrap(1,5) == 6 -@test Dates.monthwrap(1,6) == 7 -@test Dates.monthwrap(1,7) == 8 -@test Dates.monthwrap(1,8) == 9 -@test Dates.monthwrap(1,9) == 10 -@test Dates.monthwrap(1,10) == 11 -@test Dates.monthwrap(1,11) == 12 -@test Dates.monthwrap(1,12) == 1 -@test Dates.monthwrap(1,13) == 2 -@test Dates.monthwrap(1,24) == 1 -@test Dates.monthwrap(12,-14) == 10 -@test Dates.monthwrap(12,-13) == 11 -@test Dates.monthwrap(12,-12) == 12 -@test Dates.monthwrap(12,-11) == 1 -@test Dates.monthwrap(12,-2) == 10 -@test Dates.monthwrap(12,-1) == 11 -@test Dates.monthwrap(12,0) == 12 -@test Dates.monthwrap(12,1) == 1 -@test Dates.monthwrap(12,2) == 2 -@test Dates.monthwrap(12,11) == 11 -@test Dates.monthwrap(12,12) == 12 -@test Dates.monthwrap(12,13) == 1 +@test Dates.monthwrap(1, -14) == 11 +@test Dates.monthwrap(1, -13) == 12 +@test Dates.monthwrap(1, -12) == 1 +@test Dates.monthwrap(1, -11) == 2 +@test Dates.monthwrap(1, -10) == 3 +@test Dates.monthwrap(1, -9) == 4 +@test Dates.monthwrap(1, -8) == 5 +@test Dates.monthwrap(1, -7) == 6 +@test Dates.monthwrap(1, -6) == 7 +@test Dates.monthwrap(1, -5) == 8 +@test Dates.monthwrap(1, -4) == 9 +@test Dates.monthwrap(1, -3) == 10 +@test Dates.monthwrap(1, -2) == 11 +@test Dates.monthwrap(1, -1) == 12 +@test Dates.monthwrap(1, 0) == 1 +@test Dates.monthwrap(1, 1) == 2 +@test Dates.monthwrap(1, 2) == 3 +@test Dates.monthwrap(1, 3) == 4 +@test Dates.monthwrap(1, 4) == 5 +@test Dates.monthwrap(1, 5) == 6 +@test Dates.monthwrap(1, 6) == 7 +@test Dates.monthwrap(1, 7) == 8 +@test Dates.monthwrap(1, 8) == 9 +@test Dates.monthwrap(1, 9) == 10 +@test Dates.monthwrap(1, 10) == 11 +@test Dates.monthwrap(1, 11) == 12 +@test Dates.monthwrap(1, 12) == 1 +@test Dates.monthwrap(1, 13) == 2 +@test Dates.monthwrap(1, 24) == 1 +@test Dates.monthwrap(12, -14) == 10 +@test Dates.monthwrap(12, -13) == 11 +@test Dates.monthwrap(12, -12) == 12 +@test Dates.monthwrap(12, -11) == 1 +@test Dates.monthwrap(12, -2) == 10 +@test Dates.monthwrap(12, -1) == 11 +@test Dates.monthwrap(12, 0) == 12 +@test Dates.monthwrap(12, 1) == 1 +@test Dates.monthwrap(12, 2) == 2 +@test Dates.monthwrap(12, 11) == 11 +@test Dates.monthwrap(12, 12) == 12 +@test Dates.monthwrap(12, 13) == 1 # yearwrap figures out the resulting year # when adding/subtracting months from a date -@test Dates.yearwrap(2000,1,-3600) == 1700 -@test Dates.yearwrap(2000,1,-37) == 1996 -@test Dates.yearwrap(2000,1,-36) == 1997 -@test Dates.yearwrap(2000,1,-35) == 1997 -@test Dates.yearwrap(2000,1,-25) == 1997 -@test Dates.yearwrap(2000,1,-24) == 1998 -@test Dates.yearwrap(2000,1,-23) == 1998 -@test Dates.yearwrap(2000,1,-14) == 1998 -@test Dates.yearwrap(2000,1,-13) == 1998 -@test Dates.yearwrap(2000,1,-12) == 1999 -@test Dates.yearwrap(2000,1,-11) == 1999 -@test Dates.yearwrap(2000,1,-2) == 1999 -@test Dates.yearwrap(2000,1,-1) == 1999 -@test Dates.yearwrap(2000,1,0) == 2000 -@test Dates.yearwrap(2000,1,1) == 2000 -@test Dates.yearwrap(2000,1,11) == 2000 -@test Dates.yearwrap(2000,1,12) == 2001 -@test Dates.yearwrap(2000,1,13) == 2001 -@test Dates.yearwrap(2000,1,23) == 2001 -@test Dates.yearwrap(2000,1,24) == 2002 -@test Dates.yearwrap(2000,1,25) == 2002 -@test Dates.yearwrap(2000,1,36) == 2003 -@test Dates.yearwrap(2000,1,3600) == 2300 -@test Dates.yearwrap(2000,2,-2) == 1999 -@test Dates.yearwrap(2000,3,10) == 2001 -@test Dates.yearwrap(2000,4,-4) == 1999 -@test Dates.yearwrap(2000,5,8) == 2001 -@test Dates.yearwrap(2000,6,-18) == 1998 -@test Dates.yearwrap(2000,6,-6) == 1999 -@test Dates.yearwrap(2000,6,6) == 2000 -@test Dates.yearwrap(2000,6,7) == 2001 -@test Dates.yearwrap(2000,6,19) == 2002 -@test Dates.yearwrap(2000,12,-3600) == 1700 -@test Dates.yearwrap(2000,12,-36) == 1997 -@test Dates.yearwrap(2000,12,-35) == 1998 -@test Dates.yearwrap(2000,12,-24) == 1998 -@test Dates.yearwrap(2000,12,-23) == 1999 -@test Dates.yearwrap(2000,12,-14) == 1999 -@test Dates.yearwrap(2000,12,-13) == 1999 -@test Dates.yearwrap(2000,12,-12) == 1999 -@test Dates.yearwrap(2000,12,-11) == 2000 -@test Dates.yearwrap(2000,12,-2) == 2000 -@test Dates.yearwrap(2000,12,-1) == 2000 -@test Dates.yearwrap(2000,12,0) == 2000 -@test Dates.yearwrap(2000,12,1) == 2001 -@test Dates.yearwrap(2000,12,11) == 2001 -@test Dates.yearwrap(2000,12,12) == 2001 -@test Dates.yearwrap(2000,12,13) == 2002 -@test Dates.yearwrap(2000,12,24) == 2002 -@test Dates.yearwrap(2000,12,25) == 2003 -@test Dates.yearwrap(2000,12,36) == 2003 -@test Dates.yearwrap(2000,12,37) == 2004 -@test Dates.yearwrap(2000,12,3600) == 2300 - -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Month(1) == Dates.DateTime(2000,1,27) -@test dt + Dates.Month(-1) == Dates.DateTime(1999,11,27) -@test dt + Dates.Month(-11) == Dates.DateTime(1999,1,27) -@test dt + Dates.Month(11) == Dates.DateTime(2000,11,27) -@test dt + Dates.Month(-12) == Dates.DateTime(1998,12,27) -@test dt + Dates.Month(12) == Dates.DateTime(2000,12,27) -@test dt + Dates.Month(13) == Dates.DateTime(2001,1,27) -@test dt + Dates.Month(100) == Dates.DateTime(2008,4,27) -@test dt + Dates.Month(1000) == Dates.DateTime(2083,4,27) -@test dt - Dates.Month(1) == Dates.DateTime(1999,11,27) -@test dt - Dates.Month(-1) == Dates.DateTime(2000,1,27) -@test dt - Dates.Month(100) == Dates.DateTime(1991,8,27) -@test dt - Dates.Month(1000) == Dates.DateTime(1916,8,27) -dt = Dates.DateTime(2000,2,29) -@test dt + Dates.Month(1) == Dates.DateTime(2000,3,29) -@test dt - Dates.Month(1) == Dates.DateTime(2000,1,29) -dt = Dates.DateTime(1972,6,30,23,59,59) -@test dt + Dates.Month(1) == Dates.DateTime(1972,7,30,23,59,59) -@test dt - Dates.Month(1) == Dates.DateTime(1972,5,30,23,59,59) -@test dt + Dates.Month(-1) == Dates.DateTime(1972,5,30,23,59,59) - -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Week(1) == Dates.DateTime(2000,1,3) -@test dt + Dates.Week(100) == Dates.DateTime(2001,11,26) -@test dt + Dates.Week(1000) == Dates.DateTime(2019,2,25) -@test dt - Dates.Week(1) == Dates.DateTime(1999,12,20) -@test dt - Dates.Week(100) == Dates.DateTime(1998,1,26) -@test dt - Dates.Week(1000) == Dates.DateTime(1980,10,27) -dt = Dates.DateTime(2000,2,29) -@test dt + Dates.Week(1) == Dates.DateTime(2000,3,7) -@test dt - Dates.Week(1) == Dates.DateTime(2000,2,22) -dt = Dates.DateTime(1972,6,30,23,59,59) -@test dt + Dates.Week(1) == Dates.DateTime(1972,7,7,23,59,59) -@test dt - Dates.Week(1) == Dates.DateTime(1972,6,23,23,59,59) -@test dt + Dates.Week(-1) == Dates.DateTime(1972,6,23,23,59,59) - -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Day(1) == Dates.DateTime(1999,12,28) -@test dt + Dates.Day(100) == Dates.DateTime(2000,4,5) -@test dt + Dates.Day(1000) == Dates.DateTime(2002,9,22) -@test dt - Dates.Day(1) == Dates.DateTime(1999,12,26) -@test dt - Dates.Day(100) == Dates.DateTime(1999,9,18) -@test dt - Dates.Day(1000) == Dates.DateTime(1997,4,1) -dt = Dates.DateTime(1972,6,30,23,59,59) -@test dt + Dates.Day(1) == Dates.DateTime(1972,7,1,23,59,59) -@test dt - Dates.Day(1) == Dates.DateTime(1972,6,29,23,59,59) -@test dt + Dates.Day(-1) == Dates.DateTime(1972,6,29,23,59,59) - -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Hour(1) == Dates.DateTime(1999,12,27,1) -@test dt + Dates.Hour(100) == Dates.DateTime(1999,12,31,4) -@test dt + Dates.Hour(1000) == Dates.DateTime(2000,2,6,16) -@test dt - Dates.Hour(1) == Dates.DateTime(1999,12,26,23) -@test dt - Dates.Hour(100) == Dates.DateTime(1999,12,22,20) -@test dt - Dates.Hour(1000) == Dates.DateTime(1999,11,15,8) -dt = Dates.DateTime(1972,6,30,23,59,59) -@test dt + Dates.Hour(1) == Dates.DateTime(1972,7,1,0,59,59) -@test dt - Dates.Hour(1) == Dates.DateTime(1972,6,30,22,59,59) -@test dt + Dates.Hour(-1) == Dates.DateTime(1972,6,30,22,59,59) - -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Minute(1) == Dates.DateTime(1999,12,27,0,1) -@test dt + Dates.Minute(100) == Dates.DateTime(1999,12,27,1,40) -@test dt + Dates.Minute(1000) == Dates.DateTime(1999,12,27,16,40) -@test dt - Dates.Minute(1) == Dates.DateTime(1999,12,26,23,59) -@test dt - Dates.Minute(100) == Dates.DateTime(1999,12,26,22,20) -@test dt - Dates.Minute(1000) == Dates.DateTime(1999,12,26,7,20) -dt = Dates.DateTime(1972,6,30,23,59,59) -@test dt + Dates.Minute(1) == Dates.DateTime(1972,7,1,0,0,59) -@test dt - Dates.Minute(1) == Dates.DateTime(1972,6,30,23,58,59) -@test dt + Dates.Minute(-1) == Dates.DateTime(1972,6,30,23,58,59) - -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Second(1) == Dates.DateTime(1999,12,27,0,0,1) -@test dt + Dates.Second(100) == Dates.DateTime(1999,12,27,0,1,40) -@test dt + Dates.Second(1000) == Dates.DateTime(1999,12,27,0,16,40) -@test dt - Dates.Second(1) == Dates.DateTime(1999,12,26,23,59,59) -@test dt - Dates.Second(100) == Dates.DateTime(1999,12,26,23,58,20) -@test dt - Dates.Second(1000) == Dates.DateTime(1999,12,26,23,43,20) - -dt = Dates.DateTime(1999,12,27) -@test dt + Dates.Millisecond(1) == Dates.DateTime(1999,12,27,0,0,0,1) -@test dt + Dates.Millisecond(100) == Dates.DateTime(1999,12,27,0,0,0,100) -@test dt + Dates.Millisecond(1000) == Dates.DateTime(1999,12,27,0,0,1) -@test dt - Dates.Millisecond(1) == Dates.DateTime(1999,12,26,23,59,59,999) -@test dt - Dates.Millisecond(100) == Dates.DateTime(1999,12,26,23,59,59,900) -@test dt - Dates.Millisecond(1000) == Dates.DateTime(1999,12,26,23,59,59) -dt = Dates.DateTime(1972,6,30,23,59,59) -@test dt + Dates.Millisecond(1) == Dates.DateTime(1972,6,30,23,59,59,1) -@test dt - Dates.Millisecond(1) == Dates.DateTime(1972,6,30,23,59,58,999) -@test dt + Dates.Millisecond(-1) == Dates.DateTime(1972,6,30,23,59,58,999) - -dt = Dates.Date(1999,12,27) -@test dt + Dates.Year(1) == Dates.Date(2000,12,27) -@test dt + Dates.Year(100) == Dates.Date(2099,12,27) -@test dt + Dates.Year(1000) == Dates.Date(2999,12,27) -@test dt - Dates.Year(1) == Dates.Date(1998,12,27) -@test dt - Dates.Year(100) == Dates.Date(1899,12,27) -@test dt - Dates.Year(1000) == Dates.Date(999,12,27) -dt = Dates.Date(2000,2,29) -@test dt + Dates.Year(1) == Dates.Date(2001,2,28) -@test dt - Dates.Year(1) == Dates.Date(1999,2,28) -@test dt + Dates.Year(4) == Dates.Date(2004,2,29) -@test dt - Dates.Year(4) == Dates.Date(1996,2,29) - -dt = Dates.Date(1999,12,27) -@test dt + Dates.Month(1) == Dates.Date(2000,1,27) -@test dt + Dates.Month(100) == Dates.Date(2008,4,27) -@test dt + Dates.Month(1000) == Dates.Date(2083,4,27) -@test dt - Dates.Month(1) == Dates.Date(1999,11,27) -@test dt - Dates.Month(100) == Dates.Date(1991,8,27) -@test dt - Dates.Month(1000) == Dates.Date(1916,8,27) -dt = Dates.Date(2000,2,29) -@test dt + Dates.Month(1) == Dates.Date(2000,3,29) -@test dt - Dates.Month(1) == Dates.Date(2000,1,29) - -dt = Dates.Date(1999,12,27) -@test dt + Dates.Week(1) == Dates.Date(2000,1,3) -@test dt + Dates.Week(100) == Dates.Date(2001,11,26) -@test dt + Dates.Week(1000) == Dates.Date(2019,2,25) -@test dt - Dates.Week(1) == Dates.Date(1999,12,20) -@test dt - Dates.Week(100) == Dates.Date(1998,1,26) -@test dt - Dates.Week(1000) == Dates.Date(1980,10,27) -dt = Dates.Date(2000,2,29) -@test dt + Dates.Week(1) == Dates.Date(2000,3,7) -@test dt - Dates.Week(1) == Dates.Date(2000,2,22) - -dt = Dates.Date(1999,12,27) -@test dt + Dates.Day(1) == Dates.Date(1999,12,28) -@test dt + Dates.Day(100) == Dates.Date(2000,4,5) -@test dt + Dates.Day(1000) == Dates.Date(2002,9,22) -@test dt - Dates.Day(1) == Dates.Date(1999,12,26) -@test dt - Dates.Day(100) == Dates.Date(1999,9,18) -@test dt - Dates.Day(1000) == Dates.Date(1997,4,1) +@test Dates.yearwrap(2000, 1, -3600) == 1700 +@test Dates.yearwrap(2000, 1, -37) == 1996 +@test Dates.yearwrap(2000, 1, -36) == 1997 +@test Dates.yearwrap(2000, 1, -35) == 1997 +@test Dates.yearwrap(2000, 1, -25) == 1997 +@test Dates.yearwrap(2000, 1, -24) == 1998 +@test Dates.yearwrap(2000, 1, -23) == 1998 +@test Dates.yearwrap(2000, 1, -14) == 1998 +@test Dates.yearwrap(2000, 1, -13) == 1998 +@test Dates.yearwrap(2000, 1, -12) == 1999 +@test Dates.yearwrap(2000, 1, -11) == 1999 +@test Dates.yearwrap(2000, 1, -2) == 1999 +@test Dates.yearwrap(2000, 1, -1) == 1999 +@test Dates.yearwrap(2000, 1, 0) == 2000 +@test Dates.yearwrap(2000, 1, 1) == 2000 +@test Dates.yearwrap(2000, 1, 11) == 2000 +@test Dates.yearwrap(2000, 1, 12) == 2001 +@test Dates.yearwrap(2000, 1, 13) == 2001 +@test Dates.yearwrap(2000, 1, 23) == 2001 +@test Dates.yearwrap(2000, 1, 24) == 2002 +@test Dates.yearwrap(2000, 1, 25) == 2002 +@test Dates.yearwrap(2000, 1, 36) == 2003 +@test Dates.yearwrap(2000, 1, 3600) == 2300 +@test Dates.yearwrap(2000, 2, -2) == 1999 +@test Dates.yearwrap(2000, 3, 10) == 2001 +@test Dates.yearwrap(2000, 4, -4) == 1999 +@test Dates.yearwrap(2000, 5, 8) == 2001 +@test Dates.yearwrap(2000, 6, -18) == 1998 +@test Dates.yearwrap(2000, 6, -6) == 1999 +@test Dates.yearwrap(2000, 6, 6) == 2000 +@test Dates.yearwrap(2000, 6, 7) == 2001 +@test Dates.yearwrap(2000, 6, 19) == 2002 +@test Dates.yearwrap(2000, 12, -3600) == 1700 +@test Dates.yearwrap(2000, 12, -36) == 1997 +@test Dates.yearwrap(2000, 12, -35) == 1998 +@test Dates.yearwrap(2000, 12, -24) == 1998 +@test Dates.yearwrap(2000, 12, -23) == 1999 +@test Dates.yearwrap(2000, 12, -14) == 1999 +@test Dates.yearwrap(2000, 12, -13) == 1999 +@test Dates.yearwrap(2000, 12, -12) == 1999 +@test Dates.yearwrap(2000, 12, -11) == 2000 +@test Dates.yearwrap(2000, 12, -2) == 2000 +@test Dates.yearwrap(2000, 12, -1) == 2000 +@test Dates.yearwrap(2000, 12, 0) == 2000 +@test Dates.yearwrap(2000, 12, 1) == 2001 +@test Dates.yearwrap(2000, 12, 11) == 2001 +@test Dates.yearwrap(2000, 12, 12) == 2001 +@test Dates.yearwrap(2000, 12, 13) == 2002 +@test Dates.yearwrap(2000, 12, 24) == 2002 +@test Dates.yearwrap(2000, 12, 25) == 2003 +@test Dates.yearwrap(2000, 12, 36) == 2003 +@test Dates.yearwrap(2000, 12, 37) == 2004 +@test Dates.yearwrap(2000, 12, 3600) == 2300 + +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Month(1) == Dates.DateTime(2000, 1, 27) +@test dt + Dates.Month(-1) == Dates.DateTime(1999, 11, 27) +@test dt + Dates.Month(-11) == Dates.DateTime(1999, 1, 27) +@test dt + Dates.Month(11) == Dates.DateTime(2000, 11, 27) +@test dt + Dates.Month(-12) == Dates.DateTime(1998, 12, 27) +@test dt + Dates.Month(12) == Dates.DateTime(2000, 12, 27) +@test dt + Dates.Month(13) == Dates.DateTime(2001, 1, 27) +@test dt + Dates.Month(100) == Dates.DateTime(2008, 4, 27) +@test dt + Dates.Month(1000) == Dates.DateTime(2083, 4, 27) +@test dt - Dates.Month(1) == Dates.DateTime(1999, 11, 27) +@test dt - Dates.Month(-1) == Dates.DateTime(2000, 1, 27) +@test dt - Dates.Month(100) == Dates.DateTime(1991, 8, 27) +@test dt - Dates.Month(1000) == Dates.DateTime(1916, 8, 27) +dt = Dates.DateTime(2000, 2, 29) +@test dt + Dates.Month(1) == Dates.DateTime(2000, 3, 29) +@test dt - Dates.Month(1) == Dates.DateTime(2000, 1, 29) +dt = Dates.DateTime(1972, 6, 30, 23, 59, 59) +@test dt + Dates.Month(1) == Dates.DateTime(1972, 7, 30, 23, 59, 59) +@test dt - Dates.Month(1) == Dates.DateTime(1972, 5, 30, 23, 59, 59) +@test dt + Dates.Month(-1) == Dates.DateTime(1972, 5, 30, 23, 59, 59) + +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Week(1) == Dates.DateTime(2000, 1, 3) +@test dt + Dates.Week(100) == Dates.DateTime(2001, 11, 26) +@test dt + Dates.Week(1000) == Dates.DateTime(2019, 2, 25) +@test dt - Dates.Week(1) == Dates.DateTime(1999, 12, 20) +@test dt - Dates.Week(100) == Dates.DateTime(1998, 1, 26) +@test dt - Dates.Week(1000) == Dates.DateTime(1980, 10, 27) +dt = Dates.DateTime(2000, 2, 29) +@test dt + Dates.Week(1) == Dates.DateTime(2000, 3, 7) +@test dt - Dates.Week(1) == Dates.DateTime(2000, 2, 22) +dt = Dates.DateTime(1972, 6, 30, 23, 59, 59) +@test dt + Dates.Week(1) == Dates.DateTime(1972, 7, 7, 23, 59, 59) +@test dt - Dates.Week(1) == Dates.DateTime(1972, 6, 23, 23, 59, 59) +@test dt + Dates.Week(-1) == Dates.DateTime(1972, 6, 23, 23, 59, 59) + +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Day(1) == Dates.DateTime(1999, 12, 28) +@test dt + Dates.Day(100) == Dates.DateTime(2000, 4, 5) +@test dt + Dates.Day(1000) == Dates.DateTime(2002, 9, 22) +@test dt - Dates.Day(1) == Dates.DateTime(1999, 12, 26) +@test dt - Dates.Day(100) == Dates.DateTime(1999, 9, 18) +@test dt - Dates.Day(1000) == Dates.DateTime(1997, 4, 1) +dt = Dates.DateTime(1972, 6, 30, 23, 59, 59) +@test dt + Dates.Day(1) == Dates.DateTime(1972, 7, 1, 23, 59, 59) +@test dt - Dates.Day(1) == Dates.DateTime(1972, 6, 29, 23, 59, 59) +@test dt + Dates.Day(-1) == Dates.DateTime(1972, 6, 29, 23, 59, 59) + +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Hour(1) == Dates.DateTime(1999, 12, 27, 1) +@test dt + Dates.Hour(100) == Dates.DateTime(1999, 12, 31, 4) +@test dt + Dates.Hour(1000) == Dates.DateTime(2000, 2, 6, 16) +@test dt - Dates.Hour(1) == Dates.DateTime(1999, 12, 26, 23) +@test dt - Dates.Hour(100) == Dates.DateTime(1999, 12, 22, 20) +@test dt - Dates.Hour(1000) == Dates.DateTime(1999, 11, 15, 8) +dt = Dates.DateTime(1972, 6, 30, 23, 59, 59) +@test dt + Dates.Hour(1) == Dates.DateTime(1972, 7, 1, 0, 59, 59) +@test dt - Dates.Hour(1) == Dates.DateTime(1972, 6, 30, 22, 59, 59) +@test dt + Dates.Hour(-1) == Dates.DateTime(1972, 6, 30, 22, 59, 59) + +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Minute(1) == Dates.DateTime(1999, 12, 27, 0, 1) +@test dt + Dates.Minute(100) == Dates.DateTime(1999, 12, 27, 1, 40) +@test dt + Dates.Minute(1000) == Dates.DateTime(1999, 12, 27, 16, 40) +@test dt - Dates.Minute(1) == Dates.DateTime(1999, 12, 26, 23, 59) +@test dt - Dates.Minute(100) == Dates.DateTime(1999, 12, 26, 22, 20) +@test dt - Dates.Minute(1000) == Dates.DateTime(1999, 12, 26, 7, 20) +dt = Dates.DateTime(1972, 6, 30, 23, 59, 59) +@test dt + Dates.Minute(1) == Dates.DateTime(1972, 7, 1, 0, 0, 59) +@test dt - Dates.Minute(1) == Dates.DateTime(1972, 6, 30, 23, 58, 59) +@test dt + Dates.Minute(-1) == Dates.DateTime(1972, 6, 30, 23, 58, 59) + +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Second(1) == Dates.DateTime(1999, 12, 27, 0, 0, 1) +@test dt + Dates.Second(100) == Dates.DateTime(1999, 12, 27, 0, 1, 40) +@test dt + Dates.Second(1000) == Dates.DateTime(1999, 12, 27, 0, 16, 40) +@test dt - Dates.Second(1) == Dates.DateTime(1999, 12, 26, 23, 59, 59) +@test dt - Dates.Second(100) == Dates.DateTime(1999, 12, 26, 23, 58, 20) +@test dt - Dates.Second(1000) == Dates.DateTime(1999, 12, 26, 23, 43, 20) + +dt = Dates.DateTime(1999, 12, 27) +@test dt + Dates.Millisecond(1) == Dates.DateTime(1999, 12, 27, 0, 0, 0, 1) +@test dt + Dates.Millisecond(100) == Dates.DateTime(1999, 12, 27, 0, 0, 0, 100) +@test dt + Dates.Millisecond(1000) == Dates.DateTime(1999, 12, 27, 0, 0, 1) +@test dt - Dates.Millisecond(1) == Dates.DateTime(1999, 12, 26, 23, 59, 59, 999) +@test dt - Dates.Millisecond(100) == Dates.DateTime(1999, 12, 26, 23, 59, 59, 900) +@test dt - Dates.Millisecond(1000) == Dates.DateTime(1999, 12, 26, 23, 59, 59) +dt = Dates.DateTime(1972, 6, 30, 23, 59, 59) +@test dt + Dates.Millisecond(1) == Dates.DateTime(1972, 6, 30, 23, 59, 59, 1) +@test dt - Dates.Millisecond(1) == Dates.DateTime(1972, 6, 30, 23, 59, 58, 999) +@test dt + Dates.Millisecond(-1) == Dates.DateTime(1972, 6, 30, 23, 59, 58, 999) + +dt = Dates.Date(1999, 12, 27) +@test dt + Dates.Year(1) == Dates.Date(2000, 12, 27) +@test dt + Dates.Year(100) == Dates.Date(2099, 12, 27) +@test dt + Dates.Year(1000) == Dates.Date(2999, 12, 27) +@test dt - Dates.Year(1) == Dates.Date(1998, 12, 27) +@test dt - Dates.Year(100) == Dates.Date(1899, 12, 27) +@test dt - Dates.Year(1000) == Dates.Date(999, 12, 27) +dt = Dates.Date(2000, 2, 29) +@test dt + Dates.Year(1) == Dates.Date(2001, 2, 28) +@test dt - Dates.Year(1) == Dates.Date(1999, 2, 28) +@test dt + Dates.Year(4) == Dates.Date(2004, 2, 29) +@test dt - Dates.Year(4) == Dates.Date(1996, 2, 29) + +dt = Dates.Date(1999, 12, 27) +@test dt + Dates.Month(1) == Dates.Date(2000, 1, 27) +@test dt + Dates.Month(100) == Dates.Date(2008, 4, 27) +@test dt + Dates.Month(1000) == Dates.Date(2083, 4, 27) +@test dt - Dates.Month(1) == Dates.Date(1999, 11, 27) +@test dt - Dates.Month(100) == Dates.Date(1991, 8, 27) +@test dt - Dates.Month(1000) == Dates.Date(1916, 8, 27) +dt = Dates.Date(2000, 2, 29) +@test dt + Dates.Month(1) == Dates.Date(2000, 3, 29) +@test dt - Dates.Month(1) == Dates.Date(2000, 1, 29) + +dt = Dates.Date(1999, 12, 27) +@test dt + Dates.Week(1) == Dates.Date(2000, 1, 3) +@test dt + Dates.Week(100) == Dates.Date(2001, 11, 26) +@test dt + Dates.Week(1000) == Dates.Date(2019, 2, 25) +@test dt - Dates.Week(1) == Dates.Date(1999, 12, 20) +@test dt - Dates.Week(100) == Dates.Date(1998, 1, 26) +@test dt - Dates.Week(1000) == Dates.Date(1980, 10, 27) +dt = Dates.Date(2000, 2, 29) +@test dt + Dates.Week(1) == Dates.Date(2000, 3, 7) +@test dt - Dates.Week(1) == Dates.Date(2000, 2, 22) + +dt = Dates.Date(1999, 12, 27) +@test dt + Dates.Day(1) == Dates.Date(1999, 12, 28) +@test dt + Dates.Day(100) == Dates.Date(2000, 4, 5) +@test dt + Dates.Day(1000) == Dates.Date(2002, 9, 22) +@test dt - Dates.Day(1) == Dates.Date(1999, 12, 26) +@test dt - Dates.Day(100) == Dates.Date(1999, 9, 18) +@test dt - Dates.Day(1000) == Dates.Date(1997, 4, 1) # Test Time-TimePeriod arithmetic t = Dates.Time(0) @test t + Dates.Hour(1) == Dates.Time(1) @test t - Dates.Hour(1) == Dates.Time(23) -@test t - Dates.Nanosecond(1) == Dates.Time(23,59,59,999,999,999) -@test t + Dates.Nanosecond(-1) == Dates.Time(23,59,59,999,999,999) +@test t - Dates.Nanosecond(1) == Dates.Time(23, 59, 59, 999, 999, 999) +@test t + Dates.Nanosecond(-1) == Dates.Time(23, 59, 59, 999, 999, 999) @test t + Dates.Hour(24) == t @test t + Dates.Nanosecond(86400000000000) == t @test t - Dates.Nanosecond(86400000000000) == t -@test t + Dates.Minute(1) == Dates.Time(0,1) -@test t + Dates.Second(1) == Dates.Time(0,0,1) -@test t + Dates.Millisecond(1) == Dates.Time(0,0,0,1) -@test t + Dates.Microsecond(1) == Dates.Time(0,0,0,0,1) +@test t + Dates.Minute(1) == Dates.Time(0, 1) +@test t + Dates.Second(1) == Dates.Time(0, 0, 1) +@test t + Dates.Millisecond(1) == Dates.Time(0, 0, 0, 1) +@test t + Dates.Microsecond(1) == Dates.Time(0, 0, 0, 0, 1) @test_throws MethodError t + Dates.Day(1) # Vectorized Time arithmetic -a = Dates.Time(1,1,1) -dr = [a,a,a,a,a,a,a,a,a,a] +a = Dates.Time(1, 1, 1) +dr = [a, a, a, a, a, a, a, a, a, a] b = a + Dates.Hour(1) -@test dr .+ Dates.Hour(1) == repmat([b],10) +@test dr .+ Dates.Hour(1) == repmat([b], 10) b = a + Dates.Second(1) -@test dr .+ Dates.Second(1) == repmat([b],10) +@test dr .+ Dates.Second(1) == repmat([b], 10) b = a + Dates.Millisecond(1) -@test dr .+ Dates.Millisecond(1) == repmat([b],10) +@test dr .+ Dates.Millisecond(1) == repmat([b], 10) b = a + Dates.Microsecond(1) -@test dr .+ Dates.Microsecond(1) == repmat([b],10) +@test dr .+ Dates.Microsecond(1) == repmat([b], 10) b = a + Dates.Nanosecond(1) -@test dr .+ Dates.Nanosecond(1) == repmat([b],10) +@test dr .+ Dates.Nanosecond(1) == repmat([b], 10) b = a - Dates.Hour(1) -@test dr .- Dates.Hour(1) == repmat([b],10) +@test dr .- Dates.Hour(1) == repmat([b], 10) b = a - Dates.Second(1) -@test dr .- Dates.Second(1) == repmat([b],10) +@test dr .- Dates.Second(1) == repmat([b], 10) b = a - Dates.Millisecond(1) -@test dr .- Dates.Millisecond(1) == repmat([b],10) +@test dr .- Dates.Millisecond(1) == repmat([b], 10) b = a - Dates.Microsecond(1) -@test dr .- Dates.Microsecond(1) == repmat([b],10) +@test dr .- Dates.Microsecond(1) == repmat([b], 10) b = a - Dates.Nanosecond(1) -@test dr .- Dates.Nanosecond(1) == repmat([b],10) +@test dr .- Dates.Nanosecond(1) == repmat([b], 10) # Vectorized arithmetic -a = Dates.Date(2014,1,1) -dr = [a,a,a,a,a,a,a,a,a,a] +a = Dates.Date(2014, 1, 1) +dr = [a, a, a, a, a, a, a, a, a, a] b = a + Dates.Year(1) -@test dr .+ Dates.Year(1) == repmat([b],10) +@test dr .+ Dates.Year(1) == repmat([b], 10) b = a + Dates.Month(1) -@test dr .+ Dates.Month(1) == repmat([b],10) +@test dr .+ Dates.Month(1) == repmat([b], 10) b = a + Dates.Day(1) -@test dr .+ Dates.Day(1) == repmat([b],10) +@test dr .+ Dates.Day(1) == repmat([b], 10) b = a - Dates.Year(1) -@test dr .- Dates.Year(1) == repmat([b],10) +@test dr .- Dates.Year(1) == repmat([b], 10) b = a - Dates.Month(1) -@test dr .- Dates.Month(1) == repmat([b],10) +@test dr .- Dates.Month(1) == repmat([b], 10) b = a - Dates.Day(1) -@test dr .- Dates.Day(1) == repmat([b],10) +@test dr .- Dates.Day(1) == repmat([b], 10) # Vectorized arithmetic b = a + Dates.Year(1) -@test dr .+ Dates.Year(1) == repmat([b],10) +@test dr .+ Dates.Year(1) == repmat([b], 10) b = a + Dates.Month(1) -@test dr .+ Dates.Month(1) == repmat([b],10) +@test dr .+ Dates.Month(1) == repmat([b], 10) b = a + Dates.Day(1) -@test dr .+ Dates.Day(1) == repmat([b],10) +@test dr .+ Dates.Day(1) == repmat([b], 10) b = a - Dates.Year(1) -@test dr .- Dates.Year(1) == repmat([b],10) +@test dr .- Dates.Year(1) == repmat([b], 10) b = a - Dates.Month(1) -@test dr .- Dates.Month(1) == repmat([b],10) +@test dr .- Dates.Month(1) == repmat([b], 10) b = a - Dates.Day(1) -@test dr .- Dates.Day(1) == repmat([b],10) +@test dr .- Dates.Day(1) == repmat([b], 10) # Month arithmetic minimizes "edit distance", or number of changes # needed to get a correct answer # This approach results in a few cases of non-associativity -a = Dates.Date(2012,1,29) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,1,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,2,29) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,3,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,4,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,5,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,6,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,8,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,9,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,10,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) -a = Dates.Date(2012,11,30) -@test (a+Dates.Day(1))+Dates.Month(1) != (a+Dates.Month(1))+Dates.Day(1) - - -dt = Dates.DateTime(2000,1,1,12,30,45,500) +a = Dates.Date(2012, 1, 29) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 1, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 2, 29) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 3, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 4, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 5, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 6, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 8, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 9, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 10, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) +a = Dates.Date(2012, 11, 30) +@test (a + Dates.Day(1)) + Dates.Month(1) != (a + Dates.Month(1)) + Dates.Day(1) + + +dt = Dates.DateTime(2000, 1, 1, 12, 30, 45, 500) dt2 = dt + Dates.Year(1) @test Dates.year(dt2) == 2001 @test Dates.month(dt2) == 1 @@ -376,65 +376,56 @@ dt2 = dt + Dates.Year(1) @test Dates.second(dt2) == 45 @test Dates.millisecond(dt2) == 500 -t1 = [Dates.Date(2009,1,1) Dates.Date(2009,1,2) Dates.Date(2009,1,3); Dates.Date(2009,2,1) Dates.Date(2009,2,2) Dates.Date(2009,2,3)] -t2 = [Dates.Date(2009,1,2) Dates.Date(2009,2,2) Dates.Date(2010,1,3); Dates.Date(2010,2,1) Dates.Date(2009,3,2) Dates.Date(2009,2,4)] -t3 = [Dates.DateTime(2009,1,1), Dates.DateTime(2009,1,2), Dates.DateTime(2009,1,3)] -t4 = [Dates.DateTime(2009,1,1,0,0,1), Dates.DateTime(2009,1,2,0,1), Dates.DateTime(2009,1,3,1)] -t5 = [Dates.Time(0,0,0) Dates.Time(0,0,1) Dates.Time(0,0,2); Dates.Time(0,1,0) Dates.Time(0,2,0) Dates.Time(0,3,0)] +t1 = [Dates.Date(2009, 1, 1) Dates.Date(2009, 1, 2) Dates.Date(2009, 1, 3); Dates.Date(2009, 2, 1) Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3)] +t2 = [Dates.Date(2009, 1, 2) Dates.Date(2009, 2, 2) Dates.Date(2010, 1, 3); Dates.Date(2010, 2, 1) Dates.Date(2009, 3, 2) Dates.Date(2009, 2, 4)] +t3 = [Dates.DateTime(2009, 1, 1), Dates.DateTime(2009, 1, 2), Dates.DateTime(2009, 1, 3)] +t4 = [Dates.DateTime(2009, 1, 1, 0, 0, 1), Dates.DateTime(2009, 1, 2, 0, 1), Dates.DateTime(2009, 1, 3, 1)] +t5 = [Dates.Time(0, 0, 0) Dates.Time(0, 0, 1) Dates.Time(0, 0, 2); Dates.Time(0, 1, 0) Dates.Time(0, 2, 0) Dates.Time(0, 3, 0)] # TimeType, Array{TimeType} -@test Dates.Date(2010,1,1) .- t1 == [Dates.Day(365) Dates.Day(364) Dates.Day(363); Dates.Day(334) Dates.Day(333) Dates.Day(332)] -@test t1 .- Dates.Date(2010,1,1) == [Dates.Day(-365) Dates.Day(-364) Dates.Day(-363); Dates.Day(-334) Dates.Day(-333) Dates.Day(-332)] -@test Dates.DateTime(2009,1,1) .- t3 == [Dates.Millisecond(0), Dates.Millisecond(-86400000), Dates.Millisecond(-172800000)] -@test t3 .- Dates.DateTime(2009,1,1) == [Dates.Millisecond(0), Dates.Millisecond(86400000), Dates.Millisecond(172800000)] -@test Dates.Date(2010,1,1) - t1 == [Dates.Day(365) Dates.Day(364) Dates.Day(363); Dates.Day(334) Dates.Day(333) Dates.Day(332)] -@test t1 - Dates.Date(2010,1,1) == [Dates.Day(-365) Dates.Day(-364) Dates.Day(-363); Dates.Day(-334) Dates.Day(-333) Dates.Day(-332)] -@test Dates.DateTime(2009,1,1) - t3 == [Dates.Millisecond(0), Dates.Millisecond(-86400000), Dates.Millisecond(-172800000)] -@test t3 - Dates.DateTime(2009,1,1) == [Dates.Millisecond(0), Dates.Millisecond(86400000), Dates.Millisecond(172800000)] +@test Dates.Date(2010, 1, 1) .- t1 == [Dates.Day(365) Dates.Day(364) Dates.Day(363); Dates.Day(334) Dates.Day(333) Dates.Day(332)] +@test t1 .- Dates.Date(2010, 1, 1) == [Dates.Day(-365) Dates.Day(-364) Dates.Day(-363); Dates.Day(-334) Dates.Day(-333) Dates.Day(-332)] +@test Dates.DateTime(2009, 1, 1) .- t3 == [Dates.Millisecond(0), Dates.Millisecond(-86400000), Dates.Millisecond(-172800000)] +@test t3 .- Dates.DateTime(2009, 1, 1) == [Dates.Millisecond(0), Dates.Millisecond(86400000), Dates.Millisecond(172800000)] +@test Dates.Date(2010, 1, 1) - t1 == [Dates.Day(365) Dates.Day(364) Dates.Day(363); Dates.Day(334) Dates.Day(333) Dates.Day(332)] +@test t1 - Dates.Date(2010, 1, 1) == [Dates.Day(-365) Dates.Day(-364) Dates.Day(-363); Dates.Day(-334) Dates.Day(-333) Dates.Day(-332)] +@test Dates.DateTime(2009, 1, 1) - t3 == [Dates.Millisecond(0), Dates.Millisecond(-86400000), Dates.Millisecond(-172800000)] +@test t3 - Dates.DateTime(2009, 1, 1) == [Dates.Millisecond(0), Dates.Millisecond(86400000), Dates.Millisecond(172800000)] @test Dates.Time(2) .- t5 == [Dates.Nanosecond(7200000000000) Dates.Nanosecond(7199000000000) Dates.Nanosecond(7198000000000); Dates.Nanosecond(7140000000000) Dates.Nanosecond(7080000000000) Dates.Nanosecond(7020000000000)] # GeneralPeriod, Array{TimeType} -@test Dates.Day(1) .+ t1 == [Dates.Date(2009,1,2) Dates.Date(2009,1,3) Dates.Date(2009,1,4); Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4)] -@test Dates.Hour(1) .+ t3 == [Dates.DateTime(2009,1,1,1), Dates.DateTime(2009,1,2,1), Dates.DateTime(2009,1,3,1)] -@test t1 .+ Dates.Day(1) == [Dates.Date(2009,1,2) Dates.Date(2009,1,3) Dates.Date(2009,1,4); Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4)] -@test t3 .+ Dates.Hour(1) == [Dates.DateTime(2009,1,1,1), Dates.DateTime(2009,1,2,1), Dates.DateTime(2009,1,3,1)] -@test Dates.Day(1) + t1 == [Dates.Date(2009,1,2) Dates.Date(2009,1,3) Dates.Date(2009,1,4); Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4)] -@test Dates.Hour(1) + t3 == [Dates.DateTime(2009,1,1,1), Dates.DateTime(2009,1,2,1), Dates.DateTime(2009,1,3,1)] -@test t1 + Dates.Day(1) == [Dates.Date(2009,1,2) Dates.Date(2009,1,3) Dates.Date(2009,1,4); Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4)] -@test t3 + Dates.Hour(1) == [Dates.DateTime(2009,1,1,1), Dates.DateTime(2009,1,2,1), Dates.DateTime(2009,1,3,1)] -@test t5 + Dates.Hour(1) == [Dates.Time(1,0,0) Dates.Time(1,0,1) Dates.Time(1,0,2); Dates.Time(1,1,0) Dates.Time(1,2,0) Dates.Time(1,3,0)] - -@test (Dates.Month(1) + Dates.Day(1)) .+ t1 == [Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4); Dates.Date(2009,3,2) Dates.Date(2009,3,3) Dates.Date(2009,3,4)] -@test (Dates.Hour(1) + Dates.Minute(1)) .+ t3 == [Dates.DateTime(2009,1,1,1,1), Dates.DateTime(2009,1,2,1,1), Dates.DateTime(2009,1,3,1,1)] -@test t1 .+ (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4); Dates.Date(2009,3,2) Dates.Date(2009,3,3) Dates.Date(2009,3,4)] -@test t3 .+ (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2009,1,1,1,1), Dates.DateTime(2009,1,2,1,1), Dates.DateTime(2009,1,3,1,1)] -@test (Dates.Month(1) + Dates.Day(1)) + t1 == [Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4); Dates.Date(2009,3,2) Dates.Date(2009,3,3) Dates.Date(2009,3,4)] -@test (Dates.Hour(1) + Dates.Minute(1)) + t3 == [Dates.DateTime(2009,1,1,1,1), Dates.DateTime(2009,1,2,1,1), Dates.DateTime(2009,1,3,1,1)] -@test t1 + (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2009,2,2) Dates.Date(2009,2,3) Dates.Date(2009,2,4); Dates.Date(2009,3,2) Dates.Date(2009,3,3) Dates.Date(2009,3,4)] -@test t3 + (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2009,1,1,1,1), Dates.DateTime(2009,1,2,1,1), Dates.DateTime(2009,1,3,1,1)] - -@test Dates.Day(1) .- t1 == [Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2); Dates.Date(2009,1,31) Dates.Date(2009,2,1) Dates.Date(2009,2,2)] -@test Dates.Hour(1) .- t3 == [Dates.DateTime(2008,12,31,23), Dates.DateTime(2009,1,1,23), Dates.DateTime(2009,1,2,23)] -@test t1 .- Dates.Day(1) == [Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2); Dates.Date(2009,1,31) Dates.Date(2009,2,1) Dates.Date(2009,2,2)] -@test t3 .- Dates.Hour(1) == [Dates.DateTime(2008,12,31,23), Dates.DateTime(2009,1,1,23), Dates.DateTime(2009,1,2,23)] -@test Dates.Day(1) - t1 == [Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2); Dates.Date(2009,1,31) Dates.Date(2009,2,1) Dates.Date(2009,2,2)] -@test Dates.Hour(1) - t3 == [Dates.DateTime(2008,12,31,23), Dates.DateTime(2009,1,1,23), Dates.DateTime(2009,1,2,23)] -@test t1 - Dates.Day(1) == [Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2); Dates.Date(2009,1,31) Dates.Date(2009,2,1) Dates.Date(2009,2,2)] -@test t3 - Dates.Hour(1) == [Dates.DateTime(2008,12,31,23), Dates.DateTime(2009,1,1,23), Dates.DateTime(2009,1,2,23)] - -@test (Dates.Month(1) + Dates.Day(1)) .- t1 == [Dates.Date(2008,11,30) Dates.Date(2008,12,1) Dates.Date(2008,12,2); Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2)] -@test (Dates.Hour(1) + Dates.Minute(1)) .- t3 == [Dates.DateTime(2008,12,31,22,59), Dates.DateTime(2009,1,1,22,59), Dates.DateTime(2009,1,2,22,59)] -@test t1 .- (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2008,11,30) Dates.Date(2008,12,1) Dates.Date(2008,12,2); Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2)] -@test t3 .- (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2008,12,31,22,59), Dates.DateTime(2009,1,1,22,59), Dates.DateTime(2009,1,2,22,59)] -@test (Dates.Month(1) + Dates.Day(1)) - t1 == [Dates.Date(2008,11,30) Dates.Date(2008,12,1) Dates.Date(2008,12,2); Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2)] -@test (Dates.Hour(1) + Dates.Minute(1)) - t3 == [Dates.DateTime(2008,12,31,22,59), Dates.DateTime(2009,1,1,22,59), Dates.DateTime(2009,1,2,22,59)] -@test t1 - (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2008,11,30) Dates.Date(2008,12,1) Dates.Date(2008,12,2); Dates.Date(2008,12,31) Dates.Date(2009,1,1) Dates.Date(2009,1,2)] -@test t3 - (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2008,12,31,22,59), Dates.DateTime(2009,1,1,22,59), Dates.DateTime(2009,1,2,22,59)] +@test Dates.Day(1) .+ t1 == [Dates.Date(2009, 1, 2) Dates.Date(2009, 1, 3) Dates.Date(2009, 1, 4); Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4)] +@test Dates.Hour(1) .+ t3 == [Dates.DateTime(2009, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1), Dates.DateTime(2009, 1, 3, 1)] +@test t1 .+ Dates.Day(1) == [Dates.Date(2009, 1, 2) Dates.Date(2009, 1, 3) Dates.Date(2009, 1, 4); Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4)] +@test t3 .+ Dates.Hour(1) == [Dates.DateTime(2009, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1), Dates.DateTime(2009, 1, 3, 1)] +@test Dates.Day(1) + t1 == [Dates.Date(2009, 1, 2) Dates.Date(2009, 1, 3) Dates.Date(2009, 1, 4); Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4)] +@test Dates.Hour(1) + t3 == [Dates.DateTime(2009, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1), Dates.DateTime(2009, 1, 3, 1)] +@test t1 + Dates.Day(1) == [Dates.Date(2009, 1, 2) Dates.Date(2009, 1, 3) Dates.Date(2009, 1, 4); Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4)] +@test t3 + Dates.Hour(1) == [Dates.DateTime(2009, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1), Dates.DateTime(2009, 1, 3, 1)] +@test t5 + Dates.Hour(1) == [Dates.Time(1, 0, 0) Dates.Time(1, 0, 1) Dates.Time(1, 0, 2); Dates.Time(1, 1, 0) Dates.Time(1, 2, 0) Dates.Time(1, 3, 0)] + +@test (Dates.Month(1) + Dates.Day(1)) .+ t1 == [Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4); Dates.Date(2009, 3, 2) Dates.Date(2009, 3, 3) Dates.Date(2009, 3, 4)] +@test (Dates.Hour(1) + Dates.Minute(1)) .+ t3 == [Dates.DateTime(2009, 1, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1, 1), Dates.DateTime(2009, 1, 3, 1, 1)] +@test t1 .+ (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4); Dates.Date(2009, 3, 2) Dates.Date(2009, 3, 3) Dates.Date(2009, 3, 4)] +@test t3 .+ (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2009, 1, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1, 1), Dates.DateTime(2009, 1, 3, 1, 1)] +@test (Dates.Month(1) + Dates.Day(1)) + t1 == [Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4); Dates.Date(2009, 3, 2) Dates.Date(2009, 3, 3) Dates.Date(2009, 3, 4)] +@test (Dates.Hour(1) + Dates.Minute(1)) + t3 == [Dates.DateTime(2009, 1, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1, 1), Dates.DateTime(2009, 1, 3, 1, 1)] +@test t1 + (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2009, 2, 2) Dates.Date(2009, 2, 3) Dates.Date(2009, 2, 4); Dates.Date(2009, 3, 2) Dates.Date(2009, 3, 3) Dates.Date(2009, 3, 4)] +@test t3 + (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2009, 1, 1, 1, 1), Dates.DateTime(2009, 1, 2, 1, 1), Dates.DateTime(2009, 1, 3, 1, 1)] + +@test t1 .- Dates.Day(1) == [Dates.Date(2008, 12, 31) Dates.Date(2009, 1, 1) Dates.Date(2009, 1, 2); Dates.Date(2009, 1, 31) Dates.Date(2009, 2, 1) Dates.Date(2009, 2, 2)] +@test t3 .- Dates.Hour(1) == [Dates.DateTime(2008, 12, 31, 23), Dates.DateTime(2009, 1, 1, 23), Dates.DateTime(2009, 1, 2, 23)] +@test t1 - Dates.Day(1) == [Dates.Date(2008, 12, 31) Dates.Date(2009, 1, 1) Dates.Date(2009, 1, 2); Dates.Date(2009, 1, 31) Dates.Date(2009, 2, 1) Dates.Date(2009, 2, 2)] +@test t3 - Dates.Hour(1) == [Dates.DateTime(2008, 12, 31, 23), Dates.DateTime(2009, 1, 1, 23), Dates.DateTime(2009, 1, 2, 23)] + +@test t1 .- (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2008, 11, 30) Dates.Date(2008, 12, 1) Dates.Date(2008, 12, 2); Dates.Date(2008, 12, 31) Dates.Date(2009, 1, 1) Dates.Date(2009, 1, 2)] +@test t3 .- (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2008, 12, 31, 22, 59), Dates.DateTime(2009, 1, 1, 22, 59), Dates.DateTime(2009, 1, 2, 22, 59)] +@test t1 - (Dates.Month(1) + Dates.Day(1)) == [Dates.Date(2008, 11, 30) Dates.Date(2008, 12, 1) Dates.Date(2008, 12, 2); Dates.Date(2008, 12, 31) Dates.Date(2009, 1, 1) Dates.Date(2009, 1, 2)] +@test t3 - (Dates.Hour(1) + Dates.Minute(1)) == [Dates.DateTime(2008, 12, 31, 22, 59), Dates.DateTime(2009, 1, 1, 22, 59), Dates.DateTime(2009, 1, 2, 22, 59)] # Array{TimeType}, Array{TimeType} @test t2 - t1 == [Dates.Day(1) Dates.Day(31) Dates.Day(365); Dates.Day(365) Dates.Day(28) Dates.Day(1)] @test t4 - t3 == [Dates.Millisecond(1000), Dates.Millisecond(60000), Dates.Millisecond(3600000)] -@test (Dates.Date(2009,1,1):Dates.Week(1):Dates.Date(2009,1,21)) - (Dates.Date(2009,1,1):Dates.Day(1):Dates.Date(2009,1,3)) == [Dates.Day(0), Dates.Day(6), Dates.Day(12)] -@test (Dates.DateTime(2009,1,1,1,1,1):Dates.Second(1):Dates.DateTime(2009,1,1,1,1,3)) - (Dates.DateTime(2009,1,1,1,1):Dates.Second(1):Dates.DateTime(2009,1,1,1,1,2)) == [Dates.Second(1), Dates.Second(1), Dates.Second(1)] - +@test (Dates.Date(2009, 1, 1):Dates.Week(1):Dates.Date(2009, 1, 21)) - (Dates.Date(2009, 1, 1):Dates.Day(1):Dates.Date(2009, 1, 3)) == [Dates.Day(0), Dates.Day(6), Dates.Day(12)] +@test (Dates.DateTime(2009, 1, 1, 1, 1, 1):Dates.Second(1):Dates.DateTime(2009, 1, 1, 1, 1, 3)) - (Dates.DateTime(2009, 1, 1, 1, 1):Dates.Second(1):Dates.DateTime(2009, 1, 1, 1, 1, 2)) == [Dates.Second(1), Dates.Second(1), Dates.Second(1)]