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