diff --git a/src/halfinteger.jl b/src/halfinteger.jl index fb98314..0065c80 100644 --- a/src/halfinteger.jl +++ b/src/halfinteger.jl @@ -81,7 +81,7 @@ function Base.convert(::Type{HalfInteger}, r::Real) end Base.convert(T::Type{<:Integer}, s::HalfInteger) = iseven(s.numerator) ? convert(T, s.numerator>>1) : throw(InexactError(Symbol(T), T, s)) Base.convert(T::Type{<:Rational}, s::HalfInteger) = convert(T, s.numerator//2) -Base.convert(T::Type{<:Real}, s::HalfInteger) = convert(T, s.numerator/2) +Base.convert(T::Type{<:AbstractFloat}, s::HalfInteger) = convert(T, s.numerator) / T(2) Base.convert(::Type{HalfInteger}, s::HalfInteger) = s # Arithmetic diff --git a/test/halfinteger.jl b/test/halfinteger.jl index 3d30d65..2198f9c 100644 --- a/test/halfinteger.jl +++ b/test/halfinteger.jl @@ -21,15 +21,21 @@ using WignerSymbols: HalfInteger, ishalfinteger, HalfIntegerRange @test_throws ArgumentError HalfInteger(-1000, -999) # convert methods - @test convert(HalfInteger, 2) == HalfInteger(2, 1) - @test convert(HalfInteger, 1//2) == HalfInteger(1, 2) - @test convert(HalfInteger, 1.5) == HalfInteger(3, 2) + @test convert(HalfInteger, 2) === HalfInteger(2, 1) + @test convert(HalfInteger, 1//2) === HalfInteger(1, 2) + @test convert(HalfInteger, 1.5) === HalfInteger(3, 2) @test_throws InexactError convert(HalfInteger, 1//3) @test_throws InexactError convert(HalfInteger, 0.6) - @test convert(HalfInteger, 2) == 2 - @test convert(HalfInteger, 1//2) == 1//2 - @test convert(HalfInteger, 1.5) == 1.5 + @test convert(HalfInteger, 2) === HalfInteger(2, 1) + @test convert(HalfInteger, 1//2) === HalfInteger(1, 2) + @test convert(HalfInteger, 1.5) === HalfInteger(3, 2) + + @test convert(Integer, HalfInteger(2, 1)) === 2 @test_throws InexactError convert(Integer, HalfInteger(1, 2)) + @test convert(Float64, HalfInteger(3, 2)) isa Float64 + @test convert(Float32, HalfInteger(3, 2)) isa Float32 + @test convert(Float64, HalfInteger(3, 2)) == 1.5 + @test convert(Real, HalfInteger(3, 2)) === HalfInteger(3, 2) # single-argument constructor @test HalfInteger(0) == HalfInteger(0, 2)