|
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