|
1 | 1 | using BlockArrays: Block, BlockedMatrix, BlockedVector, blocks, mortar
|
2 | 2 | using BlockSparseArrays: BlockSparseArray, BlockDiagonal, eachblockstoredindex
|
3 |
| -using MatrixAlgebraKit: svd_compact, svd_full, svd_trunc, truncrank, trunctol |
| 3 | +using MatrixAlgebraKit: |
| 4 | + qr_compact, qr_full, svd_compact, svd_full, svd_trunc, truncrank, trunctol |
4 | 5 | using LinearAlgebra: LinearAlgebra
|
5 | 6 | using Random: Random
|
6 | 7 | using Test: @inferred, @testset, @test
|
|
154 | 155 | @test (V1ᴴ * V1ᴴ' ≈ LinearAlgebra.I)
|
155 | 156 | end
|
156 | 157 | end
|
| 158 | + |
| 159 | +@testset "qr_compact" for T in (Float32, Float64, ComplexF32, ComplexF64) |
| 160 | + for i in [1, 2], j in [1, 2], k in [1, 2], l in [1, 2] |
| 161 | + A = BlockSparseArray{T}(undef, ([i, j], [k, l])) |
| 162 | + A[Block(1, 1)] = randn(T, i, k) |
| 163 | + A[Block(2, 2)] = randn(T, j, l) |
| 164 | + Q, R = qr_compact(A) |
| 165 | + @test Matrix(Q'Q) ≈ LinearAlgebra.I |
| 166 | + @test A ≈ Q * R |
| 167 | + end |
| 168 | +end |
| 169 | + |
| 170 | +@testset "qr_full" for T in (Float32, Float64, ComplexF32, ComplexF64) |
| 171 | + for i in [2, 3], j in [2, 3], k in [2, 3], l in [2, 3] |
| 172 | + A = BlockSparseArray{T}(undef, ([i, j], [k, l])) |
| 173 | + A[Block(1, 1)] = randn(T, i, k) |
| 174 | + A[Block(2, 2)] = randn(T, j, l) |
| 175 | + Q, R = qr_full(A) |
| 176 | + Q′, R′ = qr_full(Matrix(A)) |
| 177 | + @test size(Q) == size(Q′) |
| 178 | + @test size(R) == size(R′) |
| 179 | + @test Matrix(Q'Q) ≈ LinearAlgebra.I |
| 180 | + @test Matrix(Q * Q') ≈ LinearAlgebra.I |
| 181 | + @test A ≈ Q * R |
| 182 | + end |
| 183 | +end |
0 commit comments