1 #define START 0
2 
3 #include "TMV.h"
4 #include "TMV_SymBand.h"
5 #include "TMV_Test.h"
6 #include "TMV_Test_2.h"
7 #include "TMV_TestSymBandArith.h"
8 
9 #define NOADDEQ
10 #define NOMULTEQ
11 #define NOELEMMULT
12 
13 #include "TMV_TestMatrixArith.h"
14 
15 template <class T>
TestSymBandMatrixArith_D1()16 void TestSymBandMatrixArith_D1()
17 {
18     std::vector<tmv::SymBandMatrixView<T> > sb;
19     std::vector<tmv::SymBandMatrixView<std::complex<T> > > csb;
20     MakeSymBandList(sb,csb,InDef);
21 
22     const int N = sb[0].size();
23 
24     tmv::Matrix<T> a1(N,N);
25     for (int i=0; i<N; ++i) for (int j=0; j<N; ++j) a1(i,j) = T(3+i-5*j);
26     tmv::Matrix<std::complex<T> > ca1(N,N);
27     for (int i=0; i<N; ++i) for (int j=0; j<N; ++j) ca1(i,j) =
28         std::complex<T>(3+i-5*j,2-3*i);
29 
30     tmv::UpperTriMatrix<T,tmv::NonUnitDiag|tmv::RowMajor> u1(a1);
31     tmv::UpperTriMatrix<std::complex<T>,tmv::NonUnitDiag|tmv::RowMajor> cu1(ca1);
32     tmv::UpperTriMatrixView<T> u1v = u1.view();
33     tmv::UpperTriMatrixView<std::complex<T> > cu1v = cu1.view();
34 
35 #if (XTEST & 2)
36     tmv::UpperTriMatrix<T,tmv::UnitDiag|tmv::RowMajor> u2(a1);
37     tmv::UpperTriMatrix<T,tmv::NonUnitDiag|tmv::ColMajor> u3(a1);
38     tmv::UpperTriMatrix<T,tmv::UnitDiag|tmv::ColMajor> u4(a1);
39     tmv::LowerTriMatrix<T,tmv::NonUnitDiag|tmv::RowMajor> l1(a1);
40     tmv::LowerTriMatrix<T,tmv::UnitDiag|tmv::RowMajor> l2(a1);
41     tmv::LowerTriMatrix<T,tmv::NonUnitDiag|tmv::ColMajor> l3(a1);
42     tmv::LowerTriMatrix<T,tmv::UnitDiag|tmv::ColMajor> l4(a1);
43 
44     tmv::UpperTriMatrix<std::complex<T>,tmv::UnitDiag|tmv::RowMajor> cu2(ca1);
45     tmv::UpperTriMatrix<std::complex<T>,tmv::NonUnitDiag|tmv::ColMajor> cu3(ca1);
46     tmv::UpperTriMatrix<std::complex<T>,tmv::UnitDiag|tmv::ColMajor> cu4(ca1);
47     tmv::LowerTriMatrix<std::complex<T>,tmv::NonUnitDiag|tmv::RowMajor> cl1(ca1);
48     tmv::LowerTriMatrix<std::complex<T>,tmv::UnitDiag|tmv::RowMajor> cl2(ca1);
49     tmv::LowerTriMatrix<std::complex<T>,tmv::NonUnitDiag|tmv::ColMajor> cl3(ca1);
50     tmv::LowerTriMatrix<std::complex<T>,tmv::UnitDiag|tmv::ColMajor> cl4(ca1);
51 
52     tmv::UpperTriMatrixView<T> u2v = u2.view();
53     tmv::UpperTriMatrixView<T> u3v = u3.view();
54     tmv::UpperTriMatrixView<T> u4v = u4.view();
55     tmv::LowerTriMatrixView<T> l1v = l1.view();
56     tmv::LowerTriMatrixView<T> l2v = l2.view();
57     tmv::LowerTriMatrixView<T> l3v = l3.view();
58     tmv::LowerTriMatrixView<T> l4v = l4.view();
59     tmv::UpperTriMatrixView<std::complex<T> > cu2v = cu2.view();
60     tmv::UpperTriMatrixView<std::complex<T> > cu3v = cu3.view();
61     tmv::UpperTriMatrixView<std::complex<T> > cu4v = cu4.view();
62     tmv::LowerTriMatrixView<std::complex<T> > cl1v = cl1.view();
63     tmv::LowerTriMatrixView<std::complex<T> > cl2v = cl2.view();
64     tmv::LowerTriMatrixView<std::complex<T> > cl3v = cl3.view();
65     tmv::LowerTriMatrixView<std::complex<T> > cl4v = cl4.view();
66 #endif
67 
68     for(size_t i=START;i<sb.size();i++) {
69         if (showstartdone) {
70             std::cout<<"Start loop i = "<<i<<std::endl;
71             std::cout<<"si = "<<sb[i]<<std::endl;
72         }
73 
74         tmv::SymBandMatrixView<T> si = sb[i];
75         tmv::SymBandMatrixView<std::complex<T> > csi = csb[i];
76 
77         TestMatrixArith4(si,csi,u1v,cu1v,"SymBand/UpperTri");
78         TestMatrixArith5(si,csi,u1v,cu1v,"SymBand/UpperTri");
79         TestMatrixArith6x(si,csi,u1v,cu1v,"SymBand/UpperTri");
80 #if (XTEST & 2)
81         TestMatrixArith4(si,csi,l1v,cl1v,"SymBand/LowerTri");
82         TestMatrixArith5(si,csi,l1v,cl1v,"SymBand/LowerTri");
83         TestMatrixArith6x(si,csi,l1v,cl1v,"SymBand/LowerTri");
84         TestMatrixArith4(si,csi,u2v,cu2v,"SymBand/UpperTri");
85         TestMatrixArith5(si,csi,u2v,cu2v,"SymBand/UpperTri");
86         TestMatrixArith6x(si,csi,u2v,cu2v,"SymBand/UpperTri");
87         TestMatrixArith4(si,csi,l2v,cl2v,"SymBand/LowerTri");
88         TestMatrixArith5(si,csi,l2v,cl2v,"SymBand/LowerTri");
89         TestMatrixArith6x(si,csi,l2v,cl2v,"SymBand/LowerTri");
90         TestMatrixArith4(si,csi,u3v,cu3v,"SymBand/UpperTri");
91         TestMatrixArith5(si,csi,u3v,cu3v,"SymBand/UpperTri");
92         TestMatrixArith6x(si,csi,u3v,cu3v,"SymBand/UpperTri");
93         TestMatrixArith4(si,csi,l3v,cl3v,"SymBand/LowerTri");
94         TestMatrixArith5(si,csi,l3v,cl3v,"SymBand/LowerTri");
95         TestMatrixArith6x(si,csi,l3v,cl3v,"SymBand/LowerTri");
96         TestMatrixArith4(si,csi,u4v,cu4v,"SymBand/UpperTri");
97         TestMatrixArith5(si,csi,u4v,cu4v,"SymBand/UpperTri");
98         TestMatrixArith6x(si,csi,u4v,cu4v,"SymBand/UpperTri");
99         TestMatrixArith4(si,csi,l4v,cl4v,"SymBand/LowerTri");
100         TestMatrixArith5(si,csi,l4v,cl4v,"SymBand/LowerTri");
101         TestMatrixArith6x(si,csi,l4v,cl4v,"SymBand/LowerTri");
102 #endif
103     }
104 }
105 
106 #ifdef TEST_DOUBLE
107 template void TestSymBandMatrixArith_D1<double>();
108 #endif
109 #ifdef TEST_FLOAT
110 template void TestSymBandMatrixArith_D1<float>();
111 #endif
112 #ifdef TEST_LONGDOUBLE
113 template void TestSymBandMatrixArith_D1<long double>();
114 #endif
115 #ifdef TEST_INT
116 template void TestSymBandMatrixArith_D1<int>();
117 #endif
118