From 573feae895c5f6300af5594b4c13bd379d9551bd Mon Sep 17 00:00:00 2001 From: Tucker McClure Date: Tue, 14 Apr 2026 18:31:47 +0000 Subject: [PATCH] Add keyword constructor --- src/UTCDates.jl | 14 +++++++++++--- test/runtests.jl | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/UTCDates.jl b/src/UTCDates.jl index bf5f6e9..90105f0 100644 --- a/src/UTCDates.jl +++ b/src/UTCDates.jl @@ -85,7 +85,7 @@ struct UTCDate seconds::Float64 function UTCDate( - year::Number = 1970, month::Number = 1, day::Number = 1, + year::Number, month::Number, day::Number, hour::Number = 0, minute::Number = 0, seconds::Number = 0.; leap_second_table = default_leap_second_table, ) @@ -106,8 +106,16 @@ struct UTCDate return new(year, month, day, hour, minute, seconds) end - function UTCDate(s::AbstractString) - return convert(UTCDate, s) + function UTCDate(; + year::Number, month::Number, day::Number, + hour::Number = 0, minute::Number = 0, seconds::Number = 0., + kwargs..., + ) + return UTCDate(year, month, day, hour, minute, seconds; kwargs...) + end + + function UTCDate(s::AbstractString; kwargs...) + return convert(UTCDate, s; kwargs...) end end diff --git a/test/runtests.jl b/test/runtests.jl index 025c7fc..9f71d87 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -7,6 +7,21 @@ const gps_epoch = UTCDate(1980, 01, 06, 0, 0, 0) # TODO: Test for type stability and allocations. +@testset "constructors" begin + + # We're just looking for coverage here. + @test_throws "" UTCDate() # Too ambiguous. + @test_throws "" UTCDate(1970) # Too ambiguous. + @test_throws "" UTCDate(1970, 1) # Too ambiguous. + @test UTCDate(1970, 1, 1) isa UTCDate + @test_throws "" UTCDate(;) # Too ambiguous. + @test_throws "" UTCDate(; year = 1970) # Too ambiguous. + @test_throws "" UTCDate(; year = 1970, month = 1) # Too ambiguous. + @test_throws "" UTCDate(; month = 1, day = 2) # Too ambiguous. + @test UTCDate(; year = 1970, month = 1, day = 1) isa UTCDate + +end + @testset "known times between dates" begin gps_wrt_unix = elapsed(; from = unix_epoch, to = gps_epoch)