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