Skip to content
Snippets Groups Projects
Select Git revision
  • 983b408a8a5044129d8e888cdd1eb2e5c7a1f925
  • develop default protected
  • feature/gmsh-reader
  • origin/stage/bouguettaia
  • feature/kinetic-schemes
  • feature/reconstruction
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/variational-hydro
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • master protected
  • feature/escobar-smoother
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

main.cpp

Blame
  • test_DenseMatrix.cpp 6.29 KiB
    #include <catch2/catch_test_macros.hpp>
    #include <catch2/matchers/catch_matchers_all.hpp>
    
    #include <utils/PugsAssert.hpp>
    
    #include <algebra/DenseMatrix.hpp>
    #include <algebra/Vector.hpp>
    
    // Instantiate to ensure full coverage is performed
    template class DenseMatrix<int>;
    
    // clazy:excludeall=non-pod-global-static
    
    TEST_CASE("DenseMatrix", "[algebra]")
    {
      SECTION("size")
      {
        DenseMatrix<int> A{2, 3};
        REQUIRE(A.nbRows() == 2);
        REQUIRE(A.nbColumns() == 3);
      }
    
      SECTION("write access")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
        REQUIRE(A(0, 0) == 0);
        REQUIRE(A(0, 1) == 1);
        REQUIRE(A(0, 2) == 2);
        REQUIRE(A(1, 0) == 3);
        REQUIRE(A(1, 1) == 4);
        REQUIRE(A(1, 2) == 5);
        DenseMatrix<const int> const_A = A;
        REQUIRE(const_A(0, 0) == 0);
        REQUIRE(const_A(0, 1) == 1);
        REQUIRE(const_A(0, 2) == 2);
        REQUIRE(const_A(1, 0) == 3);
        REQUIRE(const_A(1, 1) == 4);
        REQUIRE(const_A(1, 2) == 5);
      }
    
      SECTION("fill")
      {
        DenseMatrix<int> A{2, 3};
        A.fill(2);
        REQUIRE(A(0, 0) == 2);
        REQUIRE(A(0, 1) == 2);
        REQUIRE(A(0, 2) == 2);
        REQUIRE(A(1, 0) == 2);
        REQUIRE(A(1, 1) == 2);
        REQUIRE(A(1, 2) == 2);
      }
    
      SECTION("copy constructor (shallow)")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        const DenseMatrix<int> B = A;
        REQUIRE(B(0, 0) == 0);
        REQUIRE(B(0, 1) == 1);
        REQUIRE(B(0, 2) == 2);
        REQUIRE(B(1, 0) == 3);
        REQUIRE(B(1, 1) == 4);
        REQUIRE(B(1, 2) == 5);
      }
    
      SECTION("copy (deep)")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        const DenseMatrix<int> B = copy(A);
    
        A(0, 0) = 10;
        A(0, 1) = 11;
        A(0, 2) = 12;
        A(1, 0) = 13;
        A(1, 1) = 14;
        A(1, 2) = 15;
    
        REQUIRE(B(0, 0) == 0);
        REQUIRE(B(0, 1) == 1);
        REQUIRE(B(0, 2) == 2);
        REQUIRE(B(1, 0) == 3);
        REQUIRE(B(1, 1) == 4);
        REQUIRE(B(1, 2) == 5);
    
        REQUIRE(A(0, 0) == 10);
        REQUIRE(A(0, 1) == 11);
        REQUIRE(A(0, 2) == 12);
        REQUIRE(A(1, 0) == 13);
        REQUIRE(A(1, 1) == 14);
        REQUIRE(A(1, 2) == 15);
      }
    
      SECTION("self scalar multiplication")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        A *= 2;
        REQUIRE(A(0, 0) == 0);
        REQUIRE(A(0, 1) == 2);
        REQUIRE(A(0, 2) == 4);
        REQUIRE(A(1, 0) == 6);
        REQUIRE(A(1, 1) == 8);
        REQUIRE(A(1, 2) == 10);
      }
    
      SECTION("left scalar multiplication")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        const DenseMatrix<int> B = 2 * A;
    
        REQUIRE(B(0, 0) == 0);
        REQUIRE(B(0, 1) == 2);
        REQUIRE(B(0, 2) == 4);
        REQUIRE(B(1, 0) == 6);
        REQUIRE(B(1, 1) == 8);
        REQUIRE(B(1, 2) == 10);
      }
    
      SECTION("product matrix vector")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 6;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        Vector<int> x{3};
        x[0] = 7;
        x[1] = 3;
        x[2] = 4;
    
        Vector y = A * x;
        REQUIRE(y[0] == 53);
        REQUIRE(y[1] == 53);
      }
    
      SECTION("self scalar division")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 2;
        A(0, 2) = 4;
        A(1, 0) = 6;
        A(1, 1) = 8;
        A(1, 2) = 10;
    
        A /= 2;
    
        REQUIRE(A(0, 0) == 0);
        REQUIRE(A(0, 1) == 1);
        REQUIRE(A(0, 2) == 2);
        REQUIRE(A(1, 0) == 3);
        REQUIRE(A(1, 1) == 4);
        REQUIRE(A(1, 2) == 5);
      }
    
      SECTION("self minus")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        DenseMatrix<int> B{2, 3};
        B(0, 0) = 5;
        B(0, 1) = 6;
        B(0, 2) = 4;
        B(1, 0) = 2;
        B(1, 1) = 1;
        B(1, 2) = 3;
    
        A -= B;
    
        REQUIRE(A(0, 0) == -5);
        REQUIRE(A(0, 1) == -5);
        REQUIRE(A(0, 2) == -2);
        REQUIRE(A(1, 0) == 1);
        REQUIRE(A(1, 1) == 3);
        REQUIRE(A(1, 2) == 2);
      }
    
      SECTION("self sum")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        DenseMatrix<int> B{2, 3};
        B(0, 0) = 5;
        B(0, 1) = 6;
        B(0, 2) = 4;
        B(1, 0) = 2;
        B(1, 1) = 1;
        B(1, 2) = 3;
    
        A += B;
    
        REQUIRE(A(0, 0) == 5);
        REQUIRE(A(0, 1) == 7);
        REQUIRE(A(0, 2) == 6);
        REQUIRE(A(1, 0) == 5);
        REQUIRE(A(1, 1) == 5);
        REQUIRE(A(1, 2) == 8);
      }
    
      SECTION("sum")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 6;
        A(0, 1) = 5;
        A(0, 2) = 4;
        A(1, 0) = 3;
        A(1, 1) = 2;
        A(1, 2) = 1;
    
        DenseMatrix<int> B{2, 3};
        B(0, 0) = 0;
        B(0, 1) = 1;
        B(0, 2) = 2;
        B(1, 0) = 3;
        B(1, 1) = 4;
        B(1, 2) = 5;
    
        DenseMatrix C = A + B;
        REQUIRE(C(0, 0) == 6);
        REQUIRE(C(0, 1) == 6);
        REQUIRE(C(0, 2) == 6);
        REQUIRE(C(1, 0) == 6);
        REQUIRE(C(1, 1) == 6);
        REQUIRE(C(1, 2) == 6);
      }
    
      SECTION("difference")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 6;
        A(0, 1) = 5;
        A(0, 2) = 4;
        A(1, 0) = 3;
        A(1, 1) = 2;
        A(1, 2) = 1;
    
        DenseMatrix<int> B{2, 3};
        B(0, 0) = 0;
        B(0, 1) = 1;
        B(0, 2) = 2;
        B(1, 0) = 3;
        B(1, 1) = 4;
        B(1, 2) = 5;
    
        DenseMatrix C = A - B;
        REQUIRE(C(0, 0) == 6);
        REQUIRE(C(0, 1) == 4);
        REQUIRE(C(0, 2) == 2);
        REQUIRE(C(1, 0) == 0);
        REQUIRE(C(1, 1) == -2);
        REQUIRE(C(1, 2) == -4);
      }
    
      SECTION("transpose")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 0;
        A(0, 1) = 1;
        A(0, 2) = 2;
        A(1, 0) = 3;
        A(1, 1) = 4;
        A(1, 2) = 5;
    
        DenseMatrix B = transpose(A);
        REQUIRE(B(0, 0) == 0);
        REQUIRE(B(0, 1) == 3);
        REQUIRE(B(1, 0) == 1);
        REQUIRE(B(1, 1) == 4);
        REQUIRE(B(2, 0) == 2);
        REQUIRE(B(2, 1) == 5);
      }
    
      SECTION("product matrix vector")
      {
        DenseMatrix<int> A{2, 3};
        A(0, 0) = 1;
        A(0, 1) = 2;
        A(0, 2) = 3;
        A(1, 0) = 4;
        A(1, 1) = 5;
        A(1, 2) = 6;
    
        DenseMatrix<int> B{3, 2};
        B(0, 0) = 2;
        B(0, 1) = 8;
        B(1, 0) = 4;
        B(1, 1) = 9;
        B(2, 0) = 6;
        B(2, 1) = 10;
    
        DenseMatrix C = A * B;
        REQUIRE(C(0, 0) == 28);
        REQUIRE(C(0, 1) == 56);
        REQUIRE(C(1, 0) == 64);
        REQUIRE(C(1, 1) == 137);
      }
    }