|
1 | | -using ArrayLayouts, LinearAlgebra, FillArrays, Test |
2 | | -using ArrayLayouts: sub_materialize, MemoryLayout, ColumnNorm, RowMaximum, CRowMaximum |
| 1 | +module TestLayoutArray |
| 2 | + |
| 3 | +using ArrayLayouts, LinearAlgebra, FillArrays, Test, SparseArrays |
| 4 | +using ArrayLayouts: sub_materialize, MemoryLayout, ColumnNorm, RowMaximum, CRowMaximum, @_layoutlmul |
| 5 | +import ArrayLayouts: triangulardata |
3 | 6 |
|
4 | 7 | struct MyMatrix <: LayoutMatrix{Float64} |
5 | 8 | A::Matrix{Float64} |
@@ -37,7 +40,7 @@ MemoryLayout(::Type{MyVector}) = DenseColumnMajor() |
37 | 40 | @test a[1:3] == a.A[1:3] |
38 | 41 | @test a[:] == a |
39 | 42 | @test (a')[1,:] == (a')[1,1:3] == a |
40 | | - @test sprint(show, "text/plain", a) == "3-element MyVector{Float64}:\n 1.0\n 2.0\n 3.0" |
| 43 | + @test sprint(show, "text/plain", a) == "3-element $MyVector{Float64}:\n 1.0\n 2.0\n 3.0" |
41 | 44 | @test B*a ≈ B*a.A |
42 | 45 | @test B'*a ≈ B'*a.A |
43 | 46 | @test transpose(B)*a ≈ transpose(B)*a.A |
@@ -209,7 +212,7 @@ MemoryLayout(::Type{MyVector}) = DenseColumnMajor() |
209 | 212 | end |
210 | 213 |
|
211 | 214 | C = MyMatrix([1 2; 3 4]) |
212 | | - @test sprint(show, "text/plain", C) == "2×2 MyMatrix:\n 1.0 2.0\n 3.0 4.0" |
| 215 | + @test sprint(show, "text/plain", C) == "2×2 $MyMatrix:\n 1.0 2.0\n 3.0 4.0" |
213 | 216 |
|
214 | 217 | @testset "layoutldiv" begin |
215 | 218 | A = MyMatrix(randn(5,5)) |
@@ -476,6 +479,38 @@ MemoryLayout(::Type{MyVector}) = DenseColumnMajor() |
476 | 479 | @test UpperTriangular(A') * UnitUpperTriangular(A') ≈ UpperTriangular(A.A') * UnitUpperTriangular(A.A') |
477 | 480 | end |
478 | 481 |
|
| 482 | + @testset "mul! involving a triangular" begin |
| 483 | + A = MyMatrix(rand(4,4)) |
| 484 | + UA = UpperTriangular(A) |
| 485 | + MA = Matrix(A) |
| 486 | + MUA = Matrix(UA) |
| 487 | + B = rand(4,4) |
| 488 | + UB = UpperTriangular(B) |
| 489 | + @test mul!(zeros(4,4), A, UB) ≈ MA * UB |
| 490 | + @test mul!(ones(4,4), A, UB, 2, 2) ≈ 2 * MA * UB .+ 2 |
| 491 | + @test mul!(zeros(4,4), UA, B) ≈ MUA * B |
| 492 | + @test mul!(ones(4,4), UA, B, 2, 2) ≈ 2 * MUA * B .+ 2 |
| 493 | + @test mul!(zeros(4,4), UA, UB) ≈ MUA * UB |
| 494 | + @test mul!(ones(4,4), UA, UB, 2, 2) ≈ 2 * MUA * UB .+ 2 |
| 495 | + @test mul!(zeros(4,4), UB, A) ≈ UB * MA |
| 496 | + @test mul!(ones(4,4), UB, A, 2, 2) ≈ 2 * UB * MA .+ 2 |
| 497 | + @test mul!(zeros(4,4), UB, UA) ≈ UB * MUA |
| 498 | + @test mul!(ones(4,4), UB, UA, 2, 2) ≈ 2 * UB * MUA .+ 2 |
| 499 | + @test mul!(zeros(4,4), B, UA) ≈ B * MUA |
| 500 | + @test mul!(ones(4,4), B, UA, 2, 2) ≈ 2 * B * MUA .+ 2 |
| 501 | + @test mul!(zeros(4,4), A, UA) ≈ MA * MUA |
| 502 | + @test mul!(ones(4,4), A, UA, 2, 2) ≈ 2 * MA * MUA .+ 2 |
| 503 | + @test mul!(zeros(4,4), UA, A) ≈ MUA * MA |
| 504 | + @test mul!(ones(4,4), UA, A, 2, 2) ≈ 2 * MUA * MA .+ 2 |
| 505 | + @test mul!(zeros(4,4), UA, UA) ≈ MUA * MUA |
| 506 | + @test mul!(ones(4,4), UA, UA, 2, 2) ≈ 2 * MUA * MUA .+ 2 |
| 507 | + |
| 508 | + |
| 509 | + v = rand(4) |
| 510 | + @test mul!(zeros(4), UA, v) ≈ MUA * v |
| 511 | + @test mul!(ones(4), UA, v, 2, 2) ≈ 2 * MUA * v .+ 2 |
| 512 | + end |
| 513 | + |
479 | 514 | if isdefined(LinearAlgebra, :copymutable_oftype) |
480 | 515 | @testset "copymutable_oftype" begin |
481 | 516 | A = MyMatrix(randn(3,3)) |
@@ -536,38 +571,6 @@ MemoryLayout(::Type{MyVector}) = DenseColumnMajor() |
536 | 571 | end |
537 | 572 | end |
538 | 573 |
|
539 | | -@testset "mul involving a triangular" begin |
540 | | - A = MyMatrix(rand(4,4)) |
541 | | - UA = UpperTriangular(A) |
542 | | - MA = Matrix(A) |
543 | | - MUA = Matrix(UA) |
544 | | - B = rand(4,4) |
545 | | - UB = UpperTriangular(B) |
546 | | - @test mul!(zeros(4,4), A, UB) ≈ MA * UB |
547 | | - @test mul!(ones(4,4), A, UB, 2, 2) ≈ 2 * MA * UB .+ 2 |
548 | | - @test mul!(zeros(4,4), UA, B) ≈ MUA * B |
549 | | - @test mul!(ones(4,4), UA, B, 2, 2) ≈ 2 * MUA * B .+ 2 |
550 | | - @test mul!(zeros(4,4), UA, UB) ≈ MUA * UB |
551 | | - @test mul!(ones(4,4), UA, UB, 2, 2) ≈ 2 * MUA * UB .+ 2 |
552 | | - @test mul!(zeros(4,4), UB, A) ≈ UB * MA |
553 | | - @test mul!(ones(4,4), UB, A, 2, 2) ≈ 2 * UB * MA .+ 2 |
554 | | - @test mul!(zeros(4,4), UB, UA) ≈ UB * MUA |
555 | | - @test mul!(ones(4,4), UB, UA, 2, 2) ≈ 2 * UB * MUA .+ 2 |
556 | | - @test mul!(zeros(4,4), B, UA) ≈ B * MUA |
557 | | - @test mul!(ones(4,4), B, UA, 2, 2) ≈ 2 * B * MUA .+ 2 |
558 | | - @test mul!(zeros(4,4), A, UA) ≈ MA * MUA |
559 | | - @test mul!(ones(4,4), A, UA, 2, 2) ≈ 2 * MA * MUA .+ 2 |
560 | | - @test mul!(zeros(4,4), UA, A) ≈ MUA * MA |
561 | | - @test mul!(ones(4,4), UA, A, 2, 2) ≈ 2 * MUA * MA .+ 2 |
562 | | - @test mul!(zeros(4,4), UA, UA) ≈ MUA * MUA |
563 | | - @test mul!(ones(4,4), UA, UA, 2, 2) ≈ 2 * MUA * MUA .+ 2 |
564 | | - |
565 | | - |
566 | | - v = rand(4) |
567 | | - @test mul!(zeros(4), UA, v) ≈ MUA * v |
568 | | - @test mul!(ones(4), UA, v, 2, 2) ≈ 2 * MUA * v .+ 2 |
569 | | -end |
570 | | - |
571 | 574 | struct MyUpperTriangular{T} <: AbstractMatrix{T} |
572 | 575 | A::UpperTriangular{T,Matrix{T}} |
573 | 576 | end |
@@ -611,3 +614,5 @@ triangulardata(A::MyUpperTriangular) = triangulardata(A.A) |
611 | 614 | @test MyMatrix(A) / U ≈ A / U |
612 | 615 | VERSION >= v"1.9" && @test U / MyMatrix(A) ≈ U / A |
613 | 616 | end |
| 617 | + |
| 618 | +end |
0 commit comments