|
3 | 3 | module TestGeneric |
4 | 4 |
|
5 | 5 | using Test, LinearAlgebra, Random |
| 6 | +using Test: GenericArray |
| 7 | +using LinearAlgebra: isbanded |
6 | 8 |
|
7 | 9 | const BASE_TEST_PATH = joinpath(Sys.BINDIR, "..", "share", "julia", "test") |
8 | 10 |
|
@@ -511,56 +513,110 @@ end |
511 | 513 | end |
512 | 514 |
|
513 | 515 | @testset "generic functions for checking whether matrices have banded structure" begin |
514 | | - using LinearAlgebra: isbanded |
515 | 516 | pentadiag = [1 2 3; 4 5 6; 7 8 9] |
516 | 517 | tridiag = [1 2 0; 4 5 6; 0 8 9] |
| 518 | + tridiagG = GenericArray([1 2 0; 4 5 6; 0 8 9]) |
| 519 | + Tridiag = Tridiagonal(tridiag) |
517 | 520 | ubidiag = [1 2 0; 0 5 6; 0 0 9] |
| 521 | + ubidiagG = GenericArray([1 2 0; 0 5 6; 0 0 9]) |
| 522 | + uBidiag = Bidiagonal(ubidiag, :U) |
518 | 523 | lbidiag = [1 0 0; 4 5 0; 0 8 9] |
| 524 | + lbidiagG = GenericArray([1 0 0; 4 5 0; 0 8 9]) |
| 525 | + lBidiag = Bidiagonal(lbidiag, :L) |
519 | 526 | adiag = [1 0 0; 0 5 0; 0 0 9] |
| 527 | + adiagG = GenericArray([1 0 0; 0 5 0; 0 0 9]) |
| 528 | + aDiag = Diagonal(adiag) |
520 | 529 | @testset "istriu" begin |
521 | 530 | @test !istriu(pentadiag) |
522 | 531 | @test istriu(pentadiag, -2) |
523 | 532 | @test !istriu(tridiag) |
| 533 | + @test istriu(tridiag) == istriu(tridiagG) == istriu(Tridiag) |
524 | 534 | @test istriu(tridiag, -1) |
| 535 | + @test istriu(tridiag, -1) == istriu(tridiagG, -1) == istriu(Tridiag, -1) |
525 | 536 | @test istriu(ubidiag) |
| 537 | + @test istriu(ubidiag) == istriu(ubidiagG) == istriu(uBidiag) |
526 | 538 | @test !istriu(ubidiag, 1) |
| 539 | + @test istriu(ubidiag, 1) == istriu(ubidiagG, 1) == istriu(uBidiag, 1) |
527 | 540 | @test !istriu(lbidiag) |
| 541 | + @test istriu(lbidiag) == istriu(lbidiagG) == istriu(lBidiag) |
528 | 542 | @test istriu(lbidiag, -1) |
| 543 | + @test istriu(lbidiag, -1) == istriu(lbidiagG, -1) == istriu(lBidiag, -1) |
529 | 544 | @test istriu(adiag) |
| 545 | + @test istriu(adiag) == istriu(adiagG) == istriu(aDiag) |
530 | 546 | end |
531 | 547 | @testset "istril" begin |
532 | 548 | @test !istril(pentadiag) |
533 | 549 | @test istril(pentadiag, 2) |
534 | 550 | @test !istril(tridiag) |
| 551 | + @test istril(tridiag) == istril(tridiagG) == istril(Tridiag) |
535 | 552 | @test istril(tridiag, 1) |
| 553 | + @test istril(tridiag, 1) == istril(tridiagG, 1) == istril(Tridiag, 1) |
536 | 554 | @test !istril(ubidiag) |
| 555 | + @test istril(ubidiag) == istril(ubidiagG) == istril(ubidiagG) |
537 | 556 | @test istril(ubidiag, 1) |
| 557 | + @test istril(ubidiag, 1) == istril(ubidiagG, 1) == istril(uBidiag, 1) |
538 | 558 | @test istril(lbidiag) |
| 559 | + @test istril(lbidiag) == istril(lbidiagG) == istril(lBidiag) |
539 | 560 | @test !istril(lbidiag, -1) |
| 561 | + @test istril(lbidiag, -1) == istril(lbidiagG, -1) == istril(lBidiag, -1) |
540 | 562 | @test istril(adiag) |
| 563 | + @test istril(adiag) == istril(adiagG) == istril(aDiag) |
541 | 564 | end |
542 | 565 | @testset "isbanded" begin |
543 | 566 | @test isbanded(pentadiag, -2, 2) |
544 | 567 | @test !isbanded(pentadiag, -1, 2) |
545 | 568 | @test !isbanded(pentadiag, -2, 1) |
546 | 569 | @test isbanded(tridiag, -1, 1) |
| 570 | + @test isbanded(tridiag, -1, 1) == isbanded(tridiagG, -1, 1) == isbanded(Tridiag, -1, 1) |
547 | 571 | @test !isbanded(tridiag, 0, 1) |
| 572 | + @test isbanded(tridiag, 0, 1) == isbanded(tridiagG, 0, 1) == isbanded(Tridiag, 0, 1) |
548 | 573 | @test !isbanded(tridiag, -1, 0) |
| 574 | + @test isbanded(tridiag, -1, 0) == isbanded(tridiagG, -1, 0) == isbanded(Tridiag, -1, 0) |
549 | 575 | @test isbanded(ubidiag, 0, 1) |
| 576 | + @test isbanded(ubidiag, 0, 1) == isbanded(ubidiagG, 0, 1) == isbanded(uBidiag, 0, 1) |
550 | 577 | @test !isbanded(ubidiag, 1, 1) |
| 578 | + @test isbanded(ubidiag, 1, 1) == isbanded(ubidiagG, 1, 1) == isbanded(uBidiag, 1, 1) |
551 | 579 | @test !isbanded(ubidiag, 0, 0) |
| 580 | + @test isbanded(ubidiag, 0, 0) == isbanded(ubidiagG, 0, 0) == isbanded(uBidiag, 0, 0) |
552 | 581 | @test isbanded(lbidiag, -1, 0) |
| 582 | + @test isbanded(lbidiag, -1, 0) == isbanded(lbidiagG, -1, 0) == isbanded(lBidiag, -1, 0) |
553 | 583 | @test !isbanded(lbidiag, 0, 0) |
| 584 | + @test isbanded(lbidiag, 0, 0) == isbanded(lbidiagG, 0, 0) == isbanded(lBidiag, 0, 0) |
554 | 585 | @test !isbanded(lbidiag, -1, -1) |
| 586 | + @test isbanded(lbidiag, -1, -1) == isbanded(lbidiagG, -1, -1) == isbanded(lBidiag, -1, -1) |
555 | 587 | @test isbanded(adiag, 0, 0) |
| 588 | + @test isbanded(adiag, 0, 0) == isbanded(adiagG, 0, 0) == isbanded(aDiag, 0, 0) |
556 | 589 | @test !isbanded(adiag, -1, -1) |
| 590 | + @test isbanded(adiag, -1, -1) == isbanded(adiagG, -1, -1) == isbanded(aDiag, -1, -1) |
557 | 591 | @test !isbanded(adiag, 1, 1) |
| 592 | + @test isbanded(adiag, 1, 1) == isbanded(adiagG, 1, 1) == isbanded(aDiag, 1, 1) |
558 | 593 | end |
559 | 594 | @testset "isdiag" begin |
560 | 595 | @test !isdiag(tridiag) |
| 596 | + @test isdiag(tridiag) == isdiag(tridiagG) == isdiag(Tridiag) |
561 | 597 | @test !isdiag(ubidiag) |
| 598 | + @test isdiag(ubidiag) == isdiag(ubidiagG) == isdiag(uBidiag) |
562 | 599 | @test !isdiag(lbidiag) |
| 600 | + @test isdiag(lbidiag) == isdiag(lbidiagG) == isdiag(lBidiag) |
563 | 601 | @test isdiag(adiag) |
| 602 | + @test isdiag(adiag) ==isdiag(adiagG) == isdiag(aDiag) |
| 603 | + end |
| 604 | +end |
| 605 | + |
| 606 | +@testset "isbanded/istril/istriu with rectangular matrices" begin |
| 607 | + @testset "$(size(A))" for A in [zeros(0,4), zeros(2,5), zeros(5,2), zeros(4,0)] |
| 608 | + @testset for m in -(size(A,1)-1):(size(A,2)-1) |
| 609 | + A .= 0 |
| 610 | + A[diagind(A, m)] .= 1 |
| 611 | + G = GenericArray(A) |
| 612 | + @testset for (kl,ku) in Iterators.product(-6:6, -6:6) |
| 613 | + @test isbanded(A, kl, ku) == isbanded(G, kl, ku) == isempty(A) || (m in (kl:ku)) |
| 614 | + end |
| 615 | + @testset for k in -6:6 |
| 616 | + @test istriu(A,k) == istriu(G,k) == isempty(A) || (k <= m) |
| 617 | + @test istril(A,k) == istril(G,k) == isempty(A) || (k >= m) |
| 618 | + end |
| 619 | + end |
564 | 620 | end |
565 | 621 | end |
566 | 622 |
|
|
0 commit comments