1
2 #include "TMV.h"
3 #include "TMV_Small.h"
4 #include "TMV_Test.h"
5 #include "TMV_Test_3.h"
6 #define NOLDIVEQ
7 #include "TMV_TestMatrixDivArith.h"
8
9 template <class T, tmv::StorageType stor, int N>
TestSmallNonSquareDiv_B2a()10 static void TestSmallNonSquareDiv_B2a()
11 {
12 tmv::SmallMatrix<T,6,N,stor> m;
13
14 for(int i=0;i<6;++i) for(int j=0;j<N;++j) m(i,j) = T(2+4*i-5*j);
15 m.diag() *= T(11);
16 m /= T(7);
17 if (N > 1) m(1,0) = -2;
18 if (N > 2) m(2,0) = 7;
19 if (N > 3) m(3,0) = -10;
20 if (N > 2) m(2,2) = 30;
21
22 tmv::SmallMatrix<T,6,N,stor> a1 = m;
23 tmv::SmallMatrix<T,6,6,tmv::ColMajor> a3a = m * m.transpose();
24 tmv::SmallMatrix<T,N,6,stor> a4;
25 a3a.row(5) *= T(7);
26 if (N > 3) a3a.col(3).addToAll(7);
27 tmv::SmallMatrix<std::complex<T>,6,N,stor> c1 = a1 * std::complex<T>(1,2);
28 tmv::SmallMatrix<std::complex<T>,6,6,tmv::ColMajor> c3a =
29 a3a * std::complex<T>(-4,8);
30 tmv::SmallMatrix<std::complex<T>,N,6,stor> c4;
31
32 TestMatrixDivArith3b(tmv::QR,a1,a3a,a4,c1,c3a,c4,"Square/NonSquare");
33 #if (XTEST & 32)
34 tmv::SmallMatrix<T,6,N,stor|tmv::FortranStyle> a1f = a1;
35 tmv::SmallMatrix<std::complex<T>,6,N,stor|tmv::FortranStyle> c1f = c1;
36
37 tmv::SmallMatrix<T,6,6,tmv::ColMajor|tmv::FortranStyle> a3fa = a3a;
38 tmv::SmallMatrix<std::complex<T>,6,6,tmv::ColMajor|tmv::FortranStyle> c3fa = c3a;
39 tmv::SmallMatrix<T,N,6,stor|tmv::FortranStyle> a4f = a4;
40 tmv::SmallMatrix<std::complex<T>,N,6,stor|tmv::FortranStyle> c4f = c4;
41
42 TestMatrixDivArith3b(tmv::QR,a1f,a3a,a4,c1f,c3a,c4,"Square/NonSquare");
43 TestMatrixDivArith3b(tmv::QR,a1f,a3fa,a4,c1f,c3fa,c4,"Square/NonSquare");
44 TestMatrixDivArith3b(tmv::QR,a1f,a3fa,a4f,c1f,c3fa,c4f,"Square/NonSquare");
45 #endif
46 }
47
48 template <class T>
TestSmallMatrixDiv_B2a()49 void TestSmallMatrixDiv_B2a()
50 {
51 TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,2>();
52 TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,5>();
53 #if (XTEST & 2)
54 TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,1>();
55 TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,3>();
56 TestSmallNonSquareDiv_B2a<T,tmv::ColMajor,4>();
57 TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,1>();
58 TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,2>();
59 TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,3>();
60 TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,4>();
61 TestSmallNonSquareDiv_B2a<T,tmv::RowMajor,5>();
62 #endif
63 }
64
65 #ifdef TEST_DOUBLE
66 template void TestSmallMatrixDiv_B2a<double>();
67 #endif
68 #ifdef TEST_FLOAT
69 template void TestSmallMatrixDiv_B2a<float>();
70 #endif
71 #ifdef TEST_LONGDOUBLE
72 template void TestSmallMatrixDiv_B2a<long double>();
73 #endif
74