LCOV - code coverage report
Current view: top level - source/tests - TestOpAdjoint.cpp (source / functions) Hit Total Coverage
Test: LibForBES Unit Tests Lines: 56 56 100.0 %
Date: 2016-04-18 Functions: 10 10 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * File:   TestOpAdjoint.cpp
       3             :  * Author: Pantelis Sopasakis
       4             :  *
       5             :  * Created on Sep 15, 2015, 3:01:47 PM
       6             :  */
       7             : 
       8             : #include "TestOpAdjoint.h"
       9             : #include "OpAdjoint.h"
      10             : 
      11             : 
      12           1 : CPPUNIT_TEST_SUITE_REGISTRATION(TestOpAdjoint);
      13             : 
      14           3 : TestOpAdjoint::TestOpAdjoint() {
      15           3 : }
      16             : 
      17           6 : TestOpAdjoint::~TestOpAdjoint() {
      18           6 : }
      19             : 
      20           3 : void TestOpAdjoint::setUp() {
      21           3 : }
      22             : 
      23           3 : void TestOpAdjoint::tearDown() {
      24           3 : }
      25             : 
      26           1 : void TestOpAdjoint::testCall() {
      27           1 :     const size_t n = 16;
      28           1 :     const double tol = 1e-10;
      29           1 :     Matrix A = MatrixFactory::MakeRandomMatrix(n, n, 0.0, 1.0, Matrix::MATRIX_DENSE);
      30           2 :     Matrix x = MatrixFactory::MakeRandomMatrix(n, 1, 0.0, 1.0, Matrix::MATRIX_DENSE);
      31             : 
      32           1 :     LinearOperator *T = new MatrixOperator(A);
      33           1 :     LinearOperator *Tstar = new OpAdjoint(*T);
      34             : 
      35           2 :     Matrix Tx_adj = T->callAdjoint(x);  /*     T*(x)    */
      36           2 :     Matrix Tstarx = Tstar -> call(x);   /*     T*(x)    */
      37             : 
      38          17 :     for (size_t i = 0; i < n; i++) {
      39          16 :         _ASSERT_NUM_EQ(Tx_adj.get(i, 0), Tstarx.get(i, 0), tol);
      40             :     }
      41             : 
      42             : 
      43           2 :     Matrix T_star_star_x = Tstar->callAdjoint(x);                   /*     T**(x)    */
      44           2 :     Matrix T_x = T->call(x);                                        /*     T(x)      */
      45             :     
      46           1 :     _ASSERT_EQ(T_x, T_star_star_x);
      47           1 :     _ASSERT_EQ(T->isSelfAdjoint(), Tstar->isSelfAdjoint());
      48             : 
      49           1 :     delete T;
      50           2 :     delete Tstar;
      51           1 : }
      52             : 
      53           1 : void TestOpAdjoint::testCallAdjoint() {
      54           1 :     const size_t n = 16;
      55           1 :     const size_t m = 11;
      56           1 :     const double tol = 1e-8;
      57           1 :     Matrix A = MatrixFactory::MakeRandomMatrix(m, n, 0.0, 1.0, Matrix::MATRIX_DENSE);
      58           2 :     Matrix x = MatrixFactory::MakeRandomMatrix(m, 1, 0.0, 1.0, Matrix::MATRIX_DENSE);
      59             :     
      60           1 :     LinearOperator *T = new MatrixOperator(A);
      61           1 :     LinearOperator *Tstar = new OpAdjoint(*T);
      62             : 
      63           2 :     Matrix Tx = T->callAdjoint(x);
      64           2 :     Matrix T_doubleAdj_x = Tstar->call(x);
      65             :     
      66           1 :     _ASSERT_EQ(n, T->dimensionIn().first);
      67           1 :     _ASSERT_EQ(m, T->dimensionOut().first);
      68           1 :     _ASSERT_EQ(m, Tstar->dimensionIn().first);
      69           1 :     _ASSERT_EQ(n, Tstar->dimensionOut().first);
      70             : 
      71          17 :     for (size_t i = 0; i < n; i++) {
      72          16 :         _ASSERT_NUM_EQ(Tx.get(i, 0), T_doubleAdj_x.get(i, 0), tol);
      73             :     }
      74             :     
      75           1 :     delete T;
      76           2 :     delete Tstar;
      77           1 : }
      78             : 
      79           1 : void TestOpAdjoint::testSelfAdjoint() {
      80           1 :     const size_t n = 5;
      81           1 :     Matrix A = MatrixFactory::MakeRandomMatrix(n, n, 0.0, 1.0, Matrix::MATRIX_SYMMETRIC);
      82             :     
      83           1 :     LinearOperator *T = new MatrixOperator(A);
      84           1 :     LinearOperator *Tstar = new OpAdjoint(*T);
      85             :     
      86           1 :     _ASSERT(T->isSelfAdjoint());
      87           1 :     _ASSERT(Tstar->isSelfAdjoint());
      88             :     
      89           1 :     delete T;
      90           1 :     delete Tstar;
      91           4 : }

Generated by: LCOV version 1.10