1 #include "TMV_Test.h"
2 #include "TMV_Test_1.h"
3 #include "TMV.h"
4 
5 #define NOADDEQ
6 #define NOELEMMULT
7 
8 #include "TMV_TestMatrixArith.h"
9 
10 template <class T>
TestTriMatrixArith_C4a()11 void TestTriMatrixArith_C4a()
12 {
13     typedef std::complex<T> CT;
14 
15     tmv::Matrix<T,tmv::RowMajor> a1x(4,4);
16     for(int i=0;i<4;++i) for(int j=0;j<4;++j) {
17         a1x(i,j) = T(3+4*i-6*j);
18     }
19     a1x(0,0) = 14;
20     a1x(1,0) = -2;
21     a1x(2,0) = 7;
22     a1x(3,0) = -10;
23     a1x(2,2) = 30;
24 
25     tmv::Matrix<CT,tmv::RowMajor> ca1x = a1x;
26     ca1x(2,3) += CT(2,3);
27     ca1x(1,0) *= CT(0,2);
28     ca1x.col(1) *= CT(-1,3);
29     ca1x.row(3) += tmv::Vector<CT>(4,CT(1,9));
30 
31     tmv::Matrix<T,tmv::ColMajor> a2x = a1x.transpose();
32     a2x.row(1) *= T(3);
33     a2x.col(2) -= tmv::Vector<T>(4,4);
34     tmv::Matrix<CT,tmv::ColMajor> ca2x = ca1x;
35     ca2x -= a2x;
36     ca2x *= CT(1,-2);
37     ca2x(0,0) = CT(0,-5);
38 
39     tmv::UpperTriMatrixView<T> u1 = a1x.upperTri();
40     tmv::UpperTriMatrixView<CT> cu1 = ca1x.upperTri();
41     tmv::UpperTriMatrixView<T> u2 = a2x.upperTri();
42     tmv::UpperTriMatrixView<CT> cu2 = ca2x.upperTri();
43     tmv::UpperTriMatrixView<T> u4 = a1x.unitUpperTri();
44     tmv::UpperTriMatrixView<CT> cu4 = ca1x.unitUpperTri();
45     tmv::UpperTriMatrixView<T> u5 = a2x.unitUpperTri();
46     tmv::UpperTriMatrixView<CT> cu5 = ca2x.unitUpperTri();
47 
48     tmv::DiagMatrixView<T> d1 = DiagMatrixViewOf(a1x.row(0));
49     tmv::DiagMatrixView<CT> cd1 = DiagMatrixViewOf(ca1x.row(0));
50 
51     TestMatrixArith4(d1,cd1,u1,cu1,"Diag/UpperTri 1");
52     TestMatrixArith4(d1,cd1,u2,cu2,"Diag/UpperTri 2");
53     TestMatrixArith4(d1,cd1,u4,cu4,"Diag/UpperTri 3");
54     TestMatrixArith4(d1,cd1,u5,cu5,"Diag/UpperTri 4");
55 #if (XTEST & 1)
56     tmv::Matrix<T> a3x(12,16);
57     for(int i=0;i<12;++i) for(int j=0;j<16;++j) a3x(i,j) = T(1-2*i+3*j);
58     a3x.diag().addToAll(30);
59     tmv::Matrix<CT> ca3x = a3x*CT(1,-2);
60     ca3x.diag().addToAll(CT(-22,15));
61 
62     tmv::DiagMatrixView<T> d3 = DiagMatrixViewOf(a1x.diag());
63     tmv::DiagMatrixView<CT> cd3 = DiagMatrixViewOf(ca1x.diag());
64     tmv::UpperTriMatrixView<T> u3 = a3x.subMatrix(0,12,0,16,3,4).upperTri();
65     tmv::UpperTriMatrixView<CT> cu3 = ca3x.subMatrix(0,12,0,16,3,4).upperTri();
66     tmv::UpperTriMatrixView<T> u6 = a3x.subMatrix(0,12,0,16,3,4).unitUpperTri();
67     tmv::UpperTriMatrixView<CT> cu6 = ca3x.subMatrix(0,12,0,16,3,4).unitUpperTri();
68     TestMatrixArith4(d3,cd3,u1,cu1,"Diag/UpperTri 5");
69     TestMatrixArith4(d3,cd3,u2,cu2,"Diag/UpperTri 6");
70     TestMatrixArith4(d3,cd3,u3,cu3,"Diag/UpperTri 7");
71     TestMatrixArith4(d3,cd3,u4,cu4,"Diag/UpperTri 8");
72     TestMatrixArith4(d3,cd3,u5,cu5,"Diag/UpperTri 9");
73     TestMatrixArith4(d3,cd3,u6,cu6,"Diag/UpperTri 10");
74     TestMatrixArith4(d1,cd1,u3,cu3,"Diag/UpperTri 11");
75     TestMatrixArith4(d1,cd1,u6,cu6,"Diag/UpperTri 12");
76 #endif
77 
78 #if (XTEST & 2)
79     tmv::LowerTriMatrixView<T> l1 = a1x.lowerTri();
80     tmv::LowerTriMatrixView<CT> cl1 = ca1x.lowerTri();
81     tmv::LowerTriMatrixView<T> l2 = a2x.lowerTri();
82     tmv::LowerTriMatrixView<CT> cl2 = ca2x.lowerTri();
83     tmv::LowerTriMatrixView<T> l4 = a1x.unitLowerTri();
84     tmv::LowerTriMatrixView<CT> cl4 = ca1x.unitLowerTri();
85     tmv::LowerTriMatrixView<T> l5 = a2x.unitLowerTri();
86     tmv::LowerTriMatrixView<CT> cl5 = ca2x.unitLowerTri();
87 
88     TestMatrixArith4(d1,cd1,l1,cl1,"Diag/LowerTri 1");
89     TestMatrixArith4(d1,cd1,l2,cl2,"Diag/LowerTri 2");
90     TestMatrixArith4(d1,cd1,l4,cl4,"Diag/LowerTri 3");
91     TestMatrixArith4(d1,cd1,l5,cl5,"Diag/LowerTri 4");
92 #if (XTEST & 1)
93     tmv::LowerTriMatrixView<T> l3 = a3x.subMatrix(0,12,0,16,3,4).lowerTri();
94     tmv::LowerTriMatrixView<CT> cl3 = ca3x.subMatrix(0,12,0,16,3,4).lowerTri();
95     tmv::LowerTriMatrixView<T> l6 = a3x.subMatrix(0,12,0,16,3,4).unitLowerTri();
96     tmv::LowerTriMatrixView<CT> cl6 = ca3x.subMatrix(0,12,0,16,3,4).unitLowerTri();
97     TestMatrixArith4(d3,cd3,l1,cl1,"Diag/LowerTri 5");
98     TestMatrixArith4(d3,cd3,l2,cl2,"Diag/LowerTri 6");
99     TestMatrixArith4(d3,cd3,l3,cl3,"Diag/LowerTri 7");
100     TestMatrixArith4(d3,cd3,l4,cl4,"Diag/LowerTri 8");
101     TestMatrixArith4(d3,cd3,l5,cl5,"Diag/LowerTri 9");
102     TestMatrixArith4(d3,cd3,l6,cl6,"Diag/LowerTri 10");
103     TestMatrixArith4(d1,cd1,l3,cl3,"Diag/LowerTri 11");
104     TestMatrixArith4(d1,cd1,l6,cl6,"Diag/LowerTri 12");
105 #endif
106 #endif
107 }
108 
109 #ifdef TEST_DOUBLE
110 template void TestTriMatrixArith_C4a<double>();
111 #endif
112 #ifdef TEST_FLOAT
113 template void TestTriMatrixArith_C4a<float>();
114 #endif
115 #ifdef TEST_LONGDOUBLE
116 template void TestTriMatrixArith_C4a<long double>();
117 #endif
118 #ifdef TEST_INT
119 template void TestTriMatrixArith_C4a<int>();
120 #endif
121