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