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