diff --git a/src/Measurements.jl b/src/Measurements.jl index b140de4d..2087fbf6 100644 --- a/src/Measurements.jl +++ b/src/Measurements.jl @@ -60,21 +60,19 @@ function Measurement(val::V, err::E, tag::UInt64, return Measurement(T(val), T(err), tag, Derivatives{T}(der)) end Measurement{T}(x::Measurement{S}) where {T,S} = convert(Measurement{T}, x) -Measurement{T}(x::S) where {T,S} = convert(Measurement{T}, x) +Measurement{T}(x::S) where {T,S <: Real} = convert(Measurement{T}, x) # disambiguities Measurement{T}(x::S) where {T, S<:Rational} = convert(Measurement{T}, x) Measurement{T}(x::S) where {T, S<:Complex} = convert(Measurement{T}, x) Measurement{T}(x::S) where {T, S<:Base.TwicePrecision} = convert(Measurement{T}, x) Measurement{T}(x::S) where {P, T, S<:Rational{P}} = convert(Measurement{T}, x) +Measurement{T}(x::S) where {T, S <: AbstractChar} = convert(Measurement{T}, x) - -function Measurement{T}(::S) where {T, S<:AbstractChar} +function Measurement{T}(::S) where {T, S} throw(ArgumentError("cannot convert `$S` to `Measurement{$T}`")) end - - # Functions to quickly create an empty Derivatives object. @generated empty_der1(x::Measurement{T}) where {T<:AbstractFloat} = Derivatives{T}() @generated empty_der2(x::T) where {T<:AbstractFloat} = Derivatives{x}() diff --git a/src/conversions.jl b/src/conversions.jl index a75ad0f9..753ebfbe 100644 --- a/src/conversions.jl +++ b/src/conversions.jl @@ -24,6 +24,8 @@ Base.convert(::Type{Measurement{T}}, a::Real) where {T<:AbstractFloat} = measurement(T(a))::Measurement{T} Base.convert(::Type{Measurement{T}}, a::Base.TwicePrecision) where {T<:AbstractFloat} = measurement(T(a))::Measurement{T} +Base.convert(::Type{Measurement{T}}, a::AbstractChar) where {T<:AbstractFloat} = + measurement(T(a))::Measurement{T} function Base.convert(::Type{Measurement{T}}, a::Complex) where {T} if isreal(a) diff --git a/test/runtests.jl b/test/runtests.jl index a5b4c96e..68a2dfb4 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -109,6 +109,7 @@ end @test convert(Measurement{Float64}, 1+0im) ≈ 1.0±0.0 @test_throws InexactError convert(Measurement{Float64}, 1+1im) @test convert(Measurement{Float64}, Base.TwicePrecision(1.0, 0.0)) ≈ 1.0±0.0 + @test convert(Measurement{Float64}, 'a') ≈ Float64('a') ± 0.0 end @testset "Comparisons and Tests" begin