Skip to content

Commit 1ffbf9d

Browse files
authored
Add 5-arg symmetric-adjoint multiplication tests (#1396)
Separated from #1394, as we may add the tests independently.
1 parent 2c3fe9b commit 1ffbf9d

File tree

2 files changed

+57
-10
lines changed

2 files changed

+57
-10
lines changed

test/symmetric.jl

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -876,21 +876,67 @@ end
876876
end
877877
end
878878

879-
@testset "Multiplications symmetric/hermitian for $T and $S" for T in
880-
(Float16, Float32, Float64, BigFloat), S in (ComplexF16, ComplexF32, ComplexF64)
881-
let A = transpose(Symmetric(rand(S, 3, 3))), Bv = Vector(rand(T, 3)), Bm = Matrix(rand(T, 3,3))
879+
@testset "Multiplications symmetric/hermitian for T=$T and S=$S for size n=$n" for T in
880+
(Float16, Float32, Float64, BigFloat, Quaternion{Float64}),
881+
S in (T <: Quaternion ? (Quaternion{Float64},) : (ComplexF16, ComplexF32, ComplexF64, Quaternion{Float64})),
882+
n in (2, 3, 4)
883+
let A = transpose(Symmetric(rand(S, n, n))), Bv = Vector(rand(T, n)), Bm = Matrix(rand(T, n,n))
882884
@test A * Bv Matrix(A) * Bv
883885
@test A * Bm Matrix(A) * Bm
886+
@test A * transpose(Bm) Matrix(A) * transpose(Bm)
887+
@test A * adjoint(Bm) Matrix(A) * adjoint(Bm)
884888
@test Bm * A Bm * Matrix(A)
889+
@test transpose(Bm) * A transpose(Bm) * Matrix(A)
890+
@test adjoint(Bm) * A adjoint(Bm) * Matrix(A)
891+
C = similar(Bm, promote_type(T, S))
892+
@test mul!(C, A, Bm) A * Bm
893+
@test mul!(adjoint(C), A, adjoint(Bm)) A * adjoint(Bm)
894+
@test mul!(transpose(C), A, transpose(Bm)) A * transpose(Bm)
895+
rand!(C)
896+
@test mul!(copy(C), A, Bm, 2, 3) A * Bm * 2 + C * 3
897+
@test mul!(copy(C), Bm, A, 2, 3) Bm * A * 2 + C * 3
898+
@test mul!(adjoint(copy(C)), A, adjoint(Bm), 2, 3) A * adjoint(Bm) * 2 + adjoint(C) * 3
899+
@test mul!(adjoint(copy(C)), adjoint(Bm), A, 2, 3) adjoint(Bm) * A * 2 + adjoint(C) * 3
900+
@test mul!(transpose(copy(C)), A, transpose(Bm), 2, 3) A * transpose(Bm) * 2 + transpose(C) * 3
901+
@test mul!(transpose(copy(C)), transpose(Bm), A, 2, 3) transpose(Bm) * A * 2 + transpose(C) * 3
902+
if eltype(C) <: Complex
903+
alpha, beta = 4+2im, 3+im
904+
@test mul!(adjoint(copy(C)), A, adjoint(Bm), alpha, beta) A * adjoint(Bm) * alpha + adjoint(C) * beta
905+
@test mul!(adjoint(copy(C)), adjoint(Bm), A, alpha, beta) adjoint(Bm) * A * alpha + adjoint(C) * beta
906+
@test mul!(transpose(copy(C)), A, transpose(Bm), alpha, beta) A * transpose(Bm) * alpha + transpose(C) * beta
907+
@test mul!(transpose(copy(C)), transpose(Bm), A, alpha, beta) transpose(Bm) * A * alpha + transpose(C) * beta
908+
end
885909
end
886-
let A = adjoint(Hermitian(rand(S, 3,3))), Bv = Vector(rand(T, 3)), Bm = Matrix(rand(T, 3,3))
910+
let A = adjoint(Hermitian(rand(S, n,n))), Bv = Vector(rand(T, n)), Bm = Matrix(rand(T, n,n))
887911
@test A * Bv Matrix(A) * Bv
888912
@test A * Bm Matrix(A) * Bm
913+
@test A * transpose(Bm) Matrix(A) * transpose(Bm)
914+
@test A * adjoint(Bm) Matrix(A) * adjoint(Bm)
889915
@test Bm * A Bm * Matrix(A)
916+
@test transpose(Bm) * A transpose(Bm) * Matrix(A)
917+
@test adjoint(Bm) * A adjoint(Bm) * Matrix(A)
918+
C = similar(Bm, promote_type(T, S))
919+
@test mul!(C, A, Bm) A * Bm
920+
@test mul!(adjoint(C), A, adjoint(Bm)) A * adjoint(Bm)
921+
@test mul!(transpose(C), A, transpose(Bm)) A * transpose(Bm)
922+
rand!(C)
923+
@test mul!(copy(C), A, Bm, 2, 3) A * Bm * 2 + C * 3
924+
@test mul!(copy(C), Bm, A, 2, 3) Bm * A * 2 + C * 3
925+
@test mul!(adjoint(copy(C)), A, adjoint(Bm), 2, 3) A * adjoint(Bm) * 2 + adjoint(C) * 3
926+
@test mul!(adjoint(copy(C)), adjoint(Bm), A, 2, 3) adjoint(Bm) * A * 2 + adjoint(C) * 3
927+
@test mul!(transpose(copy(C)), A, transpose(Bm), 2, 3) A * transpose(Bm) * 2 + transpose(C) * 3
928+
@test mul!(transpose(copy(C)), transpose(Bm), A, 2, 3) transpose(Bm) * A * 2 + transpose(C) * 3
929+
if eltype(C) <: Complex
930+
alpha, beta = 4+2im, 3+im
931+
@test mul!(adjoint(copy(C)), A, adjoint(Bm), alpha, beta) A * adjoint(Bm) * alpha + adjoint(C) * beta
932+
@test mul!(adjoint(copy(C)), adjoint(Bm), A, alpha, beta) adjoint(Bm) * A * alpha + adjoint(C) * beta
933+
@test mul!(transpose(copy(C)), A, transpose(Bm), alpha, beta) A * transpose(Bm) * alpha + transpose(C) * beta
934+
@test mul!(transpose(copy(C)), transpose(Bm), A, alpha, beta) transpose(Bm) * A * alpha + transpose(C) * beta
935+
end
890936
end
891-
let Ahrs = transpose(Hermitian(Symmetric(rand(T, 3, 3)))),
892-
Acs = transpose(Symmetric(rand(S, 3, 3))),
893-
Ahcs = transpose(Hermitian(Symmetric(rand(S, 3, 3))))
937+
let Ahrs = transpose(Hermitian(Symmetric(rand(T, n, n)))),
938+
Acs = transpose(Symmetric(rand(S, n, n))),
939+
Ahcs = transpose(Hermitian(Symmetric(rand(S, n, n))))
894940

895941
@test Ahrs * Ahrs Ahrs * Matrix(Ahrs)
896942
@test Ahrs * Acs Ahrs * Matrix(Acs)
@@ -899,9 +945,9 @@ end
899945
@test Ahrs * Ahcs Matrix(Ahrs) * Ahcs
900946
@test Ahcs * Ahrs Ahcs * Matrix(Ahrs)
901947
end
902-
let Ahrs = adjoint(Hermitian(Symmetric(rand(T, 3, 3)))),
903-
Acs = adjoint(Symmetric(rand(S, 3, 3))),
904-
Ahcs = adjoint(Hermitian(Symmetric(rand(S, 3, 3))))
948+
let Ahrs = adjoint(Hermitian(Symmetric(rand(T, n, n)))),
949+
Acs = adjoint(Symmetric(rand(S, n, n))),
950+
Ahcs = adjoint(Hermitian(Symmetric(rand(S, n, n))))
905951

906952
@test Ahrs * Ahrs Ahrs * Matrix(Ahrs)
907953
@test Ahcs * Ahcs Matrix(Ahcs) * Matrix(Ahcs)

test/testhelpers/Quaternions.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct Quaternion{T<:Real} <: Number
1616
end
1717
Quaternion{T}(s::Real) where {T<:Real} = Quaternion{T}(T(s), zero(T), zero(T), zero(T))
1818
Quaternion(s::Real, v1::Real, v2::Real, v3::Real) = Quaternion(promote(s, v1, v2, v3)...)
19+
Quaternion{T}(q::Quaternion) where {T<:Real} = Quaternion{T}(T(q.s), T(q.v1), T(q.v2), T(q.v3))
1920
Base.convert(::Type{Quaternion{T}}, s::Real) where {T <: Real} =
2021
Quaternion{T}(convert(T, s), zero(T), zero(T), zero(T))
2122
Base.promote_rule(::Type{Quaternion{T}}, ::Type{S}) where {T <: Real, S <: Real} =

0 commit comments

Comments
 (0)