From ac084865931792c4fa4f9887a063f5ecf21cdb75 Mon Sep 17 00:00:00 2001 From: Sebastian Stock <42280794+sostock@users.noreply.github.com> Date: Fri, 3 Feb 2023 11:06:46 +0100 Subject: [PATCH] Add `{copy,flip}sign(::Number, ::AbstractQuantity)` --- src/quantities.jl | 5 +++++ test/runtests.jl | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/quantities.jl b/src/quantities.jl index 6c35dbfd..14054354 100644 --- a/src/quantities.jl +++ b/src/quantities.jl @@ -252,7 +252,12 @@ abs2(x::AbstractQuantity) = Quantity(abs2(x.val), unit(x)*unit(x)) angle(x::AbstractQuantity{<:Complex}) = angle(x.val) copysign(x::AbstractQuantity, y::Number) = Quantity(copysign(x.val,y/unit(y)), unit(x)) +copysign(x::Number, y::AbstractQuantity) = copysign(x,y/unit(y)) +copysign(x::AbstractQuantity, y::AbstractQuantity) = Quantity(copysign(x.val,y/unit(y)), unit(x)) + flipsign(x::AbstractQuantity, y::Number) = Quantity(flipsign(x.val,y/unit(y)), unit(x)) +flipsign(x::Number, y::AbstractQuantity) = flipsign(x,y/unit(y)) +flipsign(x::AbstractQuantity, y::AbstractQuantity) = Quantity(flipsign(x.val,y/unit(y)), unit(x)) for (i,j) in zip((:<, :isless), (:_lt, :_isless)) @eval ($i)(x::AbstractQuantity, y::AbstractQuantity) = ($j)(x,y) diff --git a/test/runtests.jl b/test/runtests.jl index bd1c7e1c..e24b1c00 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1066,8 +1066,19 @@ end @test @inferred(signbit(-0.0m)) == true @test @inferred(copysign(3.0m, -4.0s)) == -3.0m @test @inferred(copysign(3.0m, 4)) == 3.0m + @test @inferred(copysign(3, -4.0m)) == -3 @test @inferred(flipsign(3.0m, -4)) == -3.0m @test @inferred(flipsign(-3.0m, -4)) == 3.0m + @test @inferred(flipsign(-3.0, -4m)) == 3.0 + @test @inferred(flipsign(-3, 4.0m)) == -3 + @test @inferred(flipsign(3.0m, -4s)) == -3.0m + @test @inferred(flipsign(-3m, 4.0s)) == -3m + @test @inferred(flipsign((3.0+4.0im)m, -4)) == (-3.0-4.0im)m + @test @inferred(flipsign((-3.0+4.0im)m, -4)) == (3.0-4.0im)m + @test @inferred(flipsign(-3+4im, -4m)) == 3-4im + @test @inferred(flipsign(-3.0+4.0im, 4m)) == -3.0+4.0im + @test @inferred(flipsign((3.0+4.0im)m, -4s)) == (-3.0-4.0im)m + @test @inferred(flipsign((-3+4im)m, 4.0s)) == (-3+4im)m @test @inferred(real(3m)) == 3.0m @test @inferred(real((3+4im)V)) == 3V @test @inferred(imag(3m)) == 0m