diff --git a/src/Quaternion.jl b/src/Quaternion.jl index f2f5562..1fb0c2e 100644 --- a/src/Quaternion.jl +++ b/src/Quaternion.jl @@ -254,6 +254,11 @@ Base.://(x::Quaternion, y::Real) = quat(real(x)//y, imag_part(x).//y...) Base.://(x::Number, y::Quaternion) = x*conj(y)//abs2(y) Base.:(==)(q::Quaternion, w::Quaternion) = (q.s == w.s) & (q.v1 == w.v1) & (q.v2 == w.v2) & (q.v3 == w.v3) +Base.:(==)(q::Quaternion, x::Real) = isreal(q) && real(q) == x +Base.:(==)(x::Real, q::Quaternion) = isreal(q) && real(q) == x +Base.:(==)(q::Quaternion, z::Complex) = isreal(q) && isreal(z) && real(q) == real(z) +Base.:(==)(z::Complex, q::Quaternion) = isreal(q) && isreal(z) && real(q) == real(z) + function Base.isequal(q::Quaternion, w::Quaternion) isequal(q.s, w.s) & isequal(q.v1, w.v1) & isequal(q.v2, w.v2) & isequal(q.v3, w.v3) end diff --git a/test/Quaternion.jl b/test/Quaternion.jl index 53b36bc..5730d7e 100644 --- a/test/Quaternion.jl +++ b/test/Quaternion.jl @@ -57,6 +57,22 @@ end @test Quaternion(1, 2, 3, 4) != Quaternion(1, 5, 3, 4) @test Quaternion(1, 2, 3, 4) != Quaternion(1, 2, 5, 4) @test Quaternion(1, 2, 3, 4) != Quaternion(1, 2, 3, 5) + + @test Quaternion(1, 2, 3, 4) != 1 + @test Quaternion(1, 0, 0, 0) == 1 + @test Quaternion(1, 0, 0, 0) != 0 + @test 1 != Quaternion(1, 2, 3, 4) + @test 1 == Quaternion(1, 0, 0, 0) + @test 0 != Quaternion(1, 0, 0, 0) + + @test Quaternion(1, 0, 0, 0) == Complex(1, 0) + @test Quaternion(1, 0, 0, 0) != Complex(1, 1) + @test Quaternion(1, 0, 0, 0) != Complex(0, 1) + @test Quaternion(0, 1, 0, 0) != Complex(0, 1) + @test Complex(1, 0) == Quaternion(1, 0, 0, 0) + @test Complex(1, 1) != Quaternion(1, 0, 0, 0) + @test Complex(0, 1) != Quaternion(1, 0, 0, 0) + @test Complex(0, 1) != Quaternion(0, 1, 0, 0) end @testset "isequal" begin @@ -83,8 +99,6 @@ end (Quaternion(1.0, 2, 3, 4), Quaternion(2.0)) @test promote(Quaternion(1.0f0), Quaternion(2.0)) === (Quaternion(1.0), Quaternion(2.0)) - - @test Quaternion(1) == 1.0 end @testset "shorthands" begin