@@ -129,6 +129,55 @@ using StaticArrays, Test, LinearAlgebra
129
129
m = MVector (1 , 2 , 3 )
130
130
@test @inferred (reverse (m)):: typeof (m) == MVector (3 , 2 , 1 )
131
131
end
132
+
133
+ @testset " Conversion to AbstractArray" begin
134
+ # Issue #746
135
+ # conversion to AbstractArray changes the eltype from Int to Float64
136
+ sv = SVector (1 ,2 )
137
+ @test @inferred (convert (AbstractArray{Float64}, sv)) isa SVector{2 ,Float64}
138
+ @test @inferred (convert (AbstractVector{Float64}, sv)) isa SVector{2 ,Float64}
139
+ @test convert (AbstractArray{Float64}, sv) == sv
140
+ @test convert (AbstractArray{Int}, sv) === sv
141
+ sm = SMatrix {2,2} (1 ,2 ,3 ,4 )
142
+ @test @inferred (convert (AbstractArray{Float64,2 }, sm)) isa SMatrix{2 ,2 ,Float64}
143
+ @test convert (AbstractArray{Float64,2 }, sm) == sm
144
+ @test convert (AbstractArray{Int,2 }, sm) === sm
145
+ mv = MVector (1 , 2 , 3 )
146
+ @test @inferred (convert (AbstractArray{Float64}, mv)) isa MVector{3 ,Float64}
147
+ @test @inferred (convert (AbstractVector{Float64}, mv)) isa MVector{3 ,Float64}
148
+ @test convert (AbstractArray{Float64}, mv) == mv
149
+ @test convert (AbstractArray{Int}, mv) === mv
150
+ mm = MMatrix {2, 2} (1 , 2 , 3 , 4 )
151
+ @test @inferred (convert (AbstractArray{Float64,2 }, mm)) isa MMatrix{2 ,2 ,Float64}
152
+ @test convert (AbstractArray{Float64,2 }, mm) == mm
153
+ @test convert (AbstractArray{Int,2 }, mm) === mm
154
+
155
+ # Test some of the types in StaticMatrixLike
156
+ sym = Symmetric (SA[1 2 ; 2 3 ])
157
+ @test @inferred (convert (AbstractArray{Float64}, sym)) isa Symmetric{Float64,SMatrix{2 ,2 ,Float64,4 }}
158
+ @test @inferred (convert (AbstractArray{Float64,2 }, sym)) isa Symmetric{Float64,SMatrix{2 ,2 ,Float64,4 }}
159
+ @test convert (AbstractArray{Float64}, sym) == sym
160
+ her = Hermitian (SA[1 2 + im; 2 - im 3 ])
161
+ @test @inferred (convert (AbstractArray{ComplexF64}, her)) isa Hermitian{ComplexF64,SMatrix{2 ,2 ,ComplexF64,4 }}
162
+ @test convert (AbstractArray{ComplexF64}, her) == her
163
+ diag = Diagonal (SVector (1 ,2 ))
164
+ @test @inferred (convert (AbstractArray{Float64}, diag)) isa Diagonal{Float64,SVector{2 ,Float64}}
165
+ @test convert (AbstractArray{Float64}, diag) == diag
166
+ # The following cases currently convert the SMatrix into an MMatrix, because
167
+ # the constructor in Base invokes `similar`, rather than `convert`, on the static array
168
+ trans = Transpose (SVector (1 ,2 ))
169
+ @test_broken @inferred (convert (AbstractArray{Float64}, trans)) isa Transpose{Float64,SVector{2 ,Float64}}
170
+ adj = Adjoint (SVector (1 ,2 ))
171
+ @test_broken @inferred (convert (AbstractArray{Float64}, adj)) isa Adjoint{Float64,SVector{2 ,Float64}}
172
+ uptri = UpperTriangular (SA[1 2 ; 0 3 ])
173
+ @test_broken @inferred (convert (AbstractArray{Float64}, uptri)) isa UpperTriangular{Float64,SMatrix{2 ,2 ,Float64,4 }}
174
+ lotri = LowerTriangular (SA[1 0 ; 2 3 ])
175
+ @test_broken @inferred (convert (AbstractArray{Float64}, lotri)) isa LowerTriangular{Float64,SMatrix{2 ,2 ,Float64,4 }}
176
+ unituptri = UnitUpperTriangular (SA[1 2 ; 0 1 ])
177
+ @test_broken @inferred (convert (AbstractArray{Float64}, unituptri)) isa UnitUpperTriangular{Float64,SMatrix{2 ,2 ,Float64,4 }}
178
+ unitlotri = UnitLowerTriangular (SA[1 0 ; 2 1 ])
179
+ @test_broken @inferred (convert (AbstractArray{Float64}, unitlotri)) isa UnitLowerTriangular{Float64,SMatrix{2 ,2 ,Float64,4 }}
180
+ end
132
181
end
133
182
134
183
@testset " vcat() and hcat()" begin
191
240
@test @inferred (vcat (A, B)) === SMatrix {4, 2} ([Matrix (A); Matrix (B)])
192
241
end
193
242
end
194
-
0 commit comments